controlador SATA en Artix 7

3

Antecedentes del problema: Mi objetivo final es implementar un controlador host SATA en un Artix 7 FPGA. Habiendo dicho eso, primero me estoy enfocando en la capa física. A través de mi investigación, he encontrado y leído a través de IP de código abierto que se encuentra aquí: enlace

La IP descrita anteriormente es para una familia más antigua de dispositivos FPGA y, por lo tanto, no se puede importar fácilmente al nuevo entorno Vivado.

Mi pregunta: ¿sería mejor comenzar la capa física desde cero utilizando el asistente de transceptor de la serie 7 O debería intentar migrar poco a poco el protocolo antiguo que se usará en el dispositivo más nuevo? ?

Notas importantes:

  • Los transceptores Rocket IO no son compatibles con Vivado
  • El nuevo dispositivo no tiene un puerto de salida SATA como la placa ML405 utilizada para el núcleo de código abierto
  • En la guía del producto, parece que el asistente de transceptor de la serie 7 maneja todos los aspectos de la capa física de SATA, como OOB, 8b / 10b, detección de coma, etc. PERO no hay documentación formal o diseño de ejemplo que pueda encontrar sobre SATA.
pregunta sacco

1 respuesta

1

Escribí un controlador SATA para un Spartan 6 y Virtex 6. No fue fácil y necesita algo de trabajo para poder ser utilizado.

Dicho esto, sugeriría usar Coregen para implementar la capa física.

Encontré que hay bastantes registros que no están documentados dentro de los transceptores de gigabits de las diferentes generaciones de FPGA. Es mucho mejor seguir al mago. Si fuera a comenzar con un Artix7, seleccionaría lo siguiente:

Selección de frecuencia / cambio de línea

Codificaciónysincronización

Alineaciónyecualizacióndecomas

PCIe,SATA,PRBS

SecuenciadeCByCC

LamayoríadelasseleccionessonlasconfiguracionesSATA2predeterminadas,peroelegíusarunbusdedatosde32bits.

Notaalmargen

Aunquenopreguntaste,creoqueestodeberíadecirse:

Mientrassedesarrollaba,escribíunacapadephysimulada.Funcionómuybienporqueaceleróeldesarrolloypudedeshabilitarelcodificadorcadavezquelonecesitaba.

Crearunacapadephysimuladanodeberíasertanmalo.Realmentesereduceaalgocomoestainterfaz:

modulesata_phy_layer(inputrst,//resetinputclk,inputplatform_ready,//theunderlyingphysicalplatformisoutputplatform_error,outputlinkup,//linkisfinishedoutput[31:0]tx_dout,outputtx_is_k,outputtx_comm_reset,outputtx_comm_wake,outputtx_elec_idle,inputtx_oob_complete,input[31:0]rx_din,input[3:0]rx_is_k,//Ishouldhavekepttherx/tx_is_kconsistent4or1:/inputrx_elec_idle,inputrx_byte_is_aligned,inputcomm_init_detect,inputcomm_wake_detect,outputphy_ready,inputphy_error,output[3:0]lax_state);

Noestoyaquíparaapoyarmiantiguotrabajodesata,dehecholodesaliento.Huboalgunaspartesenlasquetrabajéenuna,debodecir...deformapocoelegante...peropodríaayudarsibuscasunlugarparacomenzar.

Proyecto SATA en Verilog

    
respondido por el Dave

Lea otras preguntas en las etiquetas