VHDL实例化实体时如何直接提取out端口部分位无需连接全宽信号?
解决方案
可以实现无需定义全位宽中间信号的需求,只需使用VHDL-2008标准支持的语法即可,操作步骤如下:
- 首先在Vivado项目设置中,将VHDL语言版本切换为VHDL-2008,旧版VHDL标准不支持out端口的切片关联操作
- 修改实例化代码,将out端口所有位全部显式关联:需要用到的位接目标信号,不需要的位直接关联
open即可,示例代码如下:
WHATEVER: entity work.example_entity port map( o_port(15 downto 4) => s_a, -- 剩余未使用的端口位全部显式设为开放关联 o_port(31 downto 16) => open, o_port(3 downto 0) => open );
语法差异说明
你遇到的in端口可拆分关联、out端口默认报错的差异,是VHDL旧标准的语法限制:
in端口属于输入,语法要求只要给所有位都提供了驱动源即可拆分赋值;而out端口属于输出,旧标准要求必须整体关联,要么全接信号要么全接open。VHDL-2008放开了这个限制,只要显式覆盖端口的所有位,不管是接信号还是设为open,都可以正常编译。
如果使用的Vivado版本过老不支持VHDL-2008,才需要定义全位宽的中间信号接收out端口输出,再从中间信号中提取目标位段。
内容的提问来源于stack exchange,提问作者aquaticapetheory
相关产品推荐
相关产品推荐

