Tengo un módulo Verilog para el que quiero verificar su tiempo de forma aislada con respecto al resto del sistema. El problema es que la FPGA tiene un número limitado de pines físicos y mi módulo tiene más bits de entrada que pines físicos, por lo que Quartus II no puede compilar (el instalador se queja de que la FPGA no tiene suficientes pines).
Según tengo entendido, para hacer feliz a Quartus II, necesito algunos pines de entrada de mi módulo como virtuales. Estas son las restricciones en mi .sdc
que he probado:
set_input_delay -clock clk_i 0 [large_bus]
set_instance_assignment -name VIRTUAL_PIN ON -to large_bus
Incluso con esas limitaciones, Quartus II todavía se queja. ¿Cómo puedo hacer una "síntesis ficticia" de mi módulo Verilog para verificar el tiempo?
Altera admite IO virtual y para que funcione, debe asignarles la propiedad VIRTUAL_IO on (como lo ha hecho), pero si estos pines están conectados a alguna señal en su diseño, ya no funcionará.
Consulte este sitio web que describe los pasos necesarios para que esto funcione:
Altera tiene un buen ejemplo en su sitio web con un script que hará que todos los pines sean virtuales. Lo uso mucho en sistemas complejos con muchos módulos para la estimación de tiempos de subsistemas.
load_package flow
proc make_all_pins_virtual {} {
execute_module -tool map
set name_ids [get_names -filter * -node_type pin]
foreach_in_collection name_id $name_ids {
set pin_name [get_name_info -info full_path $name_id]
post_message "Making VIRTUAL_PIN assignment to $pin_name"
set_instance_assignment -to $pin_name -name VIRTUAL_PIN ON
}
export_assignments
}
La forma en que he hecho esto en el pasado es crear un envoltorio con un solo pin de entrada y un solo pin de salida, junto con pines de reloj y reinicio.
Luego conecte un gran registro de desplazamiento hasta el pin de entrada y conecte las entradas reales de su módulo a los bits de ese registro de desplazamiento. Haga lo mismo con sus salidas y un registro de desplazamiento de salida.
De esa manera, solo necesita 4 pines: la funcionalidad de su diseño no será correcta, pero puede obtener información de tiempo.
En Vivado, cuando desea realizar un análisis de módulo, es decir, implementar un módulo en un enfoque ascendente para la estimación de recursos, por ejemplo, puede ejecutar la síntesis con la siguiente opción:
synth_design -mode out_of_context -flatten_hierarchy rebuilt -top <top_module_name> -part <part>
La opción -modo fuera_de_contexto garantiza que la colocación de E/S esté deshabilitada. Permite, por ejemplo, la síntesis de módulos con un número de pines superior a la disponibilidad de pines del dispositivo. En Quartus, ¿establecer la opción de pin virtual es la forma equivalente? ¿O hay una forma más apropiada?
Tuve el problema de que necesitaba volver a ejecutar el mapa en cuarto para aceptar las asignaciones antes de poder ejecutar el instalador. Entonces, un mapa para obtener los nombres de los nodos, establecer las asignaciones de pines, otro mapa para aceptar las asignaciones y luego ejecutar el ajustador:
load_package flow
execute_module -tool map
set name_ids [get_names -filter * -node_type pin]
foreach_in_collection name_id $name_ids {
set pin_name [get_name_info -info full_path $name_id]
post_message "Making VIRTUAL_PIN assignment to $pin_name"
set_instance_assignment -to $pin_name -name VIRTUAL_PIN ON
}
export_assignments
execute_module -tool map
execute_module -tool fit
Aleatorioazul
FarhadA
Aleatorioazul
FarhadA