Vhdl 使用xilinx进行状态转换

Vhdl 使用xilinx进行状态转换,vhdl,xilinx,sequential,digital,Vhdl,Xilinx,Sequential,Digital,我试图用一个非常快的时钟来编写异步数字系统。输入由两个开关和一个允许输入的按钮确定。每个输入确定允许传递到另一个状态。我使用了digilent basys2板的内部时钟B8。我似乎正确地到达了第二个州,但我无法到达其他州。行为模拟给出了预期的结果。这是我的实现, entity states is Port ( X : in STD_LOGIC; Y : in STD_LOGIC; clock : in STD_LOGIC; input : in

我试图用一个非常快的时钟来编写异步数字系统。输入由两个开关和一个允许输入的按钮确定。每个输入确定允许传递到另一个状态。我使用了digilent basys2板的内部时钟B8。我似乎正确地到达了第二个州,但我无法到达其他州。行为模拟给出了预期的结果。这是我的实现,

entity states is
Port ( X : in  STD_LOGIC;
       Y : in  STD_LOGIC;
       clock : in  STD_LOGIC;
       input : in  STD_LOGIC);
end states;

architecture Behavioral of state is
    signal FF : STD_LOGIC_VECTOR (2 downto 0):="000";
begin
process(clock)
begin
    if(rising_edge(clock)) then
        if(input='1') then
            FF(0)<= (((FF(1)) and (FF(2)) and (not X) and Y) or (FF(0)));
            FF(1)<= (((not FF(0)) and (not FF(1)) and (FF(2)) and X and (not      Y));
            FF(2)<= (((not FF(0)) and (not FF(1)) and (not FF(2)) and X and Y)
                or ((not FF(0)) and (FF(1)) and (not FF(2)) and (not X) and (not Y)));
            Z <= (((not FF(0)) and (FF(1)) and (FF(2)) and (not X) and Y) or (FF(0)));
        end if;
      end if;
end process;
end Behavioral;

为什么模拟会给出预期的结果,而在电路板上的测试却没有。谢谢你的帮助

好了,伙计们,我已经解决了这个问题。模拟成功了,但电路板没有成功,因为在模拟中,输入只在上升沿上给出一次。(我可以随时用手操纵时钟并创建上升沿。)但在内部时钟B8中,时钟变化如此之快,因此它只在几秒钟内接受我无限次的输入。为了解决这个问题,我将时钟放入G12,以便我可以用手给时钟(就像在模拟中一样)

没有输出。你如何判断它是否有效?由于没有输出,合成可以删减其他所有内容,因为设计中的任何内容都不会影响任何输出。似乎上面的代码中没有显示z是输出的部分。就像我之前写的一样,我确信我的模拟是正确的,但我无法进入电路板中的其他状态。我检查了我为此设计编写的真值表,并在模拟中给出了结果。您的设计遗漏了几个基本电路,用于准备FSM中使用的输入信号。1) 您需要将所有输入同步到您的工作时钟域2)如果电路板不提供阿片信号,您需要对来自按钮和开关的信号进行去抖动。有关更多信息,请查看电路板文档或电路板原理图文件。3) 如果需要额外的边缘检测,有时输入需要生成选通信号(高达1个周期)。所有GPIO引脚都需要这些步骤。另一点是,Xilinx不会将您的FSM识别为状态机,因为它不是典型的模式。存在语法错误。在分配给FF(1)的rhs表达式中缺少闭合参数,体系结构是状态而不是状态,没有Z的声明。
NET "clock"  LOC = "B8"  ;
NET "input"  LOC = "C11"  ;
NET "X"  LOC = "L3"  ;
NET "Y"  LOC = "P11"  ;