Solucione los estándares de E/S en conflicto

Estoy usando la placa FPGA Basys 2 Spartan-3E con Xilinx. Necesito que el 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 .

Cada vez que intento compilar mi proyecto, siempre se produce un error en la Place & Routefase 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>

Investigué un poco sobre ese error y creo que significa que hay diferentes IOSTANDARD en el mismo banco. Los pines que configuro directamente están en el banco 1, pero los conflictos están en el banco 0 y el banco 3. Cuando elimino el IOSTANDARD del pmod i/o, se compila con éxito, pero esos pines no son 1.8v entonces.

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 del chip y el esquema del banco:Esquema bancario Basys 2 y paquete CP132

Respuestas (3)

Como ha supuesto, obtiene errores cuando tiene estándares IO incompatibles en el mismo banco. Es mejor saber exactamente cómo funciona esto, porque las herramientas con gusto le darán un archivo de bits que termina quemando su FPGA debido a una E/S incompatible.

Como publicó anteriormente, podemos consultar la hoja de datos de Xilinx para la familia de dispositivos, DS312. Los IOSTANDARD admitidos los establece el VCCO de un banco determinado. Tenga en cuenta que la entrada y la salida solo se admiten cuando el número en IOSTANDARD coincide con el voltaje; la entrada es compatible con cualquier valor igual o inferior.

Spartan 3E IOS ESTÁNDAR

Ahora mire la última página del esquema de Basys2.

Energía Basys2 FPGA

Parece que todos los VCCO están conectados a 3,3 voltios. Esto significa que puede hacer 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 demás pines, las herramientas reconocerían la imposibilidad de lo que está tratando de hacer y darían un error. Tal como está, los IOSTANDARD en UCF están en blanco, que por defecto son LVCMOS25, por lo que las herramientas detectan una falta de coincidencia.

Tal vez se pregunte por qué Diligent configuró su UCF de la forma en que lo hizo, ya que todo tiene un valor predeterminado de 2,5 voltios cuando la placa es en realidad de 3,3. No sé. El punto es que la FPGA acepta configuraciones de pines sin quejarse, siempre que las configuraciones sean consistentes dentro del banco; depende de usted asegurarse de que el voltaje externo coincida. Entonces podría "arreglar" su problema configurando un banco completo en LVCMOS18, pero luego probablemente freiría su dispositivo SPI con 3.3 voltios.

A mi modo de ver, tienes varias opciones.

  1. Cirugía grave en la placa Basys2, cambiando los VCCO's adecuadamente. Probablemente no valga la pena.

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

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

¿Cómo se hace para "configurar un banco completo en LVCMOS18"? En este momento, cada pin pmod en JA está configurado en 1.8v pero aún brinda una tolerancia de 3.3v que, según todo lo que leí, pero ese comentario parece el único nivel que ofrece la placa. Tengo algunos chips 74LVC y acabo de conectar uno a mi protoboard, por lo que esta puede ser la única opción. El factor miedo está más presente ahora que sé que las herramientas no me protegen del mundo real. Todavía soy un poco novato cuando uso chips externos y dónde usar resistencias, etc., así que espero que la capa adicional no me haga tropezar.
"No puede hacer la salida LVCMOS18 que le gustaría hacer. Es por eso que las herramientas le dan un error". Es correcto que LVCMOS18 no se puede usar con esta placa tal como está. Pero eso no explica el error. Las herramientas no saben nada sobre el esquema de la placa. Si solicita LVCMOS18, asumirán que está proporcionando un VCCO adecuado.
"porque las herramientas con gusto le darán un archivo de bits que termina quemando su FPGA debido a IO incompatible" no es estrictamente cierto. No hay daño para el FPGA al seleccionar un estándar de E/S diferente al Vcco para ese banco. La tabla que citó muestra que puede usar un estándar de E / S como entrada con un voltaje Vcco más alto. Cualquier daño a la FPGA sería por aplicar un voltaje a una E/S que exceda las clasificaciones máximas absolutas especificadas en la hoja de datos. Las herramientas no tienen idea de lo que conectas físicamente al chip y, por lo tanto, no pueden ser responsables de "quemar tu FPGA".
@Amoch, sí, tienes razón. Quería dar una advertencia severa, pero fui demasiado lejos. Cuando tenga la oportunidad, le daré otra revisión a todo el asunto.

2,5 V es el valor predeterminado. Si no define el voltaje, eso es lo que usa el software.

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

Para empezar, tiene algunos errores en las asignaciones de pines.

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 predeterminado a 2.5v, como dijo Brian Carlton. Puede ser un problema y simplemente no me he encontrado con ese problema.

Esos comentarios de ucf provienen directamente de la descarga de Digilent .ucf para Basys 2, por lo que no estaba seguro de si eran correctos en primer lugar. Acabo de publicar el esquema de Basys 2 y el paquete CP132 y lo comprobaré dos veces.
Muy bien, esos números de banco son correctos por lo que he mirado. Agregué IOSTANDARD = LVCMOS18 a mlk y LED<7> y se compila, pero la E/S sigue siendo 3.3v. Estoy usando un multímetro y midiendo desde GND en el conector PMOD. Además, no estoy seguro de si hay una forma de cambiar VCC de 3.3v
Debe conectar los pines VCCIO para ese banco a un riel de alimentación apropiado. +3,3 V para LVTTL, +1,8 V para LVCMOS18. De lo contrario, podrían pasar cosas malas.
Como mencionó mng, creo que la única forma de configurar VCCIO es con Frankenstein en el tablero y no sé por dónde empezar con eso... ¿Cómo averiguaste los números bancarios tan rápido? Me tomó un tiempo hacer coincidir el esquema con el chip. Supongo que el cambio de nivel es la única opción sensata. Me pregunto cuál es la mejor opción: el cambio de nivel en las líneas SPI que van al FPGA, o los datos que ingresan al chip SPI (que serían 3.3v que salen del chip SPI). Estoy planeando ejecutar en la especificación de 10 Mhz del chip de expansión de puerto MCP23S17.
Hay un archivo ASCII en el sitio web de Xilinx que contiene toda esa información. Básicamente, cada línea enumera el nombre del pin, el banco, la función, la dirección y el número de pin para una variedad de paquetes. Está destinado a ser leído en varios programas y hojas de cálculo, pero funciona bien para esto. Se llama "Spartan-3E FPGA ASCII Pinouts and Excel Footprints", pero aquí está el enlace: xilinx.com/support/documentation/data_sheets/s3e_pin.zip