Forum Discussion
Well.. I may have resolved my issue. If I have, I don't think the error message was very helpful in this case. The error appears to be caused by this line, which neither mentions dataH or ioData:
iDataCopy = iData; // Caused by this
dataH = iDataCopy[ 15 : 8 ];
I know that ioData is connected to iData, so that's one part of the puzzle, but I still don't know why the assignment to dataH from iDataCopy would be a problem??
I've changed the code as follows so that iData is only connected to dataIncoming when the chipSelect is high or HiZ otherwise.
logic [15 : 0 ] dataIncoming = 0; assign dataIncoming = ( chipSelect ) ? iData : 16'bZZZZZZZZZZZZZZZZ; .. //iDataCopy = iData; // This will give "multiple drivers due to the non-tri-state driver" error iDataCopy = dataIncoming; dataH = iDataCopy[ 15 : 8 ];
So why did Quartus give me the error? Is is because the incoming iData/ioData wire was driving iDataCopy and another register in another module? If so, why does the error refer to dataH and not iDataCopy?
Update: No, the above didn't work either..
Error (13076): The node "VGAController:vgaController|dataH" has multiple drivers due to the conflicting nodes "dataBus[8]" and "SDRAMController8Bit:sdramController|ioData[8]"
Why do I have conflicting nodes? Is this because VGAController takes data from an input wire and SDRAMController uses an inout wire? The dataBus wire is declared as inout in my top module
Google has no results for "multiple drivers due to the conflicting nodes". I'm completely stumped.
- SparkyNZ5 years ago
Contributor
I'm further confused again.. I now have a problem in my Top level module:
// Shared buses wire [15 : 0 ] dataBus; // Registers to be switched onto the bus logic [15 : 0 ] dataRAM; //bit[ 15:0 ] dataVal; logic[ 15:0 ] dataVal; // logic or bit? Made no difference .. assign dataBus = ( chipSelectRAM ) ? dataRAM : 16'bZZZZZZZZZZZZZZZZ; .. always_ff @( posedge clk ) .. dataVal = dataBus; // Error hereError (13076): The node "dataVal" has multiple drivers due to the non-tri-state driver "SDRAMController8Bit:sdramController|ioData[8]"
dataBus is connected to sdramController's ioData wire
dataRAM was being used for outgoing data.
So I modified the code further, renaming dataRAM to dataOut and adding a dataIn and now it compiles:
logic [15 : 0 ] dataOut; logic [15 : 0 ] dataIn; assign dataBus = ( chipSelectRAM ) ? dataOut : 16'bZZZZZZZZZZZZZZZZ; // Do I need to include iSDRAMWriteRequest here?? assign dataIn = ( chipSelectRAM ) ? dataBus : 16'bZZZZZZZZZZZZZZZZ; // Do I need to include ~iSDRAMWriteRequest here??Question: If using dataBus for incoming and outgoing data, do I always need to provide a separate register for incoming and outgoing as I have done above?
- KhaiChein_Y_Intel5 years ago
Regular Contributor
Hi,
This link explains the cause of Error (13076)
If it doesn't help, kindly share the design QAR for investigation. To create the QAR file, click on Project > Archive Project > Archive.
Thanks
Best regards,
KhaiY
- SparkyNZ5 years ago
Contributor
Hi @KhaiChein_Y_Intel . I've just shared my project with @KennyTan_Altera on my other post about the "due to conflicting nodes" error. It may be easier to see where I'm completely going wrong with that.. and perhaps you guys can work together so you don't solve the same problem twice. Sorry about that.
See here: