ERROR:Xst:528 - Multi-source in Unit <top> on signal <data_bus<0>>;
this signal is connected to multiple drivers.
Este mensaje le dice que tiene varias salidas conectadas entre sí al mismo tiempo . Debe implementar el multiplexor y tener alguna señal de selección (y, opcionalmente, habilitar la señal si se espera que la salida se triplique, NO en el caso de líneas internas).
Para las líneas bidireccionales, se implementan dos multiplexores, lo que hace que un dispositivo se emita y otro se ingrese con una señal de selección única. Cuando es alta, la comunicación va en una dirección, cuando baja, en otra. Si tiene varios dispositivos en el bus interno, simplemente construye una lógica de selección.
Sin embargo, ¿realmente necesita bus interno bidireccional? ¿Estimó si es efectivo a partir del rendimiento y el uso de recursos?
Sospecho que los pines inout
externos están diseñados para propósitos de economía de pines, por lo tanto, ya son un tipo de optimización de hardware. Al forzar sus partes internas de FPGA / CPLD de la misma forma que el hardware optimizado, probablemente, deshabilite la optimización del compilador Verilog, que puede ser mejor que el esquema de entrada.