本帖最后由 fpgaw 于 2010-11-18 16:16 编辑
以前没有接收过这方面的系统训练,不太确定自己想的对不对。
我想实现对序列 11011进行检测,
绘制的状态转换图见附件
VHDL代码如后所示
该代码在QuartusII中综合后得到的RTL图与我这里设计的似乎不一样
请高手指教
谢谢
library ieee;
use ieee.std_logic_1164.all;
entity checksequ is
port(clk : in std_logic;
rst : in std_logic;
din : in std_logic;
dout : out std_logic);
end checksequ;
architecture behav of checksequ is
type state is (S5, S4,S3, S2, S1, S0);
signal CurState : state;
signal NextState: state;
BEGIN
process( clk, rst)
begin
if rst = '1' then
CurState <= S0;
elsif clk'event and clk = '1' then
CurState <= NextState;
end if;
end process;
PROCESS (clk, rst)
BEGIN
IF clk'EVENT AND clk = '1' THEN
CASE CurState IS
WHEN S0 =>
IF din = '1'THEN
NextState <= S1;
dout <= '0';
ELSE
NextState <= S0;
dout <= '0';
END IF;
WHEN S1 =>
IF din = '1'THEN
NextState <= S2;
dout <= '0';
ELSE
NextState <= S0;
dout <= '0';
END IF;
WHEN S2 =>
IF din = '0'THEN
NextState <= S3;
dout <= '0';
ELSE
NextState <= S2;
dout <= '0';
END IF;
WHEN S3 =>
IF din = '1'THEN
NextState <= S4;
dout <= '0';
ELSE
NextState <= S0;
dout <= '0';
END IF;
WHEN S4 =>
IF din = '1'THEN
NextState <= S5;
dout <= '1';
ELSE
NextState <= S0;
dout <= '0';
END IF;
WHEN S5 =>
IF din = '1'THEN
NextState <= S5;
dout <= '0';
ELSE
NextState <= S3;
dout <= '0';
END IF;
END CASE;
END IF;
END PROCESS;
END behav; |