⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xbus_if.sv

📁 This is OVM 2.0 source code .Very useful for developing system verilog Env
💻 SV
字号:
//----------------------------------------------------------------------//   Copyright 2007-2008 Mentor Graphics Corporation//   Copyright 2007-2008 Cadence Design Systems, Inc.//   All Rights Reserved Worldwide////   Licensed under the Apache License, Version 2.0 (the//   "License"); you may not use this file except in//   compliance with the License.  You may obtain a copy of//   the License at////       http://www.apache.org/licenses/LICENSE-2.0////   Unless required by applicable law or agreed to in//   writing, software distributed under the License is//   distributed on an "AS IS" BASIS, WITHOUT 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 : xbus_bus_monitor_if.sv ******************************************************************************/interface xbus_if ();  // Control flags  bit                has_checks = 1;  bit                has_coverage = 1;  // Actual Signals  logic              sig_clock;  logic              sig_reset;  logic       [15:0] sig_request;  logic       [15:0] sig_grant;  logic       [15:0] sig_addr;  logic        [1:0] sig_size;  logic              sig_read;  logic              sig_write;  logic              sig_start;  logic              sig_bip;  wire logic   [7:0] sig_data;  logic        [7:0] sig_data_out;  logic              sig_wait;  logic              sig_error;  logic              rw;assign sig_data = rw ? sig_data_out : 8'bz;// Coverage and assertions to be implemented here.always @(negedge sig_clock)begin// Address must not be X or Z during Address PhaseassertAddrUnknown:assert property (                  disable iff(!has_checks)                   ($onehot(sig_grant) |-> !$isunknown(sig_addr)))                  else                    $error("ERR_ADDR_XZ\n Address went to X or Z \                            during Address Phase");// Read must not be X or Z during Address PhaseassertReadUnknown:assert property (                   disable iff(!has_checks)                   ($onehot(sig_grant) |-> !$isunknown(sig_read)))                  else                    $error("ERR_READ_XZ\n READ went to X or Z during \                            Address Phase");// Write must not be X or Z during Address PhaseassertWriteUnknown:assert property (                    disable iff(!has_checks)                    ($onehot(sig_grant) |-> !$isunknown(sig_write)))                   else                     $error("ERR_WRITE_XZ\n WRITE went to X or Z during \                             Address Phase");// Size must not be X or Z during Address PhaseassertSizeUnknown:assert property (                   disable iff(!has_checks)                   ($onehot(sig_grant) |-> !$isunknown(sig_size)))                  else                    $error("ERR_SIZE_XZ\n SIZE went to X or Z during \                            Address Phase");// Wait must not be X or Z during Data PhaseassertWaitUnknown:assert property (                   disable iff(!has_checks)                   ($onehot(sig_grant) |=> !$isunknown(sig_wait)))                  else                    $error("ERR_WAIT_XZ\n WAIT went to X or Z during \                            Data Phase");// Error must not be X or Z during Data PhaseassertErrorUnknown:assert property (                    disable iff(!has_checks)                    ($onehot(sig_grant) |=> !$isunknown(sig_error)))                   else                    $error("ERR_ERROR_XZ\n ERROR went to X or Z during \                            Data Phase");//Reset must be asserted for at least 3 clocks each time it is assertedassertResetFor3Clocks: assert property (                       disable iff(!has_checks)                        ($rose(sig_reset) |=> sig_reset[*2]))                       else                          $error("ERR_SHORT_RESET_DURING_TEST\n",                                "Reset was asserted for less than 3 clock \                                 cycles");// Only one grant is asserted//assertSingleGrant: assert property (//                   disable iff(!has_checks)//                   (sig_start |=> $onehot0(sig_grant)))//                   else//                     $error("ERR_GRANT\n More that one grant asserted");// Read and write never true at the same timeassertReadOrWrite: assert property (                   disable iff(!has_checks)                    ($onehot(sig_grant) |-> !(sig_read && sig_write)))                   else                     $error("ERR_READ_OR_WRITE\n Read and Write true at \                             the same time");endendinterface : xbus_if

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -