1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
|
# Legacy AXI Interface Libraries
This document describes legacy AXI interface libraries used by some
testbenches. They are included here due to their continued use.
## AXI4 Stream (sim\_axis\_lib.vh)
Defines ``axis_t``, an AXI Stream bus interface that implements several tasks to send and
receive data on the bus.
### Definition
interface axis_t #(parameter DWIDTH = 64)
(input clk);
logic [DWIDTH-1:0] tdata;
logic tvalid;
logic tlast;
logic tready;
modport master (output tdata, output tvalid, output tlast, input tready);
modport slave (input tdata, input tvalid, input tlast, output tready);
### Operations
#### push\_word
// Push a word onto the AXI-Stream bus and wait for it to transfer
// Args:
// - word: The data to push onto the bus
// - eop (optional): End of packet (asserts tlast)
#### push\_bubble
// Push a bubble cycle onto the AXI-Stream bus
#### pull\_word
// Wait for a sample to be transferred on the AXI Stream
// bus and return the data and last
// Args:
// - word: The data pulled from the bus
// - eop: End of packet (tlast)
#### wait\_for\_bubble
// Wait for a bubble cycle on the AXI Stream bus
#### wait\_for\_pkt
// Wait for a packet to finish on the bus
#### push\_rand\_pkt
// Push a packet with random data onto to the AXI Stream bus
// Args:
// - num_samps: Packet size.
#### push\_ramp\_pkt
// Push a packet with a ramp on to the AXI Stream bus
// Args:
// - num_samps: Packet size.
// - ramp_start: Start value for the ramp
// - ramp_inc: Increment per clock cycle
## Compressed VITA (sim\_chdr\_lib.vh)
Note: This section describes legacy CHDR in 3.x and earlier. As of UHD 4.0,
the CHDR protocol and format has changed.
Defines ``cvita_stream_t``, an AXI Stream bus interface that implements the CHDR protocol and
several tasks to send and receive data on the bus.
### CHDR
typedef enum logic [1:0] {
DATA=2'b00, FC=2'b01, CMD=2'b10, RESP=2'b11
} cvita_pkt_t;
typedef struct packed {
logic [31:0] sid;
logic [15:0] length;
logic [11:0] seqno;
logic eob;
logic has_time;
cvita_pkt_t pkt_type;
logic [63:0] timestamp;
} cvita_hdr_t;
#### Operations
- ``flatten_chdr_no_ts``: Flatten header struct to a 64-bit bus. No timestamp.
- ``unflatten_chdr_no_ts``: Decode a 64-bit header and populate the ``cvita_hdr_t`` struct. No timestamp.
- ``unflatten_chdr``: Decode a 64-bit header and populate the ``cvita_hdr_t`` struct. Timestamp supported.
### CVITA Stream Type
#### Definition
interface cvita_stream_t (input clk);
axis_t #(.DWIDTH(64)) axis (.clk(clk));
#### push\_hdr
// Push a CVITA header into the stream
// Args:
// - hdr: The header to push
#### push\_data
// Push a word onto the AXI-Stream bus and wait for it to transfer
// Args:
// - word: The data to push onto the bus
// - eop: End of packet (asserts tlast)
#### push\_bubble
// Push a bubble cycle on the AXI-Stream bus
#### pull\_word
// Wait for a sample to be transferred on the AXI Stream
// bus and return the data and last
// Args:
// - word: The data pulled from the bus
// - eop: End of packet (tlast)
#### wait\_for\_bubble
// Wait for a bubble cycle on the AXI Stream bus
#### wait\_for\_pkt
// Wait for a packet to finish on the bus
#### wait\_for\_pkt\_get\_info
// Wait for a packet to finish on the bus and extract the header and payload statistics.
typedef struct packed {
logic [31:0] count;
logic [63:0] sum;
logic [63:0] min;
logic [63:0] max;
logic [63:0] crc;
} cvita_stats_t;
#### push\_rand\_pkt
// Push a packet with random data onto to the AXI Stream bus
// Args:
// - num_samps: Packet size.
// - hdr: Header to attach to packet (length will be ignored)
// - timestamp: Optional timestamp
#### push\_ramp\_pkt
// Push a packet with a ramp on to the AXI Stream bus
// Args:
// - num_samps: Packet size.
// - ramp_start: Start value for the ramp
// - ramp_inc: Increment per clock cycle
// - hdr: Header to attach to packet (length will be ignored)
// - timestamp: Optional timestamp
## Memory Mapped AXI4 (sim\_axi4\_lib.vh)
Defines the following interfaces to group signals in the AXI4 bus.
WIP: No functions or tasks implemented yet.
#### Address
interface axi4_addr_t #(parameter AWIDTH=32, parameter IDWIDTH=4)
(input clk);
logic [IDWIDTH-1:0] id;
logic [AWIDTH-1:0] addr;
logic [7:0] len;
logic [2:0] size;
logic [1:0] burst;
logic lock;
logic [3:0] cache;
logic [2:0] prot;
logic [3:0] qos;
logic [3:0] region;
logic user;
logic valid;
logic ready;
modport master (output id,addr,len,size,burst,lock,cache,prot,qos,valid, input ready);
modport slave (input id,addr,len,size,burst,lock,cache,prot,qos,valid, output ready);
endinterface
#### Write Data
interface axi4_wdata_t #(parameter DWIDTH=64)
(input clk);
logic [DWIDTH-1:0] data;
logic [(DWIDTH/8)-1:0] strb;
logic last;
logic user;
logic valid;
logic ready;
modport master(output data,strb,last,valid, input ready);
modport slave(input data,strb,last,valid, output ready);
endinterface
#### Write Response
interface axi4_resp_t #(parameter IDWIDTH=4)
(input clk);
logic ready;
logic [IDWIDTH-1:0] id;
logic [1:0] resp;
logic user;
logic valid;
modport master(output ready, input id,resp,valid);
modport slave(input ready, output id,resp,valid);
endinterface
#### Read Data
interface axi4_rdata_t #(parameter DWIDTH=64, parameter IDWIDTH=4)
(input clk);
logic ready;
logic [IDWIDTH-1:0] id;
logic [DWIDTH-1:0] data;
logic [1:0] resp;
logic user;
logic last;
logic valid;
modport master(output ready, input id,data,resp,last,valid);
modport slave(input ready, output id,data,resp,last,valid);
endinterface
#### Meta: AXI4 Writer
interface axi4_wr_t #(parameter DWIDTH=64, parameter AWIDTH=32, parameter IDWIDTH=4)
(input clk);
axi4_addr_t #(.AWIDTH(AWIDTH), .IDWIDTH(IDWIDTH)) addr (.clk(clk));
axi4_wdata_t #(.DWIDTH(DWIDTH)) data (.clk(clk));
axi4_resp_t #(.IDWIDTH(IDWIDTH)) resp (.clk(clk));
modport master(output addr, output data, input resp);
modport slave(input addr, input data, output resp);
endinterface
#### Meta: AXI4 Reader
interface axi4_rd_t #(parameter DWIDTH=64, parameter AWIDTH=32, parameter IDWIDTH=4)
(input clk);
axi4_addr_t #(.AWIDTH(AWIDTH), .IDWIDTH(IDWIDTH)) addr (.clk(clk));
axi4_rdata_t #(.DWIDTH(DWIDTH), .IDWIDTH(IDWIDTH)) data (.clk(clk));
modport master(output addr, output data);
modport slave(input addr, input data);
endinterface
|