VHDL中的简单标志[错误10820]



我想在VHDL中设计一个IIC嗅探器,我在一个非常基本的时刻挣扎。

要保持"顺序",我想在每个部分执行的每个部分之后设置一个标志。

现在,我想在开始条件上设置一个标志(scl = high& rising_edge在SDA上)该标志应在停止条件(SCL = high& fallow_edge上的SDA上)以及我按下重置按钮时重置。

我现在有一个问题,即我无法获得开始的标志并由停止命令重置。

我应该如何在此期间获得旗帜?

entity scltest is
port(   scl, sda: in std_logic;
        scled, sdaled, flag: out std_logic
        );
end scltest;
architecture test of scltest is
begin 
scled <= scl;
sdaled <= sda;
process(sda)
begin
if (scl = '1' AND rising_edge(sda)) then
flag <= '1';
else
    if (scl = '1' AND falling_edge(sda)) then
    flag <= '0';
    end if;
end if;
end process;
end test;

此代码不起作用,因为:"错误(10820):scltest.vhd(18)的NETLIST错误:无法推断登记为标志,因为其行为取决于多个不同时钟的边缘"

我确实明白了为什么它不起作用,但我想不出可以赋予我相同功能的设计。

预先感谢您。

您的基本想法似乎是您想使用公交时钟进行所有逻辑。但是,您的设计不应完全取决于公共汽车时钟 - 尤其是因为I²C太慢了。

您需要拥有一个可以执行其他任务的运行系统(例如USB,USART ...),向您的主机系统(PC,SOC ...)报告I²C总线的状态。p>为此,您需要同时对SCL和SDA进行采样,并具有系统时钟的核心,执行上升/fallig边缘,公交状态等的实际anaylsis等您的系统时钟。

根据您的开发板,可能存在示例设计,这些设计已经准备就绪,您只需要在正确的位置"插入"模块即可。一个好的起点IMHO 1 将是Digilent的Spartan董事会之一,因为主机侧代码可免费使用工具和编程API。

1 我不以任何方式隶属于Digilent。

最新更新