您的位置:首页 > 其它

VHDL学习:利用Quartus自带库3步快速完成状态机

2016-09-23 00:57 260 查看
Quartus自带库里面有各种编程语言的模板,供开发者参考。

初学者利用VHDL实现状态机比较生疏的情况下,可以调出该模板,适当修改即可。

本文将描述如何利用Quartus自带库调出状态机模板,并适当修改完成状态机。

=========================================================

step one

新建VHDL文档,右键选择Insert Template



step two

在列表中选择状态机,点击Insert。这里以Mearly型状态机为例



step three

修改具体代码。

生成的代码如下:

library ieee;
use ieee.std_logic_1164.all;

-- 在这里修改器件名称/输入输出
entity four_state_mealy_state_machine is

port
(
clk      : in   std_logic;
input    : in   std_logic;
reset    : in   std_logic;
output   : out  std_logic_vector(1 downto 0)
);

end entity;

architecture rtl of four_state_mealy_state_machine is

-- 在这里修改状态名称 可以直接利用replace进行替换
type state_type is (s0, s1, s2, s3);
signal state : state_type;

begin

-- 在clk的边沿跟新状态机的状态
-- 在这里修改跳转条件
process (clk, reset)
begin

if reset = '1' then
state <= s0;

elsif (rising_edge(clk)) then

-- state为现在的状态,下面的list为现态分别为s0,s1,s2,s3跳转到其他状态的条件
case state is
when s0=>
-- 当现态为s0,跳转到其他状态的条件
-- 列出s0所有可能出现的状态转移,在这里用if语句描述即可
-- 其他状态类似
if input = '1' then
state <= s1;
else
state <= s0;
end if;
......
end case;

end if;
end process;

-- 由于我们选的是Mearly型状态机,根据现态输出
-- 在这里修改不同的状态的输出
process (state, input)
begin
case state is
-- 若现在状态为s0 且输入为1 则输出00
-- 这里可以修改为其他的条件,描述现态为s0时需要处理的内容
-- 其他状态类似
when s0=>
if input = '1' then
output <= "00";
else
output <= "01";
end if;
......
end case;
end process;

end rtl;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐