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

📄 axipc.v

📁 amba3 sva 完全验证的代码
💻 V
📖 第 1 页 / 共 5 页
字号:
   RUSER,   RVALID,   RREADY,   // Low power interface   CACTIVE,   CSYSREQ,   CSYSACK   );//------------------------------------------------------------------------------// INDEX:   1) Parameters//------------------------------------------------------------------------------  // INDEX:        - Configurable (user can set)  // =====  // Parameters below can be set by the user.  // Set DATA_WIDTH to the data-bus width required  parameter DATA_WIDTH = 64;         // data bus width, default = 64-bit  // Select the number of channel ID bits required  parameter ID_WIDTH = 4;          // (A|W|R|B)ID width  // Select the size of the USER buses, default = 32-bit  parameter AWUSER_WIDTH = 32; // width of the user AW sideband field  parameter WUSER_WIDTH  = 32; // width of the user W  sideband field  parameter BUSER_WIDTH  = 32; // width of the user B  sideband field  parameter ARUSER_WIDTH = 32; // width of the user AR sideband field  parameter RUSER_WIDTH  = 32; // width of the user R  sideband field  // Write-interleave Depth of monitored slave interface  parameter WDEPTH = 1;  // Size of CAMs for storing outstanding read bursts, this should match or  // exceed the number of outstanding read addresses accepted into the slave  // interface  parameter MAXRBURSTS = 16;  // Size of CAMs for storing outstanding write bursts, this should match or  // exceed the number of outstanding write bursts into the slave  interface  parameter MAXWBURSTS = 16;  // Maximum number of cycles between VALID -> READY high before a warning is  // generated  parameter MAXWAITS = 16;  // OVL instances property_type parameter (0=assert, 1=assume, 2=ignore)  parameter AXI_ERRM_PropertyType = 0; // default: assert Master is AXI compliant  parameter AXI_RECM_PropertyType = 0; // default: assert Master is AXI compliant  parameter AXI_AUXM_PropertyType = 0; // default: assert Master auxiliary logic checks  //  parameter AXI_ERRS_PropertyType = 0; // default: assert Slave is AXI compliant  parameter AXI_RECS_PropertyType = 0; // default: assert Slave is AXI compliant  parameter AXI_AUXS_PropertyType = 0; // default: assert Slave auxiliary logic checks  //  parameter AXI_ERRL_PropertyType = 0; // default: assert LP Int is AXI compliant  // Recommended Rules Enable  parameter RecommendOn   = 1'b1;   // enable/disable reporting of all  AXI_REC*_* rules  parameter RecMaxWaitOn  = 1'b1;   // enable/disable reporting of just AXI_REC*_MAX_WAIT rules  // INDEX:        - Calculated (user should not override)  // =====  // Do not override the following parameters: they must be calculated exactly  // as shown below  parameter DATA_MAX   = DATA_WIDTH-1; // data max index  parameter STRB_WIDTH = DATA_WIDTH/8; // WSTRB width  parameter STRB_MAX   = STRB_WIDTH-1; // WSTRB max index  parameter STRB_1     = {{STRB_MAX{1'b0}}, 1'b1};  // value 1 in strobe width  parameter ID_MAX     = ID_WIDTH-1;   // ID max index  parameter ID_HI      = (1 << ID_WIDTH) - 1; // ID max value  parameter AWUSER_MAX = AWUSER_WIDTH-1; // AWUSER max index  parameter  WUSER_MAX =  WUSER_WIDTH-1; // WUSER  max index  parameter  BUSER_MAX =  BUSER_WIDTH-1; // BUSER  max index  parameter ARUSER_MAX = ARUSER_WIDTH-1; // ARUSER max index  parameter  RUSER_MAX =  RUSER_WIDTH-1; // RUSER  max index  // WSTRB16...WSTRB1 ID BURST[1:0] ASIZE[2:0] ALEN[3:0] LAST ADDR[3:0]  parameter ADDRLO   = 0;                 // ADDRLO   =   0  parameter ADDRHI   = 6;                 // ADDRHI   =   6  parameter EXCL     = ADDRHI + 1;        // EXCL     =   7 if ADDRHI=6 (ADDRHI+1)  parameter ALENLO   = EXCL + 1;          // ALENLO   =   8 if ADDRHI=6 (ADDRHI+2)  parameter ALENHI   = ALENLO + 3;        // ALENHI   =  11 if ADDRHI=6 (ADDRHI+5)  parameter ASIZELO  = ALENHI + 1;        // ASIZELO  =  12 if ADDRHI=6 (ADDRHI+6)  parameter ASIZEHI  = ASIZELO + 2;       // ASIZEHI  =  14 if ADDRHI=6 (ADDRHI+8)  parameter BURSTLO  = ASIZEHI + 1;       // BURSTLO  =  15 if ADDRHI=6 (ADDRHI+9)  parameter BURSTHI  = BURSTLO + 1;       // BURSTHI  =  16 if ADDRHI=6 (ADDRHI+10)  parameter IDLO     = BURSTHI + 1;       // IDLO     =  17 if ADDRHI=6 (ADDRHI+11)  parameter IDHI     = IDLO+ID_MAX;       // IDHI     =  20 if ADDRHI=6 & ID_WIDTH=4  parameter STRB1LO  = IDHI+1;            // STRB1LO  =  21 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB1HI  = STRB1LO+STRB_MAX;  // STRB1HI  =  28 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB2LO  = STRB1HI+1;         // STRB2LO  =  29 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB2HI  = STRB2LO+STRB_MAX;  // STRB2HI  =  36 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB3LO  = STRB2HI+1;         // STRB3LO  =  37 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB3HI  = STRB3LO+STRB_MAX;  // STRB3HI  =  44 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB4LO  = STRB3HI+1;         // STRB4LO  =  45 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB4HI  = STRB4LO+STRB_MAX;  // STRB4HI  =  52 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB5LO  = STRB4HI+1;         // STRB5LO  =  53 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB5HI  = STRB5LO+STRB_MAX;  // STRB5HI  =  60 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB6LO  = STRB5HI+1;         // STRB6LO  =  61 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB6HI  = STRB6LO+STRB_MAX;  // STRB6HI  =  68 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB7LO  = STRB6HI+1;         // STRB7LO  =  69 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB7HI  = STRB7LO+STRB_MAX;  // STRB7HI  =  76 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB8LO  = STRB7HI+1;         // STRB8LO  =  77 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB8HI  = STRB8LO+STRB_MAX;  // STRB8HI  =  84 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB9LO  = STRB8HI+1;         // STRB9LO  =  85 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB9HI  = STRB9LO+STRB_MAX;  // STRB9HI  =  92 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB10LO = STRB9HI+1;         // STRB10LO =  93 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB10HI = STRB10LO+STRB_MAX; // STRB10HI = 100 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB11LO = STRB10HI+1;        // STRB11LO = 101 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB11HI = STRB11LO+STRB_MAX; // STRB11HI = 108 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB12LO = STRB11HI+1;        // STRB12LO = 109 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB12HI = STRB12LO+STRB_MAX; // STRB12HI = 116 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB13LO = STRB12HI+1;        // STRB13LO = 117 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB13HI = STRB13LO+STRB_MAX; // STRB13HI = 124 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB14LO = STRB13HI+1;        // STRB14LO = 125 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB14HI = STRB14LO+STRB_MAX; // STRB14HI = 132 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB15LO = STRB14HI+1;        // STRB15LO = 133 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB15HI = STRB15LO+STRB_MAX; // STRB15HI = 140 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB16LO = STRB15HI+1;        // STRB16LO = 141 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7  parameter STRB16HI = STRB16LO+STRB_MAX; // STRB16HI = 148 if ADDRHI=6 & ID_WIDTH=4 & STRB_MAX=7//------------------------------------------------------------------------------// INDEX:   2) Inputs (no outputs)//------------------------------------------------------------------------------  // INDEX:        - Global Signals  // =====  input                ACLK;        // AXI Clock  input                ARESETn;     // AXI Reset  // INDEX:        - Write Address Channel  // =====  input     [ID_MAX:0] AWID;  input         [31:0] AWADDR;  input          [3:0] AWLEN;  input          [2:0] AWSIZE;  input          [1:0] AWBURST;  input          [3:0] AWCACHE;  input          [2:0] AWPROT;  input          [1:0] AWLOCK;  input [AWUSER_MAX:0] AWUSER;  input                AWVALID;  input                AWREADY;  // INDEX:        - Write Data Channel  // =====  input     [ID_MAX:0] WID;  input   [DATA_MAX:0] WDATA;  input   [STRB_MAX:0] WSTRB;  input  [WUSER_MAX:0] WUSER;  input                WLAST;  input                WVALID;  input                WREADY;  // INDEX:        - Write Response Channel  // =====  input     [ID_MAX:0] BID;  input          [1:0] BRESP;  input  [BUSER_MAX:0] BUSER;  input                BVALID;  input                BREADY;  // INDEX:        - Read Address Channel  // =====  input     [ID_MAX:0] ARID;  input         [31:0] ARADDR;  input          [3:0] ARLEN;  input          [2:0] ARSIZE;  input          [1:0] ARBURST;  input          [3:0] ARCACHE;  input          [2:0] ARPROT;  input          [1:0] ARLOCK;  input [ARUSER_MAX:0] ARUSER;  input                ARVALID;  input                ARREADY;  // INDEX:        - Read Data Channel  // =====  input     [ID_MAX:0] RID;  input   [DATA_MAX:0] RDATA;  input          [1:0] RRESP;  input  [RUSER_MAX:0] RUSER;  input                RLAST;  input                RVALID;  input                RREADY;  // INDEX:        - Low Power Interface  // =====  input                CACTIVE;  input                CSYSREQ;  input                CSYSACK;//------------------------------------------------------------------------------// INDEX:   3) Wire and Reg Declarations//------------------------------------------------------------------------------  // User signal definitions are defined as weak pull-down in the case  // that they are unconnected.  tri0 [AWUSER_MAX:0] AWUSER;  tri0  [WUSER_MAX:0] WUSER;  tri0  [BUSER_MAX:0] BUSER;  tri0 [ARUSER_MAX:0] ARUSER;  tri0  [RUSER_MAX:0] RUSER;  // Low power interface signals are defined as weak pull-up in the case  // that they are unconnected.  tri1                CACTIVE;  tri1                CSYSREQ;  tri1                CSYSACK;  // Write CAMs  integer            WIndex;  reg [STRB16HI:0]   WBurstCam[1:MAXWBURSTS]; // store outstanding write bursts  reg [4:0]          WCountCam[1:MAXWBURSTS]; // number of write data stored  reg                WLastCam[1:MAXWBURSTS];  // WLAST for outstanding writes  reg                WAddrCam[1:MAXWBURSTS];  // flag for valid write addr  reg                BRespCam[1:MAXWBURSTS];  // flag for valid write resp  wire               nWOutstanding;       // flag for no write bursts oustanding                                          // except for current valid write id  // WDepth array  reg [ID_HI:0]      WidInUse;     // WIDs in use for write depth check  reg [ID_HI:0]      WidInUseNext; // Next value of WidInUse  integer            WidDepth;  // Read CAMs  reg [3:0]          RLenCam[1:MAXRBURSTS];  reg [ID_MAX:0]     RIdCam[1:MAXRBURSTS];  reg                RExclCam[1:MAXRBURSTS];  integer            RIndex;  integer            RIndexNext;  wire               RPop;  wire               RPush;  wire               nROutstanding; // flag for no read bursts oustanding  reg                RIdCamDelta;   // flag indicates that RidCam has changed  // Protocol error flags  reg                WDataNumError;   // flag for AXI_ERRM_WDATA_NUM rule  reg                WDataOrderError; // flag for AXI_ERRM_WDATA_ORDER rule  reg                BrespError;      // flag for AXI_ERRS_BRESP rule  reg                BrespExokError;  // flag for AXI_ERRS_BRESP_EXOKAY rule  reg                StrbError;       // flag for AXI_ERRM_WSTRB rule  // signals for checking for match in ID CAMs  integer            AidMatch;  integer            WidMatch;  integer            RidMatch;  integer            BidMatch;  reg          [6:0] AlignMaskR; // mask for checking read address alignment  reg          [6:0] AlignMaskW; // mask for checking write address alignment  // signals for Address Checking  reg         [31:0] ArAddrIncr;  reg         [31:0] AwAddrIncr;  // signals for Data Checking  reg   [DATA_MAX:0] WdataMask;  reg         [10:0] ArSizeInBits;  reg         [10:0] AwSizeInBits;  reg         [11:0] ArLenInBytes;  wire         [3:0] ArLenPending;  wire               ArExclPending;  // Lock signals  wire               AWLockNew; // New locked write address valid  wire               ARLockNew; // New locked read address valid  reg          [1:0] LockState;  reg          [1:0] LockStateNext;  reg     [ID_MAX:0] LockIdNext;  reg     [ID_MAX:0] LockId;  reg          [3:0] LockCacheNext;  reg          [3:0] LockCache;  reg          [2:0] LockProtNext;  reg          [2:0] LockProt;  reg         [31:0] LockAddrNext;  reg         [31:0] LockAddr;  // arrays to store exclusive access control info  reg                ExclReadAddr[ID_HI:0]; // tracks excl read addr  reg                ExclReadData[ID_HI:0]; // tracks excl read data  reg         [31:0] ExclAddr[ID_HI:0];  reg          [2:0] ExclSize[ID_HI:0];  reg          [3:0] ExclLen[ID_HI:0];  reg          [1:0] ExclBurst[ID_HI:0];  reg          [3:0] ExclCache[ID_HI:0];  reg          [2:0] ExclProt[ID_HI:0];  reg [AWUSER_MAX:0] ExclUser[ID_HI:0];  reg         [10:0] ExclMask; // mask to check alignment of exclusive address//------------------------------------------------------------------------------// INDEX:   4) Verilog Defines//------------------------------------------------------------------------------  // INDEX:        - Lock FSM States  // =====  // Lock FSM States (3-state FSM, so one state encoding is not used)  `define AXI_AUX_ST_UNLOCKED  2'b00  `define AXI_AUX_ST_LOCKED    2'b01  `define AXI_AUX_ST_LOCK_LAST 2'b10  `define AXI_AUX_ST_NOT_USED  2'b11  // INDEX:        - Clock and Reset  // =====  // Can be overridden by user for a clock enable.  //  // Can also be used to clock OVL on negedge (to avoid race hazards with  // auxiliary logic) by compiling with the override:  //  //   +define+AXI_OVL_CLK=~ACLK  //   // OVL: Assertion Instances  `ifdef AXI_OVL_CLK  `else     `define AXI_OVL_CLK ACLK  `endif  //  `ifdef AXI_OVL_RSTn  `else

⌨️ 快捷键说明

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