用VHDL语言 设计4位序列检测器,当检测到“0110”时输出1,否则输出0。 哪位大神会啊,求助!

 我来答
nereus78e904
2014-01-11 · TA获得超过1.5万个赞
知道大有可为答主
回答量:5463
采纳率:90%
帮助的人:1908万
展开全部

需要设计一个4位的串入并出移位寄存器和一个4位的二进制数值比较器:

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY detector IS

    GENERIC(m:std_logic_vector(3 downto 0):="0110");

    PORT(clk,clr,s_in:IN std_logic; equal:OUT std_logic);

END detector;

ARCHITECTURE behavioral OF detecor IS

    SIGNAL p:std_logic_vector(3 DOWNTO 0);

BEGIN

    PROCESS(clk,clr)

    BEGIN

        IF clr='0' THEN

            p<=(OTHERS => '0');

        ELSIF rising_edge(clk) THEN

            p <= s_in&p(3 DOWNTO 1);

        END IF;

    END PROCESS;

    PROCESS(p)

    BEGIN

        IF p=m THEN

            equal <='1';

        ELSE

            equal <='0';

        END  IF;

    END PROCESS;

END  behavioral;

仿真图如下:

更多追问追答
追问
这个状态图我不太懂,亲能大概介绍下吗
追答
这是仿真图,不是状态图。
s_in是检测器的串行码输入端,输入的串行码是“010101011001010”,从15ns开始(由于clr信号在前10ns为有效,所以5ns处的clk信号上升沿没有做检测),每隔10ns检测一次,在95ns处检测到刚刚输入进来的4位串行码恰好是“0110”,所以输出信号equal为高电平。而到105ns处,又输入一个‘0’,4位串行码变成“1100”,因而输出信号equal变为低电平。
从仿真图可以看出,当串行码为“0110”时,输出信号equal为高电平,到达设计目标。
吖丫雅
2014-01-11 · TA获得超过554个赞
知道答主
回答量:63
采纳率:0%
帮助的人:62.6万
展开全部

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity jiance is

port(q:in std_logic_vector(3 downto 0);

     s:out std_logic);

end jiance;

architecture behave of jiance is

signal y:std_logic;

begin

process(q,y)

begin

if q="0110" then

y<='1';

else

y<='0';

end if;

end process;

s<=y;

end behave;

编译正确;

仿真图:

就这样,ok了!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-10
展开全部
用状态机吧,大致的思路应该是以下的方式吧。
.....
case(xx_state)

....

when s0 =>
if (seq_in = '0') then
xx_state <= s1;
else
xx_state <= s0;
end if;
seq_hit_o <= '0';

when s1 =>
if (seq_in = '1') then
xx_state <= s2;
else
xx_state <= s0;
end if;
seq_hit_o <= '0';

when s2 =>
if (seq_in = '1') then
xx_state <= s3;
else
xx_state <= s0;
end if;
seq_hit_o <= '0';

when s3 =>
if (seq_in = '0') then
seq_hit_o <= '1';
else
seq_hit_o <= '0';
end if;
xx_state <= s0;
end case;
.....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式