【发布时间】: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