首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我使用to_integer访问常量数组时,Synplify会修剪我的寄存器。(VHDL)

当我使用to_integer访问常量数组时,Synplify会修剪我的寄存器。(VHDL)
EN

Stack Overflow用户
提问于 2013-05-16 04:22:49
回答 1查看 1.5K关注 0票数 1
代码语言:javascript
复制
    Data_Out_SDa : process (SCl, IntReset) is
        variable IntSDa : std_logic;        -- Internal Sda
        begin  -- process Data_Out_SDa
        if IntReset = '0' then              -- asynchronous reset (active high)
           IntSDa := 'Z';
        elsif SCl'event and SCl = '0' then  -- falling clock edge
              IntSDa := DataBuffer(to_integer(unsigned(AddrReg)));
        end if;
        SDa <= IntSDa;
    end process Data_Out_SDa;

DataBuffer是一个121位常量std_logic_vector。Sda是一个输出端口

代码可以很好地合成。但我收到修剪寄存器IntSda (CL169)和将寄存器位IntSda优化为常量0 (Cl190)的警告。

由于某些原因,合成工具解释IntSda将始终为0。注意: IntReset是一个输入。AddrReg是计数器的输出,该计数器在SCl的时钟上升沿改变值。该计数器合成良好,我已经在FPGA上进行了测试,并使用逻辑分析仪查看了输出。我不知道为什么会发生这样的事情。我可以设置keep保留,但我认为这是一种权宜之计,无法替代理解根本原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-16 20:52:37

那样你就很难把Zs弄出来了。合成器可能将它们视为‘0’:)

我建议您在DataBuffer数组中使用1和0,然后在进程外驱动SDa,如下所示:

代码语言:javascript
复制
SDa <= '0' when IntSDa = '0' else 'Z';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16574294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档