2017-05-09 6 views
0

J'essaie de connecter deux broches sur un FPGA Altera en utilisant le verilog.fpga assigner une broche inout à une broche d'entrée dans verilog

Plus précisément, je me connecte une broche inout à une broche input. J'ai l'erreur.

La broche "<nom>" a plusieurs pilotes

L'erreur est expliquée sur ce lien.

Altera description

C'est la solution:

module multi_driver(inout o, input a, b, en); 

    // Input a directly drives the bidir pin w/o a tri-state condition 
    assign o = a; 

    // If en = 1 below, there will be an electrical conflict in the design. 
    // To avoid this possibility, the Quartus II software issues an error 
    assign o = (en) ? b : 1'bz; 

endmodule 

Quelqu'un pourrait-il expliquer ce que la ligne assign o = (en) ? b : 1'bz; fait exactement?

+2

Copie possible de [Opérateur d'interrogation Verilog (?)] (Http://stackoverflow.com/questions/12336139/verilog-question-mark-operator) –

+0

Le code que vous avez mentionné n'est pas une solution, mais un exemple de code incorrect: "Par exemple, la conception suivante est synthétisée de manière incorrecte". – Qiu

Répondre

0

assign o = (en) ? b : 1'bz; est un modèle de verrouillage à trois états pour Verilog. Lorsque en est o port élevé sera sortie et sa valeur sera b. Lorsque en est bas port o sera 1'bz (c'est-à-dire l'état de haute impédance). Un état à haute impédance signifie qu'il prendra la forme de ce qu'il est forcé de sortir du module (c'est-à-dire qu'il est entré). Si vous essayez de forcer un autre signal assign o = a; indépendamment du signal en, il vous avertira que le signal a plusieurs pilotes. Ce n'est que lorsque la broche est en état de haute impédance que vous pouvez connecter un signal à partir du module.