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

Verilog转VHDL代码报错求助:多时钟边沿致寄存器无法推断

错误原因与修复方案

原Verilog代码功能解析

这段Verilog实现的是一个异步低电平复位的寄存器:

  • 当复位信号iRST为低电平时(!iRST),立即将go_en置0
  • 复位无效时,在iGO的上升沿触发,将go_en置1

错误的VHDL代码问题点

  • 逻辑结构混乱:错误地把falling_edge(iRST)作为外层判断,同时内部重复检查iRST='0',让综合器无法识别正确的异步复位逻辑
  • 多时钟误判:在复位分支内嵌套rising_edge(iGO)的判断,导致综合器认为iRST和iGO都是时钟信号,违反单时钟寄存器的实现规范
  • Latch推断:当复位无效且iGO无上升沿时,go_en没有赋值,综合器会推断出不必要的Latch

修复后的VHDL代码

process (iRST, iGO)
begin
    if iRST = '0' then  -- 异步低电平复位,直接判断电平而非边沿
        go_en <= '0';
    elsif rising_edge(iGO) then  -- 复位无效时,响应iGO的上升沿
        go_en <= '1';
    end if;
end process;

修复说明

  • 敏感列表包含iRST和iGO:异步复位需要将复位信号加入敏感列表,确保复位生效时立即触发逻辑
  • 复位逻辑优先级最高:直接通过电平判断(iRST='0')实现异步复位,而非边沿检测
  • 逻辑分支全覆盖:复位分支之外仅在iGO上升沿更新寄存器值,避免综合器推断Latch

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:42:21