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保留,但我认为这是一种权宜之计,无法替代理解根本原因。
发布于 2013-05-16 20:52:37
那样你就很难把Zs弄出来了。合成器可能将它们视为‘0’:)
我建议您在DataBuffer数组中使用1和0,然后在进程外驱动SDa,如下所示:
SDa <= '0' when IntSDa = '0' else 'Z';https://stackoverflow.com/questions/16574294
复制相似问题