Arreglar estándares de IO en conflicto

2

Estoy usando la Basys 2 Spartan-3E FPGA board con Xilinx. Necesito que pmod i / o esté en 1.8v, así que estoy usando LVCMOS18 IOSTANDARD.

Puede encontrar todos los IOSTANDARD disponibles para Spartan-3E en este documento .

Cuando intento compilar mi proyecto, siempre se produce un error en la fase Place & Route que dice:

ERROR:Place:864 - Incompatible IOB's are locked to the same bank 0
   Conflicting IO Standards are:
   IO Standard 1: Name = LVCMOS25, VREF = NR, VCCO = 2.50, TERM = NONE, DIR = INPUT, DRIVE_STR = NR
   List of locked IOB's:
    mclk
ERROR:Place:864 - Incompatible IOB's are locked to the same bank 3
   Conflicting IO Standards are:
   IO Standard 1: Name = LVCMOS25, VREF = NR, VCCO = 2.50, TERM = NONE, DIR = OUTPUT, DRIVE_STR = NR
   List of locked IOB's:
    LEDs<7>

He investigado ese error y creo que significa que hay diferentes IOSTANDARD en el mismo banco. Los pines que establecí directamente están en el banco 1, pero los conflictos están en el banco 0 y el banco 3. Cuando quito el IOSTANDARD del pmod i / o, se compila correctamente, pero esos pines no son 1.8v en ese momento.

Mi archivo de restricciones se ve así:

# clock pin for Basys2 Board
NET "mclk" LOC = "B8" ; # Bank = 0, Signal name = MCLK
NET "mclk" CLOCK_DEDICATED_ROUTE = FALSE;

# Pin assignment for LEDs
NET "LEDs<7>" LOC = "G1" ; # Bank = 3, Signal name = LD7
NET "LEDs<6>" LOC = "P4" ; # Bank = 2, Signal name = LD6
NET "LEDs<5>" LOC = "N4" ;  # Bank = 2, Signal name = LD5
NET "LEDs<4>" LOC = "N5" ;  # Bank = 2, Signal name = LD4
NET "LEDs<3>" LOC = "P6" ; # Bank = 2, Signal name = LD3
NET "LEDs<2>" LOC = "P7" ; # Bank = 3, Signal name = LD2
NET "LEDs<1>" LOC = "M11" ; # Bank = 2, Signal name = LD1
NET "LEDs<0>" LOC = "M5" ;  # Bank = 2, Signal name = LD0

# Loop Back only tested signals
NET "spi_si" LOC = "B2" | DRIVE = 2 | IOSTANDARD = LVCMOS18 | PULLDOWN ; # Bank = 1, Signal name = JA1
NET "spi_so" LOC = "A3" | DRIVE = 2 | IOSTANDARD = LVCMOS18 | PULLDOWN ; # Bank = 1, Signal name = JA2
NET "spi_cs" LOC = "J3" | DRIVE = 2 | IOSTANDARD = LVCMOS18 | PULLDOWN ; # Bank = 1, Signal name = JA3
NET "spi_sck" LOC = "B5" | DRIVE = 2 | IOSTANDARD = LVCMOS18 | PULLDOWN ; # Bank = 1, Signal name = JA4


NET "sw0" LOC = "P11";  # Bank = 2, Signal name = SW0

¿Cómo soluciono estos conflictos?

El Basys2 tiene el paquete CP132. Aquí está el diagrama de chip y el esquema del banco:

    
pregunta MLM

3 respuestas

3

Como supuso, recibirá errores cuando tenga estándares de IO incompatibles en el mismo banco. Lo mejor es saber exactamente cómo funciona esto, porque las herramientas con gusto te darán un archivo de bits que terminará quemando tu FPGA debido a una IO incompatible.

Como ha publicado anteriormente, podemos consultar la hoja de datos de Xilinx para la familia de dispositivos, DS312. Los IOSTANDARD admitidos son establecidos por el VCCO de un banco determinado. Observe que las entradas de entrada y solo se admiten cuando el número en IOSTANDARD coincide con el voltaje; La entrada es compatible para cualquier cosa igual o menor.

AhoramiralaúltimapáginadelesquemadeBasys2.

Parece que todos los VCCO están conectados a 3.3 voltios. Esto significa que puede hacer la entrada / salida LVCMOS33, y todas las demás entradas LVCMOS. No puede hacer la salida LVCMOS18 que le gustaría hacer. Si el UCF se configuró para LVCMOS33 en todos los otros pines, las herramientas reconocerían la imposibilidad de lo que está tratando de hacer y darían un error. En su estado actual, los IOSTANDARD en la UCF están en blanco, lo que por defecto es LVCMOS25, por lo que las herramientas detectan una falta de coincidencia.

Puede que se esté preguntando por qué Diligent configuró su UCF de la manera en que lo hicieron, ya que todo está predeterminado en 2.5 voltios cuando la placa es en realidad 3.3. No lo sé. El punto es que el FPGA acepta configuraciones de pin sin queja, siempre que las configuraciones sean consistentes dentro del banco; Depende de usted asegurarse de que la tensión externa coincida. Por lo tanto, podría "arreglar" su problema configurando un banco completo en LVCMOS18, pero entonces probablemente freiría su dispositivo SPI con 3.3 voltios.

A mi modo de ver, tienes varias opciones.

  1. Cirugía grave en el tablero Basys2, cambiando los VCCO de manera apropiada. Probablemente no vale la pena.

  2. Circuito de cambio de nivel externo. Puede leer la entrada de serie muy bien, pero las otras señales SPI deben cambiarse hacia abajo. Puede hacer esto con algo como un chip lógico de la serie 74LVC, algunos FET de serie o solo divisores de resistencia.

  3. Resistencias limitadoras de corriente. Este método se basa en el diodo de sujeción en el dispositivo objetivo para limitar el voltaje, y la resistencia limita la corriente a un nivel seguro. Hay resistencias a los pines PMOD, pero probablemente no son suficientes. Haga la diligencia debida si elige esta opción.

respondido por el mng
2

Para empezar, tienes algunos errores en tus asignaciones de pin.

LEDs<2>, Pin P7, is bank 2 and not 3.
spi_si, pin B2, is Bank 3 and not 1.
spi_so, pin A3, is Bank 0 and not 1.
spi_cs, pin J3, is Bank 3 and not 1.
spi_sclk, pin B5, is Bank 0 and not 1.

Nunca encontré un problema con el software que rige por defecto a 2.5v, como dijo Brian Carlton. Puede ser un problema y simplemente no me he topado con ese problema.

    
respondido por el user3624
1

2.5 V es el valor predeterminado. Si no define el voltaje, eso es lo que utiliza el software.

Los voltajes múltiples en un banco no se pueden arreglar. Debe utilizar el mismo voltaje de E / S para todos los pines en un banco. También todos los pines de alimentación de E / S para un banco están conectados entre sí.

    
respondido por el Brian Carlton

Lea otras preguntas en las etiquetas