You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lattice ICE5LP下VHDL实例化SB_IO_OD出现VHDL-1358错误求助

Lattice ICE5LP RGB引脚作普通输入的VHDL综合错误分析

问题背景

使用Lattice Ultra ICE5LP器件,尝试将某RGB引脚作为普通输入端口in1_i,通过VHDL实例化SB_IO_OD模块实现,但Lattice综合工具报错:

in1_i with mode 'in' cannot be updated. VHDL-1358

相关代码片段:

library sb_ice40_components_syn;
use sb_ice40_components_syn.components.all;

entity design is 
  port (
  ...
    add_i       : in    std_logic_vector(3 downto 0);
    in1_i       : in    std_logic;
    dat_b       : inout std_logic_vector(7 downto 0);
  ...
  );
end design;

architecture rtl_design of design is

  signal sig1_s : std_logic;

....

  PINA6: SB_IO_OD     
    generic map ( NEG_TRIGGER => '0',
                  PIN_TYPE    => "001001" )
    port map ( 
               DIN0 => sig1_s,  -- 内部处理信号
               OUTPUTENABLE => '0',
               PACKAGEPIN  => in1_i  
               );

错误原因

核心是端口模式与模块需求不匹配:

  • 实体中in1_i被声明为in模式,VHDL中该模式的端口是只读属性,只能作为外部信号输入到内部逻辑,不允许被内部模块驱动或修改。
  • SB_IO_OD是Lattice的IO缓冲模块,其PACKAGEPIN端口对应芯片物理引脚,本质是双向可访问的(即使只用做输入,模块也需要通过这个端口完成外部信号的读取,而in模式端口无法满足这种底层关联需求)。将in模式端口连接到PACKAGEPIN,相当于试图让内部模块“更新”只读端口,违反了VHDL的端口模式规则,因此触发VHDL-1358错误。

解决方法

  1. 修改端口模式:将实体中in1_i的模式改为inout(即使只用做输入,inout模式才能满足SB_IO_OD模块对引脚的底层访问需求):
    in1_i       : inout    std_logic;
    
  2. 保持输出使能配置:维持SB_IO_OD的OUTPUTENABLE为'0',这样模块会保持输入方向,不会驱动外部引脚,完全符合将其作为普通输入的需求。

内容的提问来源于stack exchange,提问作者Renato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:33:45