VHDL:时序逻辑电路实验-手动设置8位检测码的序列检测器

工程包下载:【时序逻辑电路实验:手动设置8位检测码的序列检测器】

功能:通过按键设置8位检测码,序列检测器收到一组串行二进制码(键盘输入)后,如果这组码与检测器设置的码相同,则输出1010,否则输出1011.

VHDL代码如下:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity kledjc is
     port(KBdata: in STD_LOGIC;
          KBCLK: in STD_LOGIC;
          CLKIN: in STD_LOGIC;
          led: out std_logic_vector(7 downto 0);
          rst: in std_logic;
          n: in std_logic_vector(7 downto 0);
          jgout: out std_logic_vector(3 downto 0));
end kledjc;

architecture behv of kledjc is
signal CLK: std_logic;
signal M: std_logic_vector(9 downto 0);
signal S: std_logic_vector(9 downto 0); 
signal NUM: std_logic_vector(7 downto 0);
signal q: integer range 0 to 8;

     begin
         process(CLKIN,RST)
         begin 
             if(RST='0') then
                  CLK<='1';
             elsif(CLKIN'event and CLKIN='1') then
                  if KBCLK='0' then
                          CLK<=KBCLK;
                  else
                          CLK<='1';
                  end if;
              end if;
     end process;

     process(CLK,KBdata,S)
     begin
         if(CLK'event and CLK='0') then
             M<=KBdata & S(9 downto 1);
         end if;
     end process;
 
     process(clk,M,S)
     begin
         if(CLK'event and CLK='1') then
            S<=M;
         end if;
              case S(7 downto 0) is
              when "00010110"=>NUM<="00000110"; 
              when "00011110"=>NUM<="01011011";
              when "00100110"=>NUM<="01001111";
              when "00100101"=>NUM<="01100110";
              when "00101110"=>NUM<="01101101";
              when "00110110"=>NUM<="01111101";
              when "00111101"=>NUM<="00000111";
              when "00111110"=>NUM<="01111111";
              when "01000110"=>NUM<="01101111";
              when "01000101"=>NUM<="00111111";
              when "00011100"=>NUM<="01110111";
              when "00110010"=>NUM<="01111100";
              when "00100001"=>NUM<="00111001";
              when "00100011"=>NUM<="01011110";
              when "00100100"=>NUM<="01111001";
              when "00101011"=>NUM<="01110001";
              when others=>NUM<="00000000";
              end case;
         led<=NUM;
     end process;

     process(q)
     begin
         if s(7 downto 0)=n(7 downto 0) then jgout<="1010";  q<=1;
         else jgout<="1011";  q<=0;
         end if;
     end process;
end Behv;


  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值