序列检测器电路的设计(1111序列检测VHDL描述)
程序员文章站
2022-05-30 19:33:12
...
一、“1111序列检测”怎么设计呢?
一共有四个状态
A:没有出现1之前的状态
B:出现一个1的状态
C:出现两个1的状态
D:出现三个1的状态
状态图如下:
RD:回到起始状态
x:输入序列
当RD为0时回到起始状态A;
将RD输入1,输入序列,连续输入4个1时,输出1,可重叠,当输入0时,就回到起始状态A。
二、如何用VHDL语言描述?
1.设计实体(输入输出信号)
代码如下(示例):
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity text1111 is
port( --熟练自己使用缩进是好习惯
clk,x,RD:in std_logic;
z:out std_logic
);
end text1111;
2.结构体的行为描述方式
代码如下(示例):
architecture behavior of text1111 is
type state_type is (A,B,C,D);
signal state:state_type;
begin
process(clk,RD)
begin
if RD='0' then
state<=A;
elsif clk'event and clk='0' then
case state is
when A=>
if x='1' then
state<=B;
end if;
when B=>
if x='1'then
state<=C;
else
state<=A;
end if;
when C=>
if x='1'then
state<=D;
else
state<=A;
end if;
when D=>
if x='0' then
state<=A;
end if;
end case;
end if;
end process;
outout_p:process(state)
begin
case state is
when D=>
if x='1' then
z<='1';
else
z<='0';
end if;
when others=>
z<='0';
end case;
end process;
end behavior;
3.管脚锁定方式及波形仿真图
三、思考
以代码描述的是输入序列可重叠的1111 序列检测器,假如输入的序列不可重叠,那么应该如何改进代码呢?
architecture behavior of text1111 is
type state_type is (A,B,C,D);
signal state:state_type;
begin
process(clk,RD)
begin
if RD='0' then
state<=A;
elsif clk'event and clk='0' then
case state is
when A=>
if x='1' then
state<=B;
end if;
when B=>
if x='1'then
state<=C;
else
state<=A;
end if;
when C=>
if x='1'then
state<=D;
else
state<=A;
end if;
when D=>
if x='0' then
state<=A;
else --仅需这样修改即可
state<=A; --仅需修改此两处即可
end if;
end case;
end if;
end process;
outout_p:process(state)
begin
case state is
when D=>
if x='1' then
z<='1';
else
z<='0';
end if;
when others=>
z<='0';
end case;
end process;
end behavior;
总结
同步时序电路的输出仅与现态有关,则这种电路是Moore电路。
同步时序电路的输出不仅与现态有关,还与输入有关,则这种电路是Mealy电路。
时序电路按其工作方式可分为同步时序电路、异步时序电路。
同步时序电路在形式上分 Mealy、Moore。
在完成11111序列检测器,需要画出它的状态图,根据状态图的变化来写代码就非常简单。
仿真步骤:
1.建立仿真波形文件(file/new/vector waveform file)
2.插入仿真节点并赋值,保存波形文件。
3. 仿真 (processing/simulator )
绘出仿真波形后,根据波形可以分析功能。