Inout Ports
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 32 de 90.
Uma porta inout é uma porta bidirecional que pode enviar e receber sinais. Ela pode atuar como uma entrada ou uma saída em momentos diferentes. A maioria das portas é input (os dados fluem para dentro) ou output (os dados fluem para fora). Uma porta inout pode fazer as duas coisas. Ela pode enviar dados para fora ou receber dados, dependendo da situação.
Pense nisso como uma via de mão dupla em vez de uma via de mão única.
Os port inout são usados para:
- bus compartilhados: vários dispositivos conectados aos mesmos fios
- bus de dados de memória: os dados podem ser read ou gravados
- bidirectional communication: I2C, SPI etc.
Apenas um dispositivo drives o bus por vez. Os outros dispositivos devem estar no estado de alta impedância (Z).
Declarando uma porta Inout
inout [7:0] data_bus; // barramento bidirecional de 8 bits
inout ready; // sinal bidirecional de um bitComo o Inout funciona
Uma porta inout requer um sinal de controle para decidir se está atuando como input ou output:
module bidir (
inout [7:0] bus,
input [7:0] data_out,
input enable,
output [7:0] data_in
);
assign bus = (enable) ? data_out : 8'bZ; // Drive bus when enabled, else Z
assign data_in = bus; // Always read the bus
endmodule- Quando
enable = 1, omoduledrives obus(modooutput) - Quando
enable = 0, omodulerelease obus(modoinput, high-Z)
Regras importantes para Inout
| Regra | Por quê |
|---|---|
Deve ser declarado como wire | Cannot ser reg |
| Cannot ser read e escrito ao mesmo tempo | Criaria conflito (X) |
Use Z para liberar o bus | Permite que outros dispositivos o controlem |
| Apenas um controlador por vez | Evita a contenção do bus |
Inout vs Input vs Output
| Tipo de port | Direção | Pode Drive | Pode Read |
|---|---|---|---|
input | Uma via (somente entrada) | Não | Sim |
output | Uma via (somente saída) | Sim | Não |
inout | Duas vias (ambas) | Sim (when enabled) | Sim (always) |
Erro comum
// WRONG: Não é possível atribuir a inout dentro de um bloco always
always @(posedge clk) begin
data_bus <= something; // Erro! Use assign com condição
end
// CORRECT: Use assign com condição de enable
assign data_bus = (enable) ? something : 8'bZ;Desafio
Adicione a porta inout ausente e as instruções assign para fazer esse buffer bidirecional funcionar.
O que fazer:
- Adicione uma porta
inoutde 8 bits chamadaio_bus - Adicione uma instrução
assignque acioneio_buscomsend_valuequandosend_enablefor 1; caso contrário,Z - Adicione uma instrução
assignque leiaio_busemreceive_value
Experimente você mesmo
module bidir_buffer (
// Tarefa 1: Adicione uma porta inout de 8 bits chamada io_bus aqui
input [7:0] send_value,
input send_enable,
output [7:0] receive_value
);
// Tarefa 2: Adicione uma instrução assign que dirige io_bus com send_value quando send_enable for 1, caso contrário Z
// Tarefa 3: Adicione uma instrução assign que lê io_bus em receive_value
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online