我正在尝试设计一个具有一个输入X和一个输出Z的同步状态机 仅当x没有时,z才为1。 1的mod 3 = 0 甚至没有。 0的 无论如何我准备了我的状态图
我试图在xillinix上测试代码并打印信号以跟踪它 但它没有按照代码中的说法正确地从一个状态跳到另一个状态 任何帮助赞赏 这是链接感谢
的输出library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity machine is
Port ( X : in STD_LOGIC;
clk : in STD_LOGIC;
Z : out STD_LOGIC);
end machine;
architecture Behavioral of machine is
signal state,nextstate : integer range 0 to 5 := 0;
signal flag : integer range 0 to 5 := 0;
begin
--state 0 (even and mod3=0)
--state 1 (odd and mod3=0)
--state 2 (even and mod3=1)
--state 3 (odd and mod3=1)
--state 4 (even and mod3=2)
--state 5 (odd and mod3=2)
sequence:process(CLK)
begin
if rising_edge(CLK) then
report "prevstate"& integer'image(state);
report "x" & STD_LOGIC'image(X);
if X='0' then
case state is
when 0=>
nextstate<= 1;
when 1=>
nextstate<= 0;
when 2=>
nextstate<= 3;
when 3=>
nextstate<= 2;
when 4=>
nextstate<= 5;
when 5=>
nextstate<= 4;
end case;
--if x=1
else
case state is
when 0=>
flag<= 1;
nextstate<= 2;
when 1=>
nextstate<= 3;
when 2=>
nextstate<= 4;
when 3=>
nextstate<= 5;
when 4=>
nextstate<= 0;
when 5=>
nextstate<= 1;
end case;
end if;
-- report "flag"& integer'image(flag);
report "next state"& integer'image(nextstate);
state<=nextstate;
if state=1 then
z<='1';
else
z<='0';
end if;
end if;
end process;
end Behavioral;
答案 0 :(得分:0)
看起来像是一种奇怪的方式来实现你想要的......非常复杂并将两个独立的任务合二为一,这使得很难检查(通过眼睛)一切都是应该的。当你描述问题时,我赞成描述解决方案。
分别跟踪两位信息。下面的一些示例代码,如果不完整,您必须将其合并到一个时钟进程中,并确保完成重置。
有一个'even'标志,每次X为'0'时,都会切换它。确保将其重置为零。
if x = '1' then
even := not even;
end if;
还有一个计数器,每次X为'1'时,递增计数器。如果它变为3,则将其重置为零。并确保它在重置后从零开始!
if x = '1' then
counter := counter + 1;
if counter = 3 then
counter := 0;
end if;
end if;
然后取两者并合并它们以产生输出:
z <= '0';
if counter = 0 and even = '1' then
z <= '1';
end if;
答案 1 :(得分:-1)
嗯,我是VHDL的新手,但我认为有一个大问题。 您尝试使用标准顺序 - '编程'模式来描述硬件! 在描述硬件时,您必须记住,硬件是并发的。
您的FSM不会有预期的行为,因为您没有记住这一点。 例如,下一个状态计算是在一个定时进程中完成的,这没关系, 但是那时应该有状态信号的并发信号分配(在过程之外)。 nextstate信号的新值将不会在同一个过程循环中可用。 它们将在过程完成后分配。 (警告:仅适用于信号, 变量有一些不同的行为!)
我认为一本好的VHDL书会教你基础知识......