38 parameter ADDRESS_BITS =
10 // number of memory address bits - now fixed. Low half - RO/RW/RWC,RW1 (2-cycle write), 2-nd just RW (single-cycle) 40 input hba_rst,
// @posedge mclk - sync reset 41 input mclk,
// for command/status 44 output reg fis_first_vld,
// fis_first contains valid FIS header, reset by get_* 55 input get_ignore,
// ignore whatever FIS (use for DMA activate too?) 57 output reg get_fis_done,
// done processing FIS (see fis_ok, fis_err, fis_ferr) 58 output reg fis_ok,
// FIS done, checksum OK reset by starting a new get FIS 59 output reg fis_err,
// FIS done, checksum ERROR reset by starting a new get FIS 60 output fis_ferr,
// FIS done, fatal error - FIS too long 61 input dma_prds_done,
// dma is done - check if FIS is done (some data may get stuck in dma FIFO - reported separately) 62 output fis_extra,
// all wanted data got, FIS may have extra data (non-fatal). Does not deny fis_ok 66 // next commands use register address/data/we for 1 clock cycle - after next to command (commnd - t0, we - t2) 67 input update_sig,
// update signature - now after get_rfis, after FIS is already received 68 input update_err_sts,
// update PxTFD.STS and PxTFD.ERR from the last received regs d2h 69 input update_pio,
// update PxTFD.STS and PxTFD.ERR from pio_* (entry PIO:Update) 71 input clear_prdbc,
// save resources - clear prdbc for every command - discard what is written there 74 input set_bsy,
// set PxTFD.STS.BSY, update 76 input set_sts_80,
// set PxTFD.STS = 0x80 (may be combined with set_sts_7f), update 79 input decr_dwcr,
// decrement DMA Xfer counter after read (in this module) // need pulse to 'update_prdbc' to write to registers 80 input decr_dwcw,
// decrement DMA Xfer counter after write (from decr_DXC_dw)// need pulse to 'update_prdbc' to write to registers 83 input pcmd_fre,
// control bit enables saving FIS to memory (will be ignored for signature) 85 // TODO: Add writing PRDBC here? Yes, the following. B ut data may be discarded as only 0 is supposed to be written 86 // input [ADDRESS_BITS-1:0] soft_write_addr, // register address written by software 87 // input [31:0] soft_write_data, // register data written (after applying wstb and type (RO, RW, RWC, RW1) 88 // input soft_write_en, // write enable for data write 92 output [
7:
0]
tfd_sts,
// Current PxTFD status field (updated after regFIS and SDB - certain fields) 93 // tfd_sts[7] - BSY, tfd_sts[3] - DRQ, tfd_sts[0] - ERR 94 output [
7:
0]
tfd_err,
// Current PxTFD error field (updated after regFIS and SDB) 95 output reg fis_i,
// value of "I" field in received regsD2H or SDB FIS or DMA Setup FIS 96 output reg sdb_n,
// value of "N" field in received SDB FIS 97 output reg dma_a,
// value of "A" field in received DMA Setup FIS 98 output reg dma_d,
// value of "D" field in received DMA Setup FIS 99 output reg pio_i,
// value of "I" field in received PIO Setup FIS 100 output reg pio_d,
// value of "D" field in received PIO Setup FIS 101 output [
7:
0]
pio_es,
// value of PIO E_Status 102 output reg sactive0,
// bit 0 of sActive DWORD received in SDB FIS 103 // Using even word count (will be rounded up), partial DWORD (last) will be handled by PRD length if needed 104 output [
31:
2]
xfer_cntr,
// transfer counter in words for both DMA (31 bit) and PIO (lower 15 bits), updated after decr_dwc 106 output [
11:
0]
data_in_dwords,
// number of data dwords received (valid with 'done') 107 // FSM will send this pulse 108 // output reg data_in_words_apply, // apply data_in_words 110 // Registers interface 111 // 2. HBA R/W registers, may be added external register layer 122 // Forwarding data to the DMA engine 132 //localparam FA_BITS = 6; // number of bits in received FIS address 133 //localparam CLB_OFFS32 = 'h200; // # In the second half of the register space (0x800..0xbff - 1KB) 135 HBA_OFFS = 0x0 # All offsets are in bytes 136 CLB_OFFS = 0x800 # In the second half of the register space (0x800..0xbff - 1KB) 137 FB_OFFS = 0xc00 # Needs 0x100 bytes 138 #HBA_PORT0 = 0x100 Not needed, always HBA_OFFS + 0x100 142 localparam PCI_Header__ID__DID__ADDR =
'h60;
143 localparam PCI_Header__ID__DID__MASK =
'hffff0000;
144 localparam PCI_Header__ID__DID__DFLT =
'h10000;
146 localparam PCI_Header__ID__VID__ADDR =
'h60;
147 localparam PCI_Header__ID__VID__MASK =
'hffff;
148 localparam PCI_Header__ID__VID__DFLT =
'hfffe;
149 // RW: HBA Interrupt Disable 150 localparam PCI_Header__CMD__ID__ADDR =
'h61;
151 localparam PCI_Header__CMD__ID__MASK =
'h400;
152 localparam PCI_Header__CMD__ID__DFLT =
'h0;
153 // RO: Fast Back-to-Back Enable 154 localparam PCI_Header__CMD__FBE__ADDR =
'h61;
155 localparam PCI_Header__CMD__FBE__MASK =
'h200;
156 localparam PCI_Header__CMD__FBE__DFLT =
'h0;
158 localparam PCI_Header__CMD__SEE__ADDR =
'h61;
159 localparam PCI_Header__CMD__SEE__MASK =
'h100;
160 localparam PCI_Header__CMD__SEE__DFLT =
'h0;
162 localparam PCI_Header__CMD__WCC__ADDR =
'h61;
163 localparam PCI_Header__CMD__WCC__MASK =
'h80;
164 localparam PCI_Header__CMD__WCC__DFLT =
'h0;
165 // RO: Parity Error Response Enable 166 localparam PCI_Header__CMD__PEE__ADDR =
'h61;
167 localparam PCI_Header__CMD__PEE__MASK =
'h40;
168 localparam PCI_Header__CMD__PEE__DFLT =
'h0;
170 localparam PCI_Header__CMD__VGA__ADDR =
'h61;
171 localparam PCI_Header__CMD__VGA__MASK =
'h20;
172 localparam PCI_Header__CMD__VGA__DFLT =
'h0;
174 localparam PCI_Header__CMD__MWIE__ADDR =
'h61;
175 localparam PCI_Header__CMD__MWIE__MASK =
'h10;
176 localparam PCI_Header__CMD__MWIE__DFLT =
'h0;
178 localparam PCI_Header__CMD__SCE__ADDR =
'h61;
179 localparam PCI_Header__CMD__SCE__MASK =
'h8;
180 localparam PCI_Header__CMD__SCE__DFLT =
'h0;
181 // RW: Bus Master Enable (0 - stops any DMA) 182 localparam PCI_Header__CMD__BME__ADDR =
'h61;
183 localparam PCI_Header__CMD__BME__MASK =
'h4;
184 localparam PCI_Header__CMD__BME__DFLT =
'h0;
185 // RW: Memory Space enable (here - always?) 186 localparam PCI_Header__CMD__MSE__ADDR =
'h61;
187 localparam PCI_Header__CMD__MSE__MASK =
'h2;
188 localparam PCI_Header__CMD__MSE__DFLT =
'h0;
189 // RO: Enable IO space access (only for legacy IDE) 190 localparam PCI_Header__CMD__IOSE__ADDR =
'h61;
191 localparam PCI_Header__CMD__IOSE__MASK =
'h1;
192 localparam PCI_Header__CMD__IOSE__DFLT =
'h0;
193 // RWC: Detected Parity Error 194 localparam PCI_Header__STS__DPE__ADDR =
'h61;
195 localparam PCI_Header__STS__DPE__MASK =
'h80000000;
196 localparam PCI_Header__STS__DPE__DFLT =
'h0;
197 // RWC: Signaled System Error (HBA SERR) 198 localparam PCI_Header__STS__SSE__ADDR =
'h61;
199 localparam PCI_Header__STS__SSE__MASK =
'h40000000;
200 localparam PCI_Header__STS__SSE__DFLT =
'h0;
201 // RWC: Received Master Abort 202 localparam PCI_Header__STS__RMA__ADDR =
'h61;
203 localparam PCI_Header__STS__RMA__MASK =
'h20000000;
204 localparam PCI_Header__STS__RMA__DFLT =
'h0;
205 // RWC: Received Target Abort 206 localparam PCI_Header__STS__RTA__ADDR =
'h61;
207 localparam PCI_Header__STS__RTA__MASK =
'h10000000;
208 localparam PCI_Header__STS__RTA__DFLT =
'h0;
209 // RWC: Signaled Target Abort 210 localparam PCI_Header__STS__STA__ADDR =
'h61;
211 localparam PCI_Header__STS__STA__MASK =
'h8000000;
212 localparam PCI_Header__STS__STA__DFLT =
'h0;
213 // RO: PCI DEVSEL Timing 214 localparam PCI_Header__STS__DEVT__ADDR =
'h61;
215 localparam PCI_Header__STS__DEVT__MASK =
'h6000000;
216 localparam PCI_Header__STS__DEVT__DFLT =
'h0;
217 // RWC: Master Data Parity Error Detected 218 localparam PCI_Header__STS__DPD__ADDR =
'h61;
219 localparam PCI_Header__STS__DPD__MASK =
'h1000000;
220 localparam PCI_Header__STS__DPD__DFLT =
'h0;
221 // RO: Fast Back-To-Back Capable 222 localparam PCI_Header__STS__FBC__ADDR =
'h61;
223 localparam PCI_Header__STS__FBC__MASK =
'h800000;
224 localparam PCI_Header__STS__FBC__DFLT =
'h0;
225 // RO: 66 MHz Capable 226 localparam PCI_Header__STS__C66__ADDR =
'h61;
227 localparam PCI_Header__STS__C66__MASK =
'h200000;
228 localparam PCI_Header__STS__C66__DFLT =
'h0;
229 // RO: Capabilities List (PCI power management mandatory) 230 localparam PCI_Header__STS__CL__ADDR =
'h61;
231 localparam PCI_Header__STS__CL__MASK =
'h100000;
232 localparam PCI_Header__STS__CL__DFLT =
'h100000;
233 // RO: Interrupt Status (1 - asserted) 234 localparam PCI_Header__STS__IS__ADDR =
'h61;
235 localparam PCI_Header__STS__IS__MASK =
'h80000;
236 localparam PCI_Header__STS__IS__DFLT =
'h0;
237 // RO: HBA Revision ID 238 localparam PCI_Header__RID__RID__ADDR =
'h62;
239 localparam PCI_Header__RID__RID__MASK =
'hff;
240 localparam PCI_Header__RID__RID__DFLT =
'h2;
241 // RO: Base Class Code: 1 - Mass Storage Device 242 localparam PCI_Header__CC__BCC__ADDR =
'h62;
243 localparam PCI_Header__CC__BCC__MASK =
'hff000000;
244 localparam PCI_Header__CC__BCC__DFLT =
'h1000000;
245 // RO: Sub Class Code: 0x06 - SATA Device 246 localparam PCI_Header__CC__SCC__ADDR =
'h62;
247 localparam PCI_Header__CC__SCC__MASK =
'hff0000;
248 localparam PCI_Header__CC__SCC__DFLT =
'h60000;
249 // RO: Programming Interface: 1 - AHCI HBA major rev 1 250 localparam PCI_Header__CC__PI__ADDR =
'h62;
251 localparam PCI_Header__CC__PI__MASK =
'hff0000;
252 localparam PCI_Header__CC__PI__DFLT =
'h10000;
253 // RW: Cache Line Size 254 localparam PCI_Header__CLS__CLS__ADDR =
'h63;
255 localparam PCI_Header__CLS__CLS__MASK =
'hff;
256 localparam PCI_Header__CLS__CLS__DFLT =
'h0;
257 // RW: Master Latency Timer 258 localparam PCI_Header__MLT__MLT__ADDR =
'h63;
259 localparam PCI_Header__MLT__MLT__MASK =
'hff00;
260 localparam PCI_Header__MLT__MLT__DFLT =
'h0;
261 // RO: Multi-Function Device 262 localparam PCI_Header__HTYPE__MFDT__ADDR =
'h63;
263 localparam PCI_Header__HTYPE__MFDT__MASK =
'h8000;
264 localparam PCI_Header__HTYPE__MFDT__DFLT =
'h0;
265 // RO: Header Layout 0 - HBA uses a target device layout 266 localparam PCI_Header__HTYPE__HL__ADDR =
'h63;
267 localparam PCI_Header__HTYPE__HL__MASK =
'h7f00;
268 localparam PCI_Header__HTYPE__HL__DFLT =
'h0;
269 // RO: AHCI Base Address high bits, normally RW, but here RO to get to MAXIGP1 space 270 localparam PCI_Header__ABAR__BA__ADDR =
'h69;
271 localparam PCI_Header__ABAR__BA__MASK =
'hfffffff0;
272 localparam PCI_Header__ABAR__BA__DFLT =
'h80000000;
273 // RO: Prefetchable (this is not) 274 localparam PCI_Header__ABAR__PF__ADDR =
'h69;
275 localparam PCI_Header__ABAR__PF__MASK =
'h8;
276 localparam PCI_Header__ABAR__PF__DFLT =
'h0;
277 // RO: Type (0 - any 32-bit address, here it is hard-mapped 278 localparam PCI_Header__ABAR__TP__ADDR =
'h69;
279 localparam PCI_Header__ABAR__TP__MASK =
'h6;
280 localparam PCI_Header__ABAR__TP__DFLT =
'h0;
281 // RO: Resource Type Indicator: 0 - memory address 282 localparam PCI_Header__ABAR__RTE__ADDR =
'h69;
283 localparam PCI_Header__ABAR__RTE__MASK =
'h1;
284 localparam PCI_Header__ABAR__RTE__DFLT =
'h0;
286 localparam PCI_Header__SS__SSID__ADDR =
'h6b;
287 localparam PCI_Header__SS__SSID__MASK =
'hffff0000;
288 localparam PCI_Header__SS__SSID__DFLT =
'h10000;
289 // RO: SubSystem Vendor ID 290 localparam PCI_Header__SS__SSVID__ADDR =
'h6b;
291 localparam PCI_Header__SS__SSVID__MASK =
'hffff;
292 localparam PCI_Header__SS__SSVID__DFLT =
'hfffe;
293 // RO: ROM Base Address 294 localparam PCI_Header__EROM__RBA__ADDR =
'h6c;
295 localparam PCI_Header__EROM__RBA__MASK =
'hffffffff;
296 localparam PCI_Header__EROM__RBA__DFLT =
'h0;
297 // RO: Capabilities pointer 298 localparam PCI_Header__CAP__CAP__ADDR =
'h6d;
299 localparam PCI_Header__CAP__CAP__MASK =
'hff;
300 localparam PCI_Header__CAP__CAP__DFLT =
'h40;
302 localparam PCI_Header__INTR__IPIN__ADDR =
'h6f;
303 localparam PCI_Header__INTR__IPIN__MASK =
'hff00;
304 localparam PCI_Header__INTR__IPIN__DFLT =
'h100;
305 // RW: Interrupt Line 306 localparam PCI_Header__INTR__ILINE__ADDR =
'h6f;
307 localparam PCI_Header__INTR__ILINE__MASK =
'hff;
308 localparam PCI_Header__INTR__ILINE__DFLT =
'h0;
310 localparam PCI_Header__MGNT__MGNT__ADDR =
'h6f;
311 localparam PCI_Header__MGNT__MGNT__MASK =
'hff0000;
312 localparam PCI_Header__MGNT__MGNT__DFLT =
'h0;
313 // RO: Maximal Latency 314 localparam PCI_Header__MLAT__MLAT__ADDR =
'h6f;
315 localparam PCI_Header__MLAT__MLAT__MASK =
'hff000000;
316 localparam PCI_Header__MLAT__MLAT__DFLT =
'h0;
317 // RO: Next Capability pointer 318 localparam PMCAP__PID__NEXT__ADDR =
'h70;
319 localparam PMCAP__PID__NEXT__MASK =
'hff00;
320 localparam PMCAP__PID__NEXT__DFLT =
'h0;
321 // RO: This is PCI Power Management Capability 322 localparam PMCAP__PID__CID__ADDR =
'h70;
323 localparam PMCAP__PID__CID__MASK =
'hff;
324 localparam PMCAP__PID__CID__DFLT =
'h1;
325 // RO: PME_SUPPORT bits:'b01000 326 localparam PMCAP__PC__PSUP__ADDR =
'h70;
327 localparam PMCAP__PC__PSUP__MASK =
'hf8000000;
328 localparam PMCAP__PC__PSUP__DFLT =
'h40000000;
329 // RO: D2 Support - no 330 localparam PMCAP__PC__D2S__ADDR =
'h70;
331 localparam PMCAP__PC__D2S__MASK =
'h4000000;
332 localparam PMCAP__PC__D2S__DFLT =
'h0;
333 // RO: D1 Support - no 334 localparam PMCAP__PC__D1S__ADDR =
'h70;
335 localparam PMCAP__PC__D1S__MASK =
'h2000000;
336 localparam PMCAP__PC__D1S__DFLT =
'h0;
337 // RO: Maximal D3cold current 338 localparam PMCAP__PC__AUXC__ADDR =
'h70;
339 localparam PMCAP__PC__AUXC__MASK =
'h1c00000;
340 localparam PMCAP__PC__AUXC__DFLT =
'h0;
341 // RO: Device-specific initialization required 342 localparam PMCAP__PC__DSI__ADDR =
'h70;
343 localparam PMCAP__PC__DSI__MASK =
'h200000;
344 localparam PMCAP__PC__DSI__DFLT =
'h0;
345 // RO: PCI clock required to generate PME 346 localparam PMCAP__PC__PMEC__ADDR =
'h70;
347 localparam PMCAP__PC__PMEC__MASK =
'h80000;
348 localparam PMCAP__PC__PMEC__DFLT =
'h0;
349 // RO: Revision of Power Management Specification support version 350 localparam PMCAP__PC__VS__ADDR =
'h70;
351 localparam PMCAP__PC__VS__MASK =
'h70000;
352 localparam PMCAP__PC__VS__DFLT =
'h0;
353 // RWC: PME Status, set by hardware when HBA generates PME 354 localparam PMCAP__PMCS__PMES__ADDR =
'h71;
355 localparam PMCAP__PMCS__PMES__MASK =
'h8000;
356 localparam PMCAP__PMCS__PMES__DFLT =
'h0;
358 localparam PMCAP__PMCS__PMEE__ADDR =
'h71;
359 localparam PMCAP__PMCS__PMEE__MASK =
'h100;
360 localparam PMCAP__PMCS__PMEE__DFLT =
'h0;
362 localparam PMCAP__PMCS__PS__ADDR =
'h71;
363 localparam PMCAP__PMCS__PS__MASK =
'h3;
364 localparam PMCAP__PMCS__PS__DFLT =
'h0;
365 // RO: Supports 64-bit Addressing - no 366 localparam GHC__CAP__S64A__ADDR =
'h0;
367 localparam GHC__CAP__S64A__MASK =
'h80000000;
368 localparam GHC__CAP__S64A__DFLT =
'h0;
369 // RO: Supports Native Command Queuing - no 370 localparam GHC__CAP__SNCQ__ADDR =
'h0;
371 localparam GHC__CAP__SNCQ__MASK =
'h40000000;
372 localparam GHC__CAP__SNCQ__DFLT =
'h0;
373 // RO: Supports SNotification Register - no 374 localparam GHC__CAP__SSNTF__ADDR =
'h0;
375 localparam GHC__CAP__SSNTF__MASK =
'h20000000;
376 localparam GHC__CAP__SSNTF__DFLT =
'h0;
377 // RO: Supports Mechanical Presence Switch - no 378 localparam GHC__CAP__SMPS__ADDR =
'h0;
379 localparam GHC__CAP__SMPS__MASK =
'h10000000;
380 localparam GHC__CAP__SMPS__DFLT =
'h0;
381 // RO: Supports Staggered Spin-up - no 382 localparam GHC__CAP__SSS__ADDR =
'h0;
383 localparam GHC__CAP__SSS__MASK =
'h8000000;
384 localparam GHC__CAP__SSS__DFLT =
'h0;
385 // RO: Supports Aggressive Link Power Management - no 386 localparam GHC__CAP__SALP__ADDR =
'h0;
387 localparam GHC__CAP__SALP__MASK =
'h4000000;
388 localparam GHC__CAP__SALP__DFLT =
'h0;
389 // RO: Supports Activity LED - no 390 localparam GHC__CAP__SAL__ADDR =
'h0;
391 localparam GHC__CAP__SAL__MASK =
'h2000000;
392 localparam GHC__CAP__SAL__DFLT =
'h0;
393 // RO: Supports Command List Override - no (not capable of clearing BSY and DRQ bits, needs soft reset 394 localparam GHC__CAP__SCLO__ADDR =
'h0;
395 localparam GHC__CAP__SCLO__MASK =
'h1000000;
396 localparam GHC__CAP__SCLO__DFLT =
'h0;
397 // RO: Interface Maximal speed: 2 - Gen2, 3 - Gen3 398 localparam GHC__CAP__ISS__ADDR =
'h0;
399 localparam GHC__CAP__ISS__MASK =
'hf00000;
400 localparam GHC__CAP__ISS__DFLT =
'h200000;
401 // RO: AHCI only (0 - legacy too) 402 localparam GHC__CAP__SAM__ADDR =
'h0;
403 localparam GHC__CAP__SAM__MASK =
'h40000;
404 localparam GHC__CAP__SAM__DFLT =
'h40000;
405 // RO: Supports Port Multiplier - no 406 localparam GHC__CAP__SPM__ADDR =
'h0;
407 localparam GHC__CAP__SPM__MASK =
'h20000;
408 localparam GHC__CAP__SPM__DFLT =
'h0;
409 // RO: Supports FIS-based switching of the Port Multiplier - no 410 localparam GHC__CAP__FBSS__ADDR =
'h0;
411 localparam GHC__CAP__FBSS__MASK =
'h10000;
412 localparam GHC__CAP__FBSS__DFLT =
'h0;
413 // RO: PIO Multiple DRQ block - no 414 localparam GHC__CAP__PMD__ADDR =
'h0;
415 localparam GHC__CAP__PMD__MASK =
'h8000;
416 localparam GHC__CAP__PMD__DFLT =
'h0;
417 // RO: Slumber State Capable - no 418 localparam GHC__CAP__SSC__ADDR =
'h0;
419 localparam GHC__CAP__SSC__MASK =
'h4000;
420 localparam GHC__CAP__SSC__DFLT =
'h0;
421 // RO: Partial State Capable - no 422 localparam GHC__CAP__PSC__ADDR =
'h0;
423 localparam GHC__CAP__PSC__MASK =
'h2000;
424 localparam GHC__CAP__PSC__DFLT =
'h0;
425 // RO: Number of Command Slots, 0-based (0 means 1?) 426 localparam GHC__CAP__NSC__ADDR =
'h0;
427 localparam GHC__CAP__NSC__MASK =
'h1f00;
428 localparam GHC__CAP__NSC__DFLT =
'h0;
429 // RO: Command Completion Coalescing - no 430 localparam GHC__CAP__CCCS__ADDR =
'h0;
431 localparam GHC__CAP__CCCS__MASK =
'h80;
432 localparam GHC__CAP__CCCS__DFLT =
'h0;
433 // RO: Enclosure Management - no 434 localparam GHC__CAP__EMS__ADDR =
'h0;
435 localparam GHC__CAP__EMS__MASK =
'h40;
436 localparam GHC__CAP__EMS__DFLT =
'h0;
437 // RO: External SATA connector - yes 438 localparam GHC__CAP__SXS__ADDR =
'h0;
439 localparam GHC__CAP__SXS__MASK =
'h20;
440 localparam GHC__CAP__SXS__DFLT =
'h20;
441 // RO: Number of Ports, 0-based (0 means 1?) 442 localparam GHC__CAP__NP__ADDR =
'h0;
443 localparam GHC__CAP__NP__MASK =
'h1f;
444 localparam GHC__CAP__NP__DFLT =
'h0;
445 // RO: AHCI enable (0 - legacy) 446 localparam GHC__GHC__AE__ADDR =
'h1;
447 localparam GHC__GHC__AE__MASK =
'h80000000;
448 localparam GHC__GHC__AE__DFLT =
'h80000000;
449 // RO: MSI Revert to Single Message 450 localparam GHC__GHC__MRSM__ADDR =
'h1;
451 localparam GHC__GHC__MRSM__MASK =
'h4;
452 localparam GHC__GHC__MRSM__DFLT =
'h0;
453 // RW: Interrupt Enable (all ports) 454 localparam GHC__GHC__IE__ADDR =
'h1;
455 localparam GHC__GHC__IE__MASK =
'h2;
456 localparam GHC__GHC__IE__DFLT =
'h0;
457 // RW1: HBA reset (COMINIT, ...). Set by software, cleared by hardware, section 10.4.3 458 localparam GHC__GHC__HR__ADDR =
'h1;
459 localparam GHC__GHC__HR__MASK =
'h1;
460 localparam GHC__GHC__HR__DFLT =
'h0;
461 // RWC: Interrupt Pending Status (per port) 462 localparam GHC__IS__IPS__ADDR =
'h2;
463 localparam GHC__IS__IPS__MASK =
'hffffffff;
464 localparam GHC__IS__IPS__DFLT =
'h0;
465 // RO: Ports Implemented 466 localparam GHC__PI__PI__ADDR =
'h3;
467 localparam GHC__PI__PI__MASK =
'hffffffff;
468 localparam GHC__PI__PI__DFLT =
'h1;
469 // RO: AHCI Major Version 1. 470 localparam GHC__VS__MJR__ADDR =
'h4;
471 localparam GHC__VS__MJR__MASK =
'hffff0000;
472 localparam GHC__VS__MJR__DFLT =
'h10000;
473 // RO: AHCI Minor Version 3.1 474 localparam GHC__VS__MNR__ADDR =
'h4;
475 localparam GHC__VS__MNR__MASK =
'hffff;
476 localparam GHC__VS__MNR__DFLT =
'h301;
477 // RO: DevSleep Entrance from Slumber Only 478 localparam GHC__CAP2__DESO__ADDR =
'h9;
479 localparam GHC__CAP2__DESO__MASK =
'h20;
480 localparam GHC__CAP2__DESO__DFLT =
'h0;
481 // RO: Supports Aggressive Device Sleep Management 482 localparam GHC__CAP2__SADM__ADDR =
'h9;
483 localparam GHC__CAP2__SADM__MASK =
'h10;
484 localparam GHC__CAP2__SADM__DFLT =
'h0;
485 // RO: Supports Device Sleep 486 localparam GHC__CAP2__SDS__ADDR =
'h9;
487 localparam GHC__CAP2__SDS__MASK =
'h8;
488 localparam GHC__CAP2__SDS__DFLT =
'h0;
489 // RO: Automatic Partial to Slumber Transitions 490 localparam GHC__CAP2__APST__ADDR =
'h9;
491 localparam GHC__CAP2__APST__MASK =
'h4;
492 localparam GHC__CAP2__APST__DFLT =
'h0;
493 // RO: NVMHCI Present (section 10.15) 494 localparam GHC__CAP2__NVMP__ADDR =
'h9;
495 localparam GHC__CAP2__NVMP__MASK =
'h2;
496 localparam GHC__CAP2__NVMP__DFLT =
'h0;
497 // RO: BIOS/OS Handoff - not supported 498 localparam GHC__CAP2__BOH__ADDR =
'h9;
499 localparam GHC__CAP2__BOH__MASK =
'h1;
500 localparam GHC__CAP2__BOH__DFLT =
'h0;
501 // RW: Command List Base Address (1KB aligned) 502 localparam HBA_PORT__PxCLB__CLB__ADDR =
'h40;
503 localparam HBA_PORT__PxCLB__CLB__MASK =
'hfffffc00;
504 localparam HBA_PORT__PxCLB__CLB__DFLT =
'h80000800;
505 // RW: Command List Base Address (1KB aligned) 506 localparam HBA_PORT__PxFB__CLB__ADDR =
'h42;
507 localparam HBA_PORT__PxFB__CLB__MASK =
'hffffff00;
508 localparam HBA_PORT__PxFB__CLB__DFLT =
'h80000c00;
509 // RWC: Cold Port Detect Status 510 localparam HBA_PORT__PxIS__CPDS__ADDR =
'h44;
511 localparam HBA_PORT__PxIS__CPDS__MASK =
'h80000000;
512 localparam HBA_PORT__PxIS__CPDS__DFLT =
'h0;
513 // RWC: Task File Error Status 514 localparam HBA_PORT__PxIS__TFES__ADDR =
'h44;
515 localparam HBA_PORT__PxIS__TFES__MASK =
'h40000000;
516 localparam HBA_PORT__PxIS__TFES__DFLT =
'h0;
517 // RWC: Host Bus (PCI) Fatal error 518 localparam HBA_PORT__PxIS__HBFS__ADDR =
'h44;
519 localparam HBA_PORT__PxIS__HBFS__MASK =
'h20000000;
520 localparam HBA_PORT__PxIS__HBFS__DFLT =
'h0;
521 // RWC: ECC error R/W system memory 522 localparam HBA_PORT__PxIS__HBDS__ADDR =
'h44;
523 localparam HBA_PORT__PxIS__HBDS__MASK =
'h10000000;
524 localparam HBA_PORT__PxIS__HBDS__DFLT =
'h0;
525 // RWC: Interface Fatal Error Status (sect. 6.1.2) 526 localparam HBA_PORT__PxIS__IFS__ADDR =
'h44;
527 localparam HBA_PORT__PxIS__IFS__MASK =
'h8000000;
528 localparam HBA_PORT__PxIS__IFS__DFLT =
'h0;
529 // RWC: Interface Non-Fatal Error Status (sect. 6.1.2) 530 localparam HBA_PORT__PxIS__INFS__ADDR =
'h44;
531 localparam HBA_PORT__PxIS__INFS__MASK =
'h4000000;
532 localparam HBA_PORT__PxIS__INFS__DFLT =
'h0;
533 // RWC: Overflow Status 534 localparam HBA_PORT__PxIS__OFS__ADDR =
'h44;
535 localparam HBA_PORT__PxIS__OFS__MASK =
'h1000000;
536 localparam HBA_PORT__PxIS__OFS__DFLT =
'h0;
537 // RWC: Incorrect Port Multiplier Status 538 localparam HBA_PORT__PxIS__IPMS__ADDR =
'h44;
539 localparam HBA_PORT__PxIS__IPMS__MASK =
'h800000;
540 localparam HBA_PORT__PxIS__IPMS__DFLT =
'h0;
541 // RO: PhyRdy changed Status 542 localparam HBA_PORT__PxIS__PRCS__ADDR =
'h44;
543 localparam HBA_PORT__PxIS__PRCS__MASK =
'h400000;
544 localparam HBA_PORT__PxIS__PRCS__DFLT =
'h0;
545 // RWC: Device Mechanical Presence Status 546 localparam HBA_PORT__PxIS__DMPS__ADDR =
'h44;
547 localparam HBA_PORT__PxIS__DMPS__MASK =
'h80;
548 localparam HBA_PORT__PxIS__DMPS__DFLT =
'h0;
549 // RO: Port Connect Change Status 550 localparam HBA_PORT__PxIS__PCS__ADDR =
'h44;
551 localparam HBA_PORT__PxIS__PCS__MASK =
'h40;
552 localparam HBA_PORT__PxIS__PCS__DFLT =
'h0;
553 // RWC: Descriptor Processed 554 localparam HBA_PORT__PxIS__DPS__ADDR =
'h44;
555 localparam HBA_PORT__PxIS__DPS__MASK =
'h20;
556 localparam HBA_PORT__PxIS__DPS__DFLT =
'h0;
558 localparam HBA_PORT__PxIS__UFS__ADDR =
'h44;
559 localparam HBA_PORT__PxIS__UFS__MASK =
'h10;
560 localparam HBA_PORT__PxIS__UFS__DFLT =
'h0;
561 // RWC: Set Device Bits Interrupt - Set Device bits FIS with 'I' bit set 562 localparam HBA_PORT__PxIS__SDBS__ADDR =
'h44;
563 localparam HBA_PORT__PxIS__SDBS__MASK =
'h8;
564 localparam HBA_PORT__PxIS__SDBS__DFLT =
'h0;
565 // RWC: DMA Setup FIS Interrupt - DMA Setup FIS received with 'I' bit set 566 localparam HBA_PORT__PxIS__DSS__ADDR =
'h44;
567 localparam HBA_PORT__PxIS__DSS__MASK =
'h4;
568 localparam HBA_PORT__PxIS__DSS__DFLT =
'h0;
569 // RWC: PIO Setup FIS Interrupt - PIO Setup FIS received with 'I' bit set 570 localparam HBA_PORT__PxIS__PSS__ADDR =
'h44;
571 localparam HBA_PORT__PxIS__PSS__MASK =
'h2;
572 localparam HBA_PORT__PxIS__PSS__DFLT =
'h0;
573 // RWC: D2H Register FIS Interrupt - D2H Register FIS received with 'I' bit set 574 localparam HBA_PORT__PxIS__DHRS__ADDR =
'h44;
575 localparam HBA_PORT__PxIS__DHRS__MASK =
'h1;
576 localparam HBA_PORT__PxIS__DHRS__DFLT =
'h0;
577 // RW: Cold Port Detect Enable 578 localparam HBA_PORT__PxIE__CPDE__ADDR =
'h45;
579 localparam HBA_PORT__PxIE__CPDE__MASK =
'h80000000;
580 localparam HBA_PORT__PxIE__CPDE__DFLT =
'h0;
581 // RW: Task File Error Enable 582 localparam HBA_PORT__PxIE__TFEE__ADDR =
'h45;
583 localparam HBA_PORT__PxIE__TFEE__MASK =
'h40000000;
584 localparam HBA_PORT__PxIE__TFEE__DFLT =
'h0;
585 // RW: Host Bus (PCI) Fatal Error Enable 586 localparam HBA_PORT__PxIE__HBFE__ADDR =
'h45;
587 localparam HBA_PORT__PxIE__HBFE__MASK =
'h20000000;
588 localparam HBA_PORT__PxIE__HBFE__DFLT =
'h0;
589 // RW: ECC Error R/W System Memory Enable 590 localparam HBA_PORT__PxIE__HBDE__ADDR =
'h45;
591 localparam HBA_PORT__PxIE__HBDE__MASK =
'h10000000;
592 localparam HBA_PORT__PxIE__HBDE__DFLT =
'h0;
593 // RW: Interface Fatal Error Enable (sect. 6.1.2) 594 localparam HBA_PORT__PxIE__IFE__ADDR =
'h45;
595 localparam HBA_PORT__PxIE__IFE__MASK =
'h8000000;
596 localparam HBA_PORT__PxIE__IFE__DFLT =
'h0;
597 // RW: Interface Non-Fatal Error Enable (sect. 6.1.2) 598 localparam HBA_PORT__PxIE__INFE__ADDR =
'h45;
599 localparam HBA_PORT__PxIE__INFE__MASK =
'h4000000;
600 localparam HBA_PORT__PxIE__INFE__DFLT =
'h0;
601 // RW: Overflow Enable 602 localparam HBA_PORT__PxIE__OFE__ADDR =
'h45;
603 localparam HBA_PORT__PxIE__OFE__MASK =
'h1000000;
604 localparam HBA_PORT__PxIE__OFE__DFLT =
'h0;
605 // RW: Incorrect Port Multiplier Enable 606 localparam HBA_PORT__PxIE__IPME__ADDR =
'h45;
607 localparam HBA_PORT__PxIE__IPME__MASK =
'h800000;
608 localparam HBA_PORT__PxIE__IPME__DFLT =
'h0;
609 // RW: PhyRdy changed Enable 610 localparam HBA_PORT__PxIE__PRCE__ADDR =
'h45;
611 localparam HBA_PORT__PxIE__PRCE__MASK =
'h400000;
612 localparam HBA_PORT__PxIE__PRCE__DFLT =
'h0;
613 // RO: Device Mechanical Presence Interrupt Enable 614 localparam HBA_PORT__PxIE__DMPE__ADDR =
'h45;
615 localparam HBA_PORT__PxIE__DMPE__MASK =
'h80;
616 localparam HBA_PORT__PxIE__DMPE__DFLT =
'h0;
617 // RW: Port Connect Change Interrupt Enable 618 localparam HBA_PORT__PxIE__PCE__ADDR =
'h45;
619 localparam HBA_PORT__PxIE__PCE__MASK =
'h40;
620 localparam HBA_PORT__PxIE__PCE__DFLT =
'h0;
621 // RW: Descriptor Processed Interrupt Enable 622 localparam HBA_PORT__PxIE__DPE__ADDR =
'h45;
623 localparam HBA_PORT__PxIE__DPE__MASK =
'h20;
624 localparam HBA_PORT__PxIE__DPE__DFLT =
'h0;
626 localparam HBA_PORT__PxIE__UFE__ADDR =
'h45;
627 localparam HBA_PORT__PxIE__UFE__MASK =
'h10;
628 localparam HBA_PORT__PxIE__UFE__DFLT =
'h0;
629 // RW: Device Bits Interrupt Enable 630 localparam HBA_PORT__PxIE__SDBE__ADDR =
'h45;
631 localparam HBA_PORT__PxIE__SDBE__MASK =
'h8;
632 localparam HBA_PORT__PxIE__SDBE__DFLT =
'h0;
633 // RW: DMA Setup FIS Interrupt Enable 634 localparam HBA_PORT__PxIE__DSE__ADDR =
'h45;
635 localparam HBA_PORT__PxIE__DSE__MASK =
'h4;
636 localparam HBA_PORT__PxIE__DSE__DFLT =
'h0;
637 // RW: PIO Setup FIS Interrupt Enable 638 localparam HBA_PORT__PxIE__PSE__ADDR =
'h45;
639 localparam HBA_PORT__PxIE__PSE__MASK =
'h2;
640 localparam HBA_PORT__PxIE__PSE__DFLT =
'h0;
641 // RW: D2H Register FIS Interrupt Enable 642 localparam HBA_PORT__PxIE__DHRE__ADDR =
'h45;
643 localparam HBA_PORT__PxIE__DHRE__MASK =
'h1;
644 localparam HBA_PORT__PxIE__DHRE__DFLT =
'h0;
645 // RW: Interface Communication Control 646 localparam HBA_PORT__PxCMD__ICC__ADDR =
'h46;
647 localparam HBA_PORT__PxCMD__ICC__MASK =
'hf0000000;
648 localparam HBA_PORT__PxCMD__ICC__DFLT =
'h0;
649 // RO: Aggressive Slumber/Partial - not implemented 650 localparam HBA_PORT__PxCMD__ASP__ADDR =
'h46;
651 localparam HBA_PORT__PxCMD__ASP__MASK =
'h8000000;
652 localparam HBA_PORT__PxCMD__ASP__DFLT =
'h0;
653 // RO: Aggressive Link Power Management Enable - not implemented 654 localparam HBA_PORT__PxCMD__ALPE__ADDR =
'h46;
655 localparam HBA_PORT__PxCMD__ALPE__MASK =
'h4000000;
656 localparam HBA_PORT__PxCMD__ALPE__DFLT =
'h0;
657 // RW: Drive LED on ATAPI enable 658 localparam HBA_PORT__PxCMD__DLAE__ADDR =
'h46;
659 localparam HBA_PORT__PxCMD__DLAE__MASK =
'h2000000;
660 localparam HBA_PORT__PxCMD__DLAE__DFLT =
'h0;
661 // RW: Device is ATAPI (for activity LED) 662 localparam HBA_PORT__PxCMD__ATAPI__ADDR =
'h46;
663 localparam HBA_PORT__PxCMD__ATAPI__MASK =
'h1000000;
664 localparam HBA_PORT__PxCMD__ATAPI__DFLT =
'h0;
665 // RW: Automatic Partial to Slumber Transitions Enabled 666 localparam HBA_PORT__PxCMD__APSTE__ADDR =
'h46;
667 localparam HBA_PORT__PxCMD__APSTE__MASK =
'h800000;
668 localparam HBA_PORT__PxCMD__APSTE__DFLT =
'h0;
669 // RO: FIS-Based Switching Capable Port - not implemented 670 localparam HBA_PORT__PxCMD__FBSCP__ADDR =
'h46;
671 localparam HBA_PORT__PxCMD__FBSCP__MASK =
'h400000;
672 localparam HBA_PORT__PxCMD__FBSCP__DFLT =
'h0;
673 // RO: External SATA port 674 localparam HBA_PORT__PxCMD__ESP__ADDR =
'h46;
675 localparam HBA_PORT__PxCMD__ESP__MASK =
'h200000;
676 localparam HBA_PORT__PxCMD__ESP__DFLT =
'h200000;
677 // RO: Cold Presence Detection 678 localparam HBA_PORT__PxCMD__CPD__ADDR =
'h46;
679 localparam HBA_PORT__PxCMD__CPD__MASK =
'h100000;
680 localparam HBA_PORT__PxCMD__CPD__DFLT =
'h0;
681 // RO: Mechanical Presence Switch Attached to Port 682 localparam HBA_PORT__PxCMD__MPSP__ADDR =
'h46;
683 localparam HBA_PORT__PxCMD__MPSP__MASK =
'h80000;
684 localparam HBA_PORT__PxCMD__MPSP__DFLT =
'h0;
685 // RO: Hot Plug Capable Port 686 localparam HBA_PORT__PxCMD__HPCP__ADDR =
'h46;
687 localparam HBA_PORT__PxCMD__HPCP__MASK =
'h40000;
688 localparam HBA_PORT__PxCMD__HPCP__DFLT =
'h40000;
689 // RW: Port Multiplier Attached - not implemented (software should write this bit) 690 localparam HBA_PORT__PxCMD__PMA__ADDR =
'h46;
691 localparam HBA_PORT__PxCMD__PMA__MASK =
'h20000;
692 localparam HBA_PORT__PxCMD__PMA__DFLT =
'h0;
693 // RO: Cold Presence State 694 localparam HBA_PORT__PxCMD__CPS__ADDR =
'h46;
695 localparam HBA_PORT__PxCMD__CPS__MASK =
'h10000;
696 localparam HBA_PORT__PxCMD__CPS__DFLT =
'h0;
697 // RO: Command List Running (section 5.3.2) 698 localparam HBA_PORT__PxCMD__CR__ADDR =
'h46;
699 localparam HBA_PORT__PxCMD__CR__MASK =
'h8000;
700 localparam HBA_PORT__PxCMD__CR__DFLT =
'h0;
701 // RO: FIS Receive Running (section 10.3.2) 702 localparam HBA_PORT__PxCMD__FR__ADDR =
'h46;
703 localparam HBA_PORT__PxCMD__FR__MASK =
'h4000;
704 localparam HBA_PORT__PxCMD__FR__DFLT =
'h0;
705 // RO: Mechanical Presence Switch State 706 localparam HBA_PORT__PxCMD__MPSS__ADDR =
'h46;
707 localparam HBA_PORT__PxCMD__MPSS__MASK =
'h2000;
708 localparam HBA_PORT__PxCMD__MPSS__DFLT =
'h0;
709 // RO: Current Command Slot (when PxCMD.ST 1-> ) should be reset to 0, when 0->1 - highest priority is 0 710 localparam HBA_PORT__PxCMD__CCS__ADDR =
'h46;
711 localparam HBA_PORT__PxCMD__CCS__MASK =
'h1f00;
712 localparam HBA_PORT__PxCMD__CCS__DFLT =
'h0;
713 // RW: FIS Receive Enable (enable after FIS memory is set) 714 localparam HBA_PORT__PxCMD__FRE__ADDR =
'h46;
715 localparam HBA_PORT__PxCMD__FRE__MASK =
'h10;
716 localparam HBA_PORT__PxCMD__FRE__DFLT =
'h0;
717 // RW1: Command List Override 718 localparam HBA_PORT__PxCMD__CLO__ADDR =
'h46;
719 localparam HBA_PORT__PxCMD__CLO__MASK =
'h8;
720 localparam HBA_PORT__PxCMD__CLO__DFLT =
'h0;
721 // RO: Power On Device (RW with Cold Presence Detection) 722 localparam HBA_PORT__PxCMD__POD__ADDR =
'h46;
723 localparam HBA_PORT__PxCMD__POD__MASK =
'h4;
724 localparam HBA_PORT__PxCMD__POD__DFLT =
'h4;
725 // RO: Spin-Up Device (RW with Staggered Spin-Up Support) 726 localparam HBA_PORT__PxCMD__SUD__ADDR =
'h46;
727 localparam HBA_PORT__PxCMD__SUD__MASK =
'h2;
728 localparam HBA_PORT__PxCMD__SUD__DFLT =
'h2;
729 // RW: Start (HBA may process commands). See section 10.3.1 730 localparam HBA_PORT__PxCMD__ST__ADDR =
'h46;
731 localparam HBA_PORT__PxCMD__ST__MASK =
'h1;
732 localparam HBA_PORT__PxCMD__ST__DFLT =
'h0;
733 // RO: Latest Copy of Task File Error Register 734 localparam HBA_PORT__PxTFD__ERR__ADDR =
'h48;
735 localparam HBA_PORT__PxTFD__ERR__MASK =
'hff00;
736 localparam HBA_PORT__PxTFD__ERR__DFLT =
'h0;
737 // RO: Latest Copy of Task File Status Register: BSY 738 localparam HBA_PORT__PxTFD__STS__BSY__ADDR =
'h48;
739 localparam HBA_PORT__PxTFD__STS__BSY__MASK =
'h80;
740 localparam HBA_PORT__PxTFD__STS__BSY__DFLT =
'h0;
741 // RO: Latest Copy of Task File Status Register: command-specific bits 4..6 742 localparam HBA_PORT__PxTFD__STS__64__ADDR =
'h48;
743 localparam HBA_PORT__PxTFD__STS__64__MASK =
'h70;
744 localparam HBA_PORT__PxTFD__STS__64__DFLT =
'h0;
745 // RO: Latest Copy of Task File Status Register: DRQ 746 localparam HBA_PORT__PxTFD__STS__DRQ__ADDR =
'h48;
747 localparam HBA_PORT__PxTFD__STS__DRQ__MASK =
'h8;
748 localparam HBA_PORT__PxTFD__STS__DRQ__DFLT =
'h0;
749 // RO: Latest Copy of Task File Status Register: command-specific bits 1..2 750 localparam HBA_PORT__PxTFD__STS__12__ADDR =
'h48;
751 localparam HBA_PORT__PxTFD__STS__12__MASK =
'h6;
752 localparam HBA_PORT__PxTFD__STS__12__DFLT =
'h0;
753 // RO: Latest Copy of Task File Status Register: ERR 754 localparam HBA_PORT__PxTFD__STS__ERR__ADDR =
'h48;
755 localparam HBA_PORT__PxTFD__STS__ERR__MASK =
'h1;
756 localparam HBA_PORT__PxTFD__STS__ERR__DFLT =
'h0;
757 // RO: Data in the first D2H Register FIS 758 localparam HBA_PORT__PxSIG__SIG__ADDR =
'h49;
759 localparam HBA_PORT__PxSIG__SIG__MASK =
'hffffffff;
760 localparam HBA_PORT__PxSIG__SIG__DFLT =
'hffffffff;
761 // RO: Interface Power Management 762 localparam HBA_PORT__PxSSTS__IPM__ADDR =
'h4a;
763 localparam HBA_PORT__PxSSTS__IPM__MASK =
'hf00;
764 localparam HBA_PORT__PxSSTS__IPM__DFLT =
'h0;
765 // RO: Interface Speed 766 localparam HBA_PORT__PxSSTS__SPD__ADDR =
'h4a;
767 localparam HBA_PORT__PxSSTS__SPD__MASK =
'hf0;
768 localparam HBA_PORT__PxSSTS__SPD__DFLT =
'h0;
769 // RO: Device Detection (should be detected if COMINIT is received) 770 localparam HBA_PORT__PxSSTS__DET__ADDR =
'h4a;
771 localparam HBA_PORT__PxSSTS__DET__MASK =
'hf;
772 localparam HBA_PORT__PxSSTS__DET__DFLT =
'h0;
773 // RO: Port Multiplier Port - not used by AHCI 774 localparam HBA_PORT__PxSCTL__PMP__ADDR =
'h4b;
775 localparam HBA_PORT__PxSCTL__PMP__MASK =
'hf0000;
776 localparam HBA_PORT__PxSCTL__PMP__DFLT =
'h0;
777 // RO: Select Power Management - not used by AHCI 778 localparam HBA_PORT__PxSCTL__SPM__ADDR =
'h4b;
779 localparam HBA_PORT__PxSCTL__SPM__MASK =
'hf000;
780 localparam HBA_PORT__PxSCTL__SPM__DFLT =
'h0;
781 // RW: Interface Power Management Transitions Allowed 782 localparam HBA_PORT__PxSCTL__IPM__ADDR =
'h4b;
783 localparam HBA_PORT__PxSCTL__IPM__MASK =
'hf00;
784 localparam HBA_PORT__PxSCTL__IPM__DFLT =
'h0;
785 // RW: Interface Highest Speed 786 localparam HBA_PORT__PxSCTL__SPD__ADDR =
'h4b;
787 localparam HBA_PORT__PxSCTL__SPD__MASK =
'hf0;
788 localparam HBA_PORT__PxSCTL__SPD__DFLT =
'h0;
789 // RW: Device Detection Initialization 790 localparam HBA_PORT__PxSCTL__DET__ADDR =
'h4b;
791 localparam HBA_PORT__PxSCTL__DET__MASK =
'hf;
792 localparam HBA_PORT__PxSCTL__DET__DFLT =
'h0;
793 // RWC: Exchanged (set on COMINIT), reflected in PxIS.PCS 794 localparam HBA_PORT__PxSERR__DIAG__X__ADDR =
'h4c;
795 localparam HBA_PORT__PxSERR__DIAG__X__MASK =
'h4000000;
796 localparam HBA_PORT__PxSERR__DIAG__X__DFLT =
'h0;
798 localparam HBA_PORT__PxSERR__DIAG__F__ADDR =
'h4c;
799 localparam HBA_PORT__PxSERR__DIAG__F__MASK =
'h2000000;
800 localparam HBA_PORT__PxSERR__DIAG__F__DFLT =
'h0;
801 // RWC: Transport state transition error 802 localparam HBA_PORT__PxSERR__DIAG__T__ADDR =
'h4c;
803 localparam HBA_PORT__PxSERR__DIAG__T__MASK =
'h1000000;
804 localparam HBA_PORT__PxSERR__DIAG__T__DFLT =
'h0;
805 // RWC: Link sequence error 806 localparam HBA_PORT__PxSERR__DIAG__S__ADDR =
'h4c;
807 localparam HBA_PORT__PxSERR__DIAG__S__MASK =
'h800000;
808 localparam HBA_PORT__PxSERR__DIAG__S__DFLT =
'h0;
809 // RWC: Handshake Error (i.e. Device got CRC error) 810 localparam HBA_PORT__PxSERR__DIAG__H__ADDR =
'h4c;
811 localparam HBA_PORT__PxSERR__DIAG__H__MASK =
'h400000;
812 localparam HBA_PORT__PxSERR__DIAG__H__DFLT =
'h0;
813 // RWC: CRC error in Link layer 814 localparam HBA_PORT__PxSERR__DIAG__C__ADDR =
'h4c;
815 localparam HBA_PORT__PxSERR__DIAG__C__MASK =
'h200000;
816 localparam HBA_PORT__PxSERR__DIAG__C__DFLT =
'h0;
817 // RWC: Disparity Error - not used by AHCI 818 localparam HBA_PORT__PxSERR__DIAG__D__ADDR =
'h4c;
819 localparam HBA_PORT__PxSERR__DIAG__D__MASK =
'h100000;
820 localparam HBA_PORT__PxSERR__DIAG__D__DFLT =
'h0;
821 // RWC: 10B to 8B decode error 822 localparam HBA_PORT__PxSERR__DIAG__B__ADDR =
'h4c;
823 localparam HBA_PORT__PxSERR__DIAG__B__MASK =
'h80000;
824 localparam HBA_PORT__PxSERR__DIAG__B__DFLT =
'h0;
825 // RWC: COMMWAKE signal was detected 826 localparam HBA_PORT__PxSERR__DIAG__W__ADDR =
'h4c;
827 localparam HBA_PORT__PxSERR__DIAG__W__MASK =
'h40000;
828 localparam HBA_PORT__PxSERR__DIAG__W__DFLT =
'h0;
829 // RWC: PHY Internal Error 830 localparam HBA_PORT__PxSERR__DIAG__I__ADDR =
'h4c;
831 localparam HBA_PORT__PxSERR__DIAG__I__MASK =
'h20000;
832 localparam HBA_PORT__PxSERR__DIAG__I__DFLT =
'h0;
833 // RWC: PhyRdy changed. Reflected in PxIS.PRCS bit. 834 localparam HBA_PORT__PxSERR__DIAG__N__ADDR =
'h4c;
835 localparam HBA_PORT__PxSERR__DIAG__N__MASK =
'h10000;
836 localparam HBA_PORT__PxSERR__DIAG__N__DFLT =
'h0;
837 // RWC: Internal Error 838 localparam HBA_PORT__PxSERR__ERR__E__ADDR =
'h4c;
839 localparam HBA_PORT__PxSERR__ERR__E__MASK =
'h800;
840 localparam HBA_PORT__PxSERR__ERR__E__DFLT =
'h0;
841 // RWC: Protocol Error - a violation of SATA protocol detected 842 localparam HBA_PORT__PxSERR__ERR__P__ADDR =
'h4c;
843 localparam HBA_PORT__PxSERR__ERR__P__MASK =
'h400;
844 localparam HBA_PORT__PxSERR__ERR__P__DFLT =
'h0;
845 // RWC: Persistent Communication or Data Integrity Error 846 localparam HBA_PORT__PxSERR__ERR__C__ADDR =
'h4c;
847 localparam HBA_PORT__PxSERR__ERR__C__MASK =
'h200;
848 localparam HBA_PORT__PxSERR__ERR__C__DFLT =
'h0;
849 // RWC: Transient Data Integrity Error (error not recovered by the interface) 850 localparam HBA_PORT__PxSERR__ERR__T__ADDR =
'h4c;
851 localparam HBA_PORT__PxSERR__ERR__T__MASK =
'h100;
852 localparam HBA_PORT__PxSERR__ERR__T__DFLT =
'h0;
853 // RWC: Communication between the device and host was lost but re-established 854 localparam HBA_PORT__PxSERR__ERR__M__ADDR =
'h4c;
855 localparam HBA_PORT__PxSERR__ERR__M__MASK =
'h2;
856 localparam HBA_PORT__PxSERR__ERR__M__DFLT =
'h0;
857 // RWC: Recovered Data integrity Error 858 localparam HBA_PORT__PxSERR__ERR__I__ADDR =
'h4c;
859 localparam HBA_PORT__PxSERR__ERR__I__MASK =
'h1;
860 localparam HBA_PORT__PxSERR__ERR__I__DFLT =
'h0;
861 // RW1: Device Status: bit per Port, for TAG in native queued command 862 localparam HBA_PORT__PxSACT__DS__ADDR =
'h4d;
863 localparam HBA_PORT__PxSACT__DS__MASK =
'hffffffff;
864 localparam HBA_PORT__PxSACT__DS__DFLT =
'h0;
865 // RW1: Command Issued: bit per Port, only set when PxCMD.ST==1, also cleared by PxCMD.ST: 1->0 by soft 866 localparam HBA_PORT__PxCI__CI__ADDR =
'h4e;
867 localparam HBA_PORT__PxCI__CI__MASK =
'hffffffff;
868 localparam HBA_PORT__PxCI__CI__DFLT =
'h0;
869 // RWC: PM Notify (bit per PM port) 870 localparam HBA_PORT__PxSNTF__PMN__ADDR =
'h4f;
871 localparam HBA_PORT__PxSNTF__PMN__MASK =
'hffff;
872 localparam HBA_PORT__PxSNTF__PMN__DFLT =
'h0;
873 // RO: Device with Error 874 localparam HBA_PORT__PxFBS__DWE__ADDR =
'h50;
875 localparam HBA_PORT__PxFBS__DWE__MASK =
'hf0000;
876 localparam HBA_PORT__PxFBS__DWE__DFLT =
'h0;
877 // RO: Active Device Optimization 878 localparam HBA_PORT__PxFBS__ADO__ADDR =
'h50;
879 localparam HBA_PORT__PxFBS__ADO__MASK =
'hf000;
880 localparam HBA_PORT__PxFBS__ADO__DFLT =
'h0;
881 // RW: Device To Issue 882 localparam HBA_PORT__PxFBS__DEV__ADDR =
'h50;
883 localparam HBA_PORT__PxFBS__DEV__MASK =
'hf00;
884 localparam HBA_PORT__PxFBS__DEV__DFLT =
'h0;
885 // RO: Single Device Error 886 localparam HBA_PORT__PxFBS__SDE__ADDR =
'h50;
887 localparam HBA_PORT__PxFBS__SDE__MASK =
'h4;
888 localparam HBA_PORT__PxFBS__SDE__DFLT =
'h0;
889 // RW1: Device Error Clear 890 localparam HBA_PORT__PxFBS__DEC__ADDR =
'h50;
891 localparam HBA_PORT__PxFBS__DEC__MASK =
'h2;
892 localparam HBA_PORT__PxFBS__DEC__DFLT =
'h0;
894 localparam HBA_PORT__PxFBS__EN__ADDR =
'h50;
895 localparam HBA_PORT__PxFBS__EN__MASK =
'h1;
896 localparam HBA_PORT__PxFBS__EN__DFLT =
'h0;
897 // RO: DITO Multiplier 898 localparam HBA_PORT__PxDEVSLP__DM__ADDR =
'h51;
899 localparam HBA_PORT__PxDEVSLP__DM__MASK =
'h1e000000;
900 localparam HBA_PORT__PxDEVSLP__DM__DFLT =
'h0;
901 // RW: Device Sleep Idle Timeout (section 8.5.1.1.1) 902 localparam HBA_PORT__PxDEVSLP__DITO__ADDR =
'h51;
903 localparam HBA_PORT__PxDEVSLP__DITO__MASK =
'h1ff8000;
904 localparam HBA_PORT__PxDEVSLP__DITO__DFLT =
'h0;
905 // RW: Minimum Device Sleep Assertion Time 906 localparam HBA_PORT__PxDEVSLP__MDAT__ADDR =
'h51;
907 localparam HBA_PORT__PxDEVSLP__MDAT__MASK =
'h7c00;
908 localparam HBA_PORT__PxDEVSLP__MDAT__DFLT =
'h0;
909 // RW: Device Sleep Exit Timeout 910 localparam HBA_PORT__PxDEVSLP__DETO__ADDR =
'h51;
911 localparam HBA_PORT__PxDEVSLP__DETO__MASK =
'h3fc;
912 localparam HBA_PORT__PxDEVSLP__DETO__DFLT =
'h0;
913 // RO: Device Sleep Present 914 localparam HBA_PORT__PxDEVSLP__DSP__ADDR =
'h51;
915 localparam HBA_PORT__PxDEVSLP__DSP__MASK =
'h2;
916 localparam HBA_PORT__PxDEVSLP__DSP__DFLT =
'h0;
917 // RO: Aggressive Device Sleep Enable 918 localparam HBA_PORT__PxDEVSLP__ADSE__ADDR =
'h51;
919 localparam HBA_PORT__PxDEVSLP__ADSE__MASK =
'h1;
920 localparam HBA_PORT__PxDEVSLP__ADSE__DFLT =
'h0;
921 // RW: SAXIHP write channel cache mode 922 localparam HBA_PORT__AFI_CACHE__WR_CM__ADDR =
'h5c;
923 localparam HBA_PORT__AFI_CACHE__WR_CM__MASK =
'hf0;
924 localparam HBA_PORT__AFI_CACHE__WR_CM__DFLT =
'h30;
925 // RW: SAXIHP read channel cache mode 926 localparam HBA_PORT__AFI_CACHE__RD_CM__ADDR =
'h5c;
927 localparam HBA_PORT__AFI_CACHE__RD_CM__MASK =
'hf;
928 localparam HBA_PORT__AFI_CACHE__RD_CM__DFLT =
'h3;
929 // RW: Address/not data for programming AHCI state machine 930 localparam HBA_PORT__PGM_AHCI_SM__AnD__ADDR =
'h5d;
931 localparam HBA_PORT__PGM_AHCI_SM__AnD__MASK =
'h1000000;
932 localparam HBA_PORT__PGM_AHCI_SM__AnD__DFLT =
'h0;
933 // RW: Program address/data for programming AHCI state machine 934 localparam HBA_PORT__PGM_AHCI_SM__PGM_AD__ADDR =
'h5d;
935 localparam HBA_PORT__PGM_AHCI_SM__PGM_AD__MASK =
'h3ffff;
936 localparam HBA_PORT__PGM_AHCI_SM__PGM_AD__DFLT =
'h0;
937 // RW: 3-bit tag to add to the recorded timestamp 938 localparam HBA_PORT__PunchTime__TAG__ADDR =
'h5e;
939 localparam HBA_PORT__PunchTime__TAG__MASK =
'h7;
940 localparam HBA_PORT__PunchTime__TAG__DFLT =
'h0;
944 localparam CLB_OFFS32 =
'h200;
// # In the second half of the register space (0x800..0xbff - 1KB) 949 localparam FB_OFFS32 =
'h300;
// # Needs 0x100 bytes 950 localparam DSFIS32 =
'h0;
// DMA Setup FIS 951 localparam PSFIS32 =
'h8;
// PIO Setup FIS 952 localparam RFIS32 =
'h10;
// D2H Register FIS 953 localparam SDBFIS32 =
'h16;
// Set device bits FIS 954 localparam UFIS32 =
'h18;
// Unknown FIS 980 reg [
3:
0]
fis_dcount;
// number of DWORDS left to be written to the "memory" 993 // wire data_in_ready = hba_data_in_valid && (hba_data_in_many || (!(|was_data_in) && hba_data_in_ready)); 1002 reg [
5:
0]
reg_ds;
//Unused? 1013 // reg update_pio_r; 1018 reg [
7:
0]
pio_es_r;
// value of PIO E_Status 1022 reg [
31:
0]
sig_r;
// signature register, save at 1031 // Forward data to DMA (dev->mem) engine 1033 // Will also try to skip to the end of too long FIS 1051 // assign data_in_dwords = data_out_dwords_r; 1069 always @ (
posedge mclk)
begin 1101 // save signature FIS to memory if waiting (if not - ignore FIS) 1102 // for non-signature /non-data - obey pcmd_fre 1132 (!
is_ignore || !
wreg_we_r);
// Ignore - unknown length, ned to look for is_fis_end with latency 1164 // Sets pPioErr[pPmpCur] to Error field of the FIS 1165 // Updates PxTFD.STS.ERR with pPioErr[pPmpCur] ?? 1202 // no - it should only be updated when written by software 1203 //CLB_OFFS32 + 1; // location of PRDBC 1205 input [ADDRESS_BITS-1:0] soft_write_addr, // register address written by software 1206 input [31:0] soft_write_data, // register data written (after applying wstb and type (RO, RW, RWC, RW1) 1207 input soft_write_en, // write enable for data write 1209 // if (hba_rst || reg_sdb[0] || reg_ps[4] || reg_ds[5]) prdbc_r[31:2] <= 0; 1210 // if (soft_write_en && (soft_write_addr == (CLB_OFFS32 + 1))) prdbc_r[31:2] <= soft_write_data[31:2]; 1230 // Maybe it is not needed if the fsm will send this pulse?
[11:0] 13216data_in_dwords
[1:0] 13230debug_get_fis_busy_r
13282xfer_cntr_rreg[31:2]
13235PXTFD_OFFS32HBA_OFFS32 + HBA_PORT0_OFFS32 + 'h8
13259data_in_dwords_rreg[11:0]
13295fis_first_flushing_rreg
reg [ADDRESS_BITS-1:0] 13217reg_addr
13262reg_addr_rreg[ADDRESS_BITS-1:0]
[ 1:0] 13221hba_data_in_type
13234PXSIG_OFFS32HBA_OFFS32 + HBA_PORT0_OFFS32 + 'h9
13256dma_skipping_extrawire
[1:0] 13229debug_fis_end_r
13233HBA_PORT0_OFFS32'h40
13294fis_first_invalid_rreg
13288get_fis_busy_rreg[1:0]