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

📄 axipc.sv

📁 amba3 sva 完全验证的代码
💻 SV
📖 第 1 页 / 共 5 页
字号:
  // =====  property AXI_ERRM_AWLEN_STABLE;    @(posedge `AXI_SVA_CLK)          !($isunknown({AWVALID,AWREADY,AWLEN})) &          `AXI_SVA_RSTn & AWVALID & !AWREADY      ##1 `AXI_SVA_RSTn      |-> $stable(AWLEN);  endproperty  axi_errm_awlen_stable: assert property (AXI_ERRM_AWLEN_STABLE) else   $error("AXI_ERRM_AWLEN_STABLE. AWLEN must remain stable when AWVALID is asserted and AWREADY low. Spec: section 3.1, and figure 3-1, on page 3-2.");  // INDEX:        - AXI_ERRM_AWLOCK_STABLE  // =====  property AXI_ERRM_AWLOCK_STABLE;    @(posedge `AXI_SVA_CLK)          !($isunknown({AWVALID,AWREADY,AWLOCK})) &          `AXI_SVA_RSTn & AWVALID & !AWREADY      ##1 `AXI_SVA_RSTn      |-> $stable(AWLOCK);  endproperty  axi_errm_awlock_stable: assert property (AXI_ERRM_AWLOCK_STABLE) else   $error("AXI_ERRM_AWLOCK_STABLE. AWLOCK must remain stable when AWVALID is asserted and AWREADY low. Spec: section 3.1, and figure 3-1, on page 3-2.");  // INDEX:        - AXI_ERRM_AWPROT_STABLE  // =====  property AXI_ERRM_AWPROT_STABLE;    @(posedge `AXI_SVA_CLK)          !($isunknown({AWVALID,AWREADY,AWPROT})) &          `AXI_SVA_RSTn & AWVALID & !AWREADY      ##1 `AXI_SVA_RSTn      |-> $stable(AWPROT);  endproperty  axi_errm_awprot_stable: assert property (AXI_ERRM_AWPROT_STABLE) else   $error("AXI_ERRM_AWPROT_STABLE. AWPROT must remain stable when AWVALID is asserted and AWREADY low. Spec: section 3.1, and figure 3-1, on page 3-2.");  // INDEX:        - AXI_ERRM_AWSIZE_STABLE  // =====  property AXI_ERRM_AWSIZE_STABLE;    @(posedge `AXI_SVA_CLK)          !($isunknown({AWVALID,AWREADY,AWSIZE})) &          `AXI_SVA_RSTn & AWVALID & !AWREADY      ##1 `AXI_SVA_RSTn      |-> $stable(AWSIZE);  endproperty  axi_errm_awsize_stable: assert property (AXI_ERRM_AWSIZE_STABLE) else   $error("AXI_ERRM_AWSIZE_STABLE. AWSIZE must remain stable when AWVALID is asserted and AWREADY low. Spec: section 3.1, and figure 3-1, on page 3-2.");  // INDEX:        - AXI_ERRM_AWVALID_STABLE  // =====  property AXI_ERRM_AWVALID_STABLE;    @(posedge `AXI_SVA_CLK)          `AXI_SVA_RSTn & AWVALID & !AWREADY & !($isunknown({AWVALID,AWREADY}))      ##1 `AXI_SVA_RSTn      |-> AWVALID;  endproperty  axi_errm_awvalid_stable: assert property (AXI_ERRM_AWVALID_STABLE) else   $error("AXI_ERRM_AWVALID_STABLE. Once AWVALID is asserted, it must remain asserted until AWREADY is high. Spec: section 3.1.1 on page 3-2.");  // INDEX:        - AXI_RECS_AWREADY_MAX_WAIT  // =====  // Note: this rule does not error if VALID goes low (breaking VALID_STABLE rule)  property   AXI_RECS_AWREADY_MAX_WAIT;    @(posedge `AXI_SVA_CLK)      `AXI_SVA_RSTn & !($isunknown({AWVALID,AWREADY})) &      RecommendOn                              & // Parameter that can disable all AXI_REC*_* rules      RecMaxWaitOn                             & // Parameter that can disable just AXI_REC*_MAX_WAIT rules                         ( AWVALID & !AWREADY)       |-> ##[1:MAXWAITS] (!AWVALID |  AWREADY);  // READY=1 within MAXWAITS cycles (or VALID=0)  endproperty  axi_recs_awready_max_wait: assert property (AXI_RECS_AWREADY_MAX_WAIT) else   $warning("AXI_RECS_AWREADY_MAX_WAIT. AWREADY should be asserted within MAXWAITS cycles of AWVALID being asserted.");  //------------------------------------------------------------------------------// INDEX:   3) X-Propagation Rules//------------------------------------------------------------------------------`ifdef AXI_XCHECK_OFF`else  // X-Checking on by default  // INDEX:        - AXI_ERRM_AWADDR_X  // =====  property AXI_ERRM_AWADDR_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn & AWVALID        |-> ! $isunknown(AWADDR);  endproperty  axi_errm_awaddr_x: assert property (AXI_ERRM_AWADDR_X) else   $error("AXI_ERRM_AWADDR_X. When AWVALID is high, a value of X on AWADDR is not permitted. Spec: section 3.1.1 on page 3-3.");  // INDEX:        - AXI_ERRM_AWBURST_X  // =====  property AXI_ERRM_AWBURST_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn & AWVALID        |-> ! $isunknown(AWBURST);  endproperty  axi_errm_awburst_x: assert property (AXI_ERRM_AWBURST_X) else   $error("AXI_ERRM_AWBURST_X. When AWVALID is high, a value of X on AWBURST is not permitted. Spec: section 3.1.1 on page 3-3.");  // INDEX:        - AXI_ERRM_AWCACHE_X  // =====  property AXI_ERRM_AWCACHE_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn & AWVALID        |-> ! $isunknown(AWCACHE);  endproperty  axi_errm_awcache_x: assert property (AXI_ERRM_AWCACHE_X) else   $error("AXI_ERRM_AWCACHE_X. When AWVALID is high, a value of X on AWCACHE is not permitted. Spec: section 3.1.1 on page 3-3.");  // INDEX:        - AXI_ERRM_AWID_X  // =====  property AXI_ERRM_AWID_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn & AWVALID        |-> ! $isunknown(AWID);  endproperty  axi_errm_awid_x: assert property (AXI_ERRM_AWID_X) else   $error("AXI_ERRM_AWID_X. When AWVALID is high, a value of X on AWID is not permitted. Spec: section 3.1.1 on page 3-3.");  // INDEX:        - AXI_ERRM_AWLEN_X  // =====  property AXI_ERRM_AWLEN_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn & AWVALID        |-> ! $isunknown(AWLEN);  endproperty  axi_errm_awlen_x: assert property (AXI_ERRM_AWLEN_X) else   $error("AXI_ERRM_AWLEN_X. When AWVALID is high, a value of X on AWLEN is not permitted. Spec: section 3.1.1 on page 3-3.");  // INDEX:        - AXI_ERRM_AWLOCK_X  // =====  property AXI_ERRM_AWLOCK_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn & AWVALID        |-> ! $isunknown(AWLOCK);  endproperty  axi_errm_awlock_x: assert property (AXI_ERRM_AWLOCK_X) else   $error("AXI_ERRM_AWLOCK_X. When AWVALID is high, a value of X on AWLOCK is not permitted. Spec: section 3.1.1 on page 3-3.");  // INDEX:        - AXI_ERRM_AWPROT_X  // =====  property AXI_ERRM_AWPROT_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn & AWVALID        |-> ! $isunknown(AWPROT);  endproperty  axi_errm_awprot_x: assert property (AXI_ERRM_AWPROT_X) else   $error("AXI_ERRM_AWPROT_X. When AWVALID is high, a value of X on AWPROT is not permitted. Spec: section 3.1.1 on page 3-3.");  // INDEX:        - AXI_ERRM_AWSIZE_X  // =====  property AXI_ERRM_AWSIZE_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn & AWVALID        |-> ! $isunknown(AWSIZE);  endproperty  axi_errm_awsize_x: assert property (AXI_ERRM_AWSIZE_X) else   $error("AXI_ERRM_AWSIZE_X. When AWVALID is high, a value of X on AWSIZE is not permitted. Spec: section 3.1.1 on page 3-3.");  // INDEX:        - AXI_ERRM_AWVALID_X  // =====  property AXI_ERRM_AWVALID_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn        |-> ! $isunknown(AWVALID);  endproperty  axi_errm_awvalid_x: assert property (AXI_ERRM_AWVALID_X) else   $error("AXI_ERRM_AWVALID_X. When not in reset, a value of X on AWVALID is not permitted.");  // INDEX:        - AXI_ERRS_AWREADY_X  // =====  property AXI_ERRS_AWREADY_X;    @(posedge `AXI_SVA_CLK)        `AXI_SVA_RSTn        |-> ! $isunknown(AWREADY);  endproperty  axi_errs_awready_x: assert property (AXI_ERRS_AWREADY_X) else   $error("AXI_ERRS_AWREADY_X. When not in reset, a value of X on AWREADY is not permitted.");`endif // AXI_XCHECK_OFF//------------------------------------------------------------------------------// INDEX:// INDEX: AXI Rules: Write Data Channel (*_W*)//------------------------------------------------------------------------------//------------------------------------------------------------------------------// INDEX:   1) Functional Rules//------------------------------------------------------------------------------  // INDEX:        - AXI_ERRM_WDATA_NUM  // =====  // This will fire in one of the following situations:  // 1) Write data arrives and WLAST set and WDATA count is not equal to AWLEN  // 2) Write data arrives and WLAST not set and WDATA count is equal to AWLEN  // 3) ADDR arrives, WLAST already received and WDATA count not equal to AWLEN  property AXI_ERRM_WDATA_NUM;    @(posedge `AXI_SVA_CLK)      `AXI_SVA_RSTn & !($isunknown(WDataNumError))      |-> ~WDataNumError;  endproperty  axi_errm_wdata_num: assert property (AXI_ERRM_WDATA_NUM) else   $error("AXI_ERRM_WDATA_NUM. The number of write data items must match AWLEN for the corresponding address. Spec: table 4-1 on page 4-3.");  // INDEX:        - AXI_ERRM_WDATA_ORDER  // =====  property AXI_ERRM_WDATA_ORDER;    @(posedge `AXI_SVA_CLK)      `AXI_SVA_RSTn & !($isunknown(WDataOrderError))      |-> ~WDataOrderError;  endproperty  axi_errm_wdata_order: assert property (AXI_ERRM_WDATA_ORDER) else   $error("AXI_ERRM_WDATA_ORDER. The order in which addresses and the first write data item are produced must match. Spec: section 8.5 on page 8-6.");  // INDEX:        - AXI_ERRM_WDEPTH  // =====  property AXI_ERRM_WDEPTH;    @(posedge `AXI_SVA_CLK)          !($isunknown({WVALID,WREADY,WidDepth})) &          WVALID & WREADY      |-> (WidDepth <= WDEPTH);  endproperty  axi_errm_wdepth: assert property (AXI_ERRM_WDEPTH) else   $error("AXI_ERRM_WDEPTH. A master can interleave a maximum of WDEPTH write data bursts. Spec: section 8.5 on page 8-6.");  // INDEX:        - AXI_ERRM_WSTRB  // =====  property AXI_ERRM_WSTRB;    @(posedge `AXI_SVA_CLK)      `AXI_SVA_RSTn & !($isunknown(StrbError))      |-> ~StrbError;  endproperty  axi_errm_wstrb: assert property (AXI_ERRM_WSTRB) else   $error("AXI_ERRM_WSTRB. Write strobes must only be asserted for the correct byte lanes as determined from start address, transfer size and beat number. Spec: section 9.2 on page 9-3.");  // INDEX:        - AXI_ERRM_WVALID_RESET  // =====  property AXI_ERRM_WVALID_RESET;    @(posedge `AXI_SVA_CLK)          !(`AXI_SVA_RSTn) & !($isunknown(`AXI_SVA_RSTn))      ##1   `AXI_SVA_RSTn      |-> !WVALID;  endproperty  axi_errm_wvalid_reset: assert property (AXI_ERRM_WVALID_RESET) else   $error("AXI_ERRM_WVALID_RESET. WVALID must be low in the cycle when ARESETn first goes high. Spec: section 11.1.2 on page 11-2.");//------------------------------------------------------------------------------// INDEX:   2) Handshake Rules//------------------------------------------------------------------------------  // INDEX:        - AXI_ERRM_WDATA_STABLE  // =====  property AXI_ERRM_WDATA_STABLE;    @(posedge `AXI_SVA_CLK)          !($isunknown({WVALID,WREADY,WDATA})) &          `AXI_SVA_RSTn & WVALID & !WREADY      ##1 `AXI_SVA_RSTn      |-> $stable(WDATA);  endproperty  axi_errm_wdata_stable: assert property (AXI_ERRM_WDATA_STABLE) else   $error("AXI_ERRM_WDATA_STABLE. WDATA must remain stable when WVALID is asserted and WREADY low. Spec: section 3.1, and figure 3-1, on page 3-2.");  // INDEX:        - AXI_ERRM_WID_STABLE  // =====  property AXI_ERRM_WID_STABLE;    @(posedge `AXI_SVA_CLK)          !($isunknown({WVALID,WREADY,WID})) &          `AXI_SVA_RSTn & WVALID & !WREADY      ##1 `AXI_SVA_RSTn      |-> $stable(WID);  endproperty  axi_errm_wid_stable: assert property (AXI_ERRM_WID_STABLE) else   $error("AXI_ERRM_WID_STABLE. WID must remain stable when WVALID is asserted and WREADY low. Spec: section 3.1, and figure 3-1, on page 3-2.");  // INDEX:        - AXI_ERRM_WLAST_STABLE  // =====  property AXI_ERRM_WLAST_STABLE;    @(posedge `AXI_SVA_CLK)          !($isunknown({WVALID,WREADY,WLAST})) &          `AXI_SVA_RSTn & WVALID & !WREADY      ##1 `AXI_SVA_RSTn      |-> $stable(WLAST);  endproperty  axi_errm_wlast_stable: assert property (AXI_ERRM_WLAST_STABLE) else   $error("AXI_ERRM_WLAST_STABLE. WLAST must remain stable when WVALID is asserted and WREADY low. Spec: section 3.1, and figure 3-1, on page 3-2.");  // INDEX:        - AXI_ERRM_WSTRB_STABLE  // =====  property AXI_ERRM_WSTRB_STABLE;    @(posedge `AXI_SVA_CLK)          !($isunknown({WVALID,WREADY,WSTRB})) &          `AXI_SVA_RSTn & WVALID & !WREADY      ##1 `AXI_SVA_RSTn      |-> $stable(WSTRB);  endproperty  axi_errm_wstrb_stable: assert property (AXI_ERRM_WSTRB_STABLE) else   $error("AXI_ERRM_WSTRB_STABLE. WSTRB must remain stable when WVALID is asserted and WREADY low. Spec: section 3.1, and figure 3-1, on page 3-2.");  // INDEX:        - AXI_ERRM_WVALID_STABLE  // =====  property AXI_ERRM_WVALID_STABLE;    @(posedge `AXI_SVA_CLK)          `AXI_SVA_RSTn & WVALID & !WREADY & !($isunknown({WVALID,WREADY}))      ##1 `AXI_SVA_RSTn      |-> WVALID;  endproperty  axi_errm_wvalid_stable: assert property (AXI_ERRM_WVALID_STABLE) else   $error("AXI_ERRM_WVALID_STABLE. Once WVALID is asserted, it must remain asserted until WREADY is high. Spec: section 3.1.2 on page 3-4.");

⌨️ 快捷键说明

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