掌握VHDL端口映射实例化实战指南
在VHDL中,模块是通过其实体与外部世界通信的自包含单元。实例化的端口映射子句将实体的形式端口连接到周围设计中的信号。
模块、实体与测试平台
为FPGA或ASIC开发时,设计逻辑驻留在具有明确定义输入输出端口的模块中。无端口的模块是测试平台——仿真包装器,向被测器件(DUT)提供激励但从不出现在物理芯片上。
早期帖子将所有VHDL写在单文件,便于快速实验但不适合生产设计。分离DUT与测试平台提升可读性、复用性,使仿真层次清晰。
常见命名约定
许多团队遵循简单方案:设计文件MyModule.vhd,测试平台MyModuleTb.vhd。DUT架构常称rtl(寄存器传输级),测试平台架构称sim。此约定瞬间告知文件是用于综合还是仿真。
VHDL端口映射实例化语法
用entity关键字定义模块接口:
entity <entity_name> is port( <entity_signal_name> : in|out|inout <signal_type>; ... ); end entity;
在另一VHDL文件中用显式端口映射实例化模块:
<label> : entity <library_name>.<entity_name>(<architecture_name>) port map( <entity_signal_name> => <local_signal_name>, ... );
<label>出现在仿真器层次中,<library_name>默认work,每个形式端口必须绑定到本地信号。
实战示例:4选1多路选择器
下面是实现无符号8位4选1多路选择器的完整测试平台与DUT对。
测试平台代码
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 -- Instantiate the MUX with architecture rtl i_Mux1 : entity work.T15_Mux(rtl) port map( Sel => Sel, Sig1 => Sig1, Sig2 => Sig2, Sig3 => Sig3, Sig4 => Sig4, Output => Output); -- Stimulus process 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;
模块代码
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;
波形分析
在ModelSim运行测试平台产生波形,匹配MUX预期行为。下方波形快照确认DUT随Sel信号变化正确在四个输入信号间切换。
关键要点
- 模块通过
entity端口暴露输入输出。 - 测试平台无端口,仅用于仿真。
- 显式端口映射是实例化VHDL模块最透明方式。
- 一致命名(如DUT用
rtl、测试平台用sim)提升项目可读性。
进入下一教程深入了解VHDL设计模式。
VHDL