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

VHDL中的简单标志[错误10820],vhdl,fpga,intel-fpga,Vhdl,Fpga,Intel Fpga,我想用VHDL设计一个IIC嗅探器,我在一个非常基本的点上挣扎 为了保持它的“连续性”,我想在实体执行的每个部分之后设置一个标志 现在我想在开始条件上设置一个标志(SCL=SDA上的高和上升沿) 当我按下复位按钮时,应在停止条件下(SCL=SDA上的高和下降沿)重置此标志 我现在的问题是,我无法通过START命令设置标志,并通过STOP命令重置标志 我应该如何获得这一时期的国旗 entity scltest is port( scl, sda: in std_logic; s

我想用VHDL设计一个IIC嗅探器,我在一个非常基本的点上挣扎

为了保持它的“连续性”,我想在实体执行的每个部分之后设置一个标志

现在我想在开始条件上设置一个标志(SCL=SDA上的高和上升沿) 当我按下复位按钮时,应在停止条件下(SCL=SDA上的高和下降沿)重置此标志

我现在的问题是,我无法通过START命令设置标志,并通过STOP命令重置标志

我应该如何获得这一时期的国旗

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;
实体测试是
端口(scl,sda:std_逻辑中;
scled、SDLED、标志:输出标准逻辑
);
结束SCL试验;
scltest的架构测试是
开始

scled您的基本想法似乎是,您希望对总线时钟执行所有逻辑。然而,您的设计不应该完全依赖于总线时钟——特别是因为I²C非常慢

您需要一个运行中的系统,该系统可以执行其他任务(如USB、USART…),向主机系统(PC、SoC…)报告I²C总线的状态

为此,您需要对SCL和SDA进行采样,并让一个由系统时钟计时的内核执行上升/下降沿、总线状态等的实际分析。这样,您的所有逻辑将与系统时钟同步

根据您的开发板,可能存在已准备好主机端的示例设计,您只需将模块“插入”到正确的位置即可。IMHO1是Digilent斯巴达板的一个很好的起点,因为主机端代码可以通过工具和编程API免费获得


1我与Digilent没有任何关系。

谢谢您的回答。这是否意味着我将自己实现一个“边缘检测器”?是的,这就是总线嗅探器将包含的内容。