Te recomiendo que antecedas tu nombre de usuario de Github:
# malo
module top ( )
# bueno
module tt_um_mattvenn_top ( )
# malo
module tt_um_mattvenn_seven_segment_seconds (
input [100:0] my_bus,
output [3:0] outputs
);
# bueno
module tt_um_mattvenn_seven_segment_seconds (
input wire [7:0] ui_in, // Entradas dedicadas
output wire [7:0] uo_out, // Salidas dedicadas
input wire [7:0] uio_in, // IOs: Ruta de entrada
output wire [7:0] uio_out, // IOs: Ruta de salida
output wire [7:0] uio_oe, // IOs: Ruta de habilitación (activo alto: 0=entrada, 1=salida)
input wire ena, // irá a ALTO cuando el diseño esté habilitado
input wire clk, // señal de reloj
input wire rst_n // reset_n - lógico BAJO para reset
);
Tiny Tapeout es un compromiso - intentamos que sea fácil llegar al ASIC, pero tenemos que hacer limitaciones, como la velocidad de entradas/salidas, la cantidad de entradas/salidas, el tamaño, etc. El archivo de configuración de OpenLane (config.tcl) viene con varias configuraciones específicamente optimizadas para el proceso. Si los cambias, podrías terminar con un diseño que no funciona. ¡Asegúrate de que sabes lo que estás haciendo!
Si quieres ir a lo personalizado, revisa el curso De cero a ASIC (en inglés).
Puede ser muy extraño pasar de la programación al diseño de hardware. Las herramientas de síntesis intentan optimizar tu diseño en términos de área y velocidad.
¿Cómo puedes saber si tu diseño esta siendo optimizado? Piensa en cuánta lógica y flip-flops necesita tu diseño para mantener una estimación aproximada del recuento de celdas. Es normal que Yosys reduzca este número un poco, pero si es la mitad de lo que esperas o menos, quizás valga la pena revisarlo.
Si tienes un buen banco de pruebas, puedes ejecutarlo en el GL verilog y eso te ayudará a asegurarte de que tu diseño sigue funcionando después de la síntesis.
Revisa en el registro de Github Action para la compilación de GDS. Revisa la sección de Yosys de la compilación y busca las advertencias. Algunas comunes incluyen: