Dominando Instanciação com Port Map em VHDL: Guia Prático
Em VHDL, um módulo é uma unidade autocontida que se comunica com o mundo exterior através de sua entidade. A cláusula port map de uma instanciação conecta as portas formais da entidade a sinais no design circundante.
Módulos, Entidades e Testbenches
Quando desenvolvemos para FPGA ou ASIC, a lógica de design vive em módulos que têm portas de entrada e saída claramente definidas. Um módulo que não tem portas é um testbench — um wrapper de simulação que alimenta estímulos ao device under test (DUT) mas nunca aparece em um chip físico.
Em posts anteriores, escrevemos todo o VHDL em um único arquivo, o que é conveniente para experimentos rápidos mas não adequado para designs de produção. Separar o DUT de seu testbench melhora legibilidade, reutilização e torna a hierarquia de simulação clara.
Convenções Comuns de Nomenclatura
Muitas equipes seguem um esquema simples: o arquivo de design é MyModule.vhd, enquanto seu testbench é MyModuleTb.vhd. A arquitetura do DUT é frequentemente chamada rtl (register-transfer level), e a arquitetura do testbench é nomeada sim. Esta convenção instantaneamente diz se um arquivo é destinado para síntese ou para simulação.
Sintaxe VHDL para Instanciação com Port Map
Defina a interface de um módulo com a palavra-chave entity:
entity <entity_name> is port( <entity_signal_name> : in|out|inout <signal_type>; ... ); end entity;
Instancie o módulo em outro arquivo VHDL com um port map explícito:
<label> : entity <library_name>.<entity_name>(<architecture_name>) port map( <entity_signal_name> => <local_signal_name>, ... );
O <label> aparece na hierarquia do simulador, <library_name> padrão é work, e toda porta formal deve ser vinculada a um sinal local.
Exemplo Prático: MUX 4-para-1
Abaixo está um par completo de testbench e DUT que implementa um multiplexador 4-para-1 usando sinais unsigned de 8 bits.
Código do Testbench
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_PortMapTb is end entity; architecture sim of T15_PortMapTb is signal Sig1 : unsigned(7 downto 0) := x"AA"; signal Sig2 : unsigned(7 downto 0) := x"BB"; signal Sig3 : unsigned(7 downto 0) := x"CC"; signal Sig4 : unsigned(7 downto 0) := x"DD"; signal Sel : unsigned(1 downto 0) := (others => '0'); signal Output : unsigned(7 downto 0); begin -- Instanciar o MUX com arquitetura rtl i_Mux1 : entity work.T15_Mux(rtl) port map( Sel => Sel, Sig1 => Sig1, Sig2 => Sig2, Sig3 => Sig3, Sig4 => Sig4, Output => Output); -- Processo de estímulo process is begin wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= "UU"; wait; end process; end architecture;
Código do Módulo
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_Mux is port( -- Inputs Sig1 : in unsigned(7 downto 0); Sig2 : in unsigned(7 downto 0); Sig3 : in unsigned(7 downto 0); Sig4 : in unsigned(7 downto 0); Sel : in unsigned(1 downto 0); -- Output Output : out unsigned(7 downto 0) ); end entity; architecture rtl of T15_Mux is begin process(Sel, Sig1, Sig2, Sig3, Sig4) is begin case Sel is when "00" => Output <= Sig1; when "01" => Output <= Sig2; when "10" => Output <= Sig3; when "11" => Output <= Sig4; when others => Output <= (others => 'X'); end case; end process; end architecture;
Análise da Forma de Onda
Rodar o testbench no ModelSim produz uma forma de onda que corresponde ao comportamento esperado do MUX. O snapshot da forma de onda abaixo confirma que o DUT comuta corretamente entre os quatro sinais de entrada conforme o sinal Sel muda.
Principais Conclusões
- Módulos expõem entradas e saídas via portas de sua
entity. - Testbenches não contêm portas e são exclusivamente para simulação.
- Mapeamento de porta explícito é a maneira mais transparente de instanciar um módulo VHDL.
- Nomenclatura consistente (ex:
rtlpara DUT,simpara testbench) melhora legibilidade entre projetos.
Continue para o próximo tutorial para insights mais profundos sobre padrões de design VHDL.
VHDL
- Como o Molibdênio Molda a Indústria Moderna: Usos, Benefícios e Dinâmica de Fornecimento
- Criando Listas de Strings em VHDL: Boas Práticas e Exemplo
- Criando um Testbench Dirigido por Tcl para um Módulo Code-Lock VHDL
- Finalizando Graciosamente uma Simulação de Testbench VHDL
- Implementando um Controlador PWM em VHDL: Projeto, Simulação e Demo em FPGA
- Gerando Números Aleatórios em VHDL: De Uniforme a OSVVM
- Aproveitando Procedimentos In-Process para Design de FSM em VHDL Mais Limpo
- Usando Funções Impuras em VHDL: Melhorando Legibilidade e Manutenibilidade de FSM
- Dominando Funções VHDL: Guia Prático para Design Eficiente
- Dominando Técnicas de Retificadora de Ferramentas e Cortadores: Guia Prático