【问题标题】:Making state transitions using xilinx使用 xilinx 进行状态转换
【发布时间】:2015-06-02 20:56:17
【问题描述】:

我正在尝试使用非常快的时钟编写异步数字系统。输入由两个开关和一个按钮确定,以允许输入输入。每个输入确定允许传递到另一个状态。我用的是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;

这是董事会的任务,

NET "clock"  LOC = "B8"  ;
NET "input"  LOC = "C11"  ;
NET "X"  LOC = "L3"  ;
NET "Y"  LOC = "P11"  ;

为什么模拟会给出预期的结果,但板上的测试却没有。我会很感激你的帮助。

【问题讨论】:

  • 没有输出。你怎么知道它是否有效?由于没有输出,因此允许综合剔除其他所有内容,因为设计中的任何内容都不会影响任何输出。
  • 似乎显示 z 是输出的部分不在上面的代码中。就像我之前写的那样,我确定我的模拟是正确的,但我无法进入板上的其他状态。我检查了我为这个设计写的真值表,它也给出了仿真结果
  • 您的设计遗漏了几个基本电路来准备输入信号以供 FSM 使用。 1)您需要将所有输入同步到您的工作时钟域 2)如果电路板不提供适当的信号,您需要从按钮中消除信号并切换。检查您的电路板文档或电路板原理图文件以获取更多信息。 3) 有时输入需要生成选通信号(高 1 个周期),如果您需要额外的边缘检测。所有 GPIO 引脚都需要这些步骤。另一点 Xilinx 不会将您的 FSM 识别为状态机,因为它不是典型的模式。
  • 存在语法错误。分配给 FF(1) 的 rhs 表达式中缺少右括号,架构是状态而不是状态,没有 Z 的声明。

标签: vhdl xilinx sequential digital


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多