连接到多个驱动程序或错误的同步描述的问题

时间:2017-11-26 15:12:29

标签: vhdl xilinx

我只是想让我的观点(SQ_X2,SQ_Y2)在2D平面上移动(在TFT-LCD中)。 以下是我的代码的一部分。

如果我按下PSW(按钮开关),并且点在x或y中移动5。并且有问题,当我在一个流程语句中合并下面的代码时,会出现错误"那个错误的同步描述"。 但为了避免这个问题,我声明了4个Process语句,还有另一个错误,即Signal SQ_X2或SQ_Y2连接了多个驱动程序。 我现在处于两难境地..请帮助我,我会买一个披萨

PROCESS (PSW(3))
BEGIN
    IF (rising_edge(PSW(3))) then
        SQ_Y2 <= SQ_Y2 - std_logic_vector(to_unsigned(5,10));
    END IF;
END PROCESS;

PROCESS (PSW(2))
BEGIN
    IF (rising_edge(PSW(2))) then
        SQ_Y2 <= SQ_Y2 + std_logic_vector(to_unsigned(5,10));
    END IF;
END PROCESS;

PROCESS (PSW(1))
BEGIN
    IF (rising_edge(PSW(1))) then
        SQ_X2 <= SQ_X2 - std_logic_vector(to_unsigned(5,10));
    END IF;
END PROCESS;

PROCESS (PSW(0))
BEGIN
    IF (rising_edge(PSW(0))) then
        SQ_X2 <= SQ_X2 + std_logic_vector(to_unsigned(5,10));
    END IF;
END PROCESS;

1 个答案:

答案 0 :(得分:1)

您无法在多个进程中分配一个信号(更准确地说,您可以通过多种方式执行此操作,但您不希望在此处执行此操作)。此外,一个进程只能包含一个if rising_edge() then语句,因为无法合成对多个上升沿做出反应的硬件......

您需要做的是了解同步设计,为系统添加时钟并在一个过程中完成所有操作。您可能需要查看this tutorial,尤其是顺序逻辑设计部分。