Me gustaría diseñar un puente MIPI CSI2 con un MachXO3L.
Aprovecho la entrada / salida LVDS25 de esta familia de FPGA con las resistencias adecuadas para el tráfico HS. (Creo) No me importa el LP, ya que la cámara funciona con un reloj de marcha libre y no es compatible con LP.
Este documento de Lattice explica lo que he estado siguiendo: enlace
Noquierodeserializar/volveraserializardatos,yaquelavelocidaddeltráficoCSI2podríasermásrápidadeloqueMachXO3Lpuedemanejardigitalmente.Quierolograrunpuente"analógico". Tal vez analógico no sea el término correcto, es más una oposición a lo digital con deserialización / re-serialización.
Mi código se parece a lo siguiente:
BLOCK RESETPATHS ;
BLOCK ASYNCPATHS ;
LOCATE COMP "clk_x1" SITE "C8" ;
FREQUENCY PORT "clk_x1" 12.000000 MHz ;
IOBUF PORT "clk_x1" PULLMODE=NONE IO_TYPE=LVCMOS25 ;
LOCATE COMP "I_CLK" SITE "R11" ; # PB35A
#LOCATE COMP "I_CLK_N" SITE "T12" ; # PB35B
LOCATE COMP "I_DAT0" SITE "R13" ; # PB34A
#LOCATE COMP "I_DAT0_N" SITE "T14" ; # PB34B
IOBUF PORT "I_CLK" PULLMODE=NONE IO_TYPE=LVDS25 DIFFRESISTOR=100 ;
IOBUF PORT "I_DAT0" PULLMODE=NONE IO_TYPE=LVDS25 DIFFRESISTOR=100 ;
LOCATE COMP "O_CLK" SITE "D10" ; # PT27A
#LOCATE COMP "O_CLK_N" SITE "E10" ; # PT27B
LOCATE COMP "O_DAT0" SITE "F9" ; # PT26A
#LOCATE COMP "O_DAT0_N" SITE "E11" ; # PT26B
IOBUF PORT "O_CLK" PULLMODE=NONE IO_TYPE=LVDS25 ;
IOBUF PORT "O_DAT0" PULLMODE=NONE IO_TYPE=LVDS25 ;
y también:
module csi_bridge(
input clk_x1,
input I_CLK,
input I_DAT0,
output O_CLK,
output O_DAT0,
);
assign O_CLK = I_CLK;
assign O_DAT0 = I_DAT0;
endmodule
He intentado varias cosas, pero el procesador no logra descifrar el tráfico. Obviamente, sin el FPGA intermedio, el procesador puede decodificar datos.
En el ámbito, veo cosas moviéndose en el lado de salida, intentando imitar la entrada. Mi alcance no es de ancho de banda súper alto, por lo que debo admitir que tengo algunos problemas para decir lo que realmente está mal.
¿Alguna idea de lo que debería hacer y de lo que podría faltar? ¿Son configuraciones específicas de Lattice Diamond que debería analizar?
** EDIT 1 **
Para dar más detalles, mi objetivo al final es replicar una lógica similar a Fairchild FSA642: enlace . He probado a fondo este chip y estoy 100% seguro de que no deserializan / reserializan datos porque he cambiado el reloj y los datos, y aún funciona. Me pregunto si no debería eliminar todos los resistores y considerar todos los pines independientemente con una lógica de asignación. Sin ningún pull-up, la tensión de salida no será más alta que la tensión de entrada.