⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eda7彩灯及键盘抖动的演示.vhd

📁 含有各类寄存器
💻 VHD
字号:
library IEEE;

--The IEEE standard 1164 package, declares std_logic, rising_edge(), etc.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

--This package is a version of the Synopsys package and has been 
-- optimized for use with the Express compiler.
library SYNOPSYS;
use SYNOPSYS.attributes.all;




entity TEST is
    port (
        JIL,JIR:IN STD_LOGIC;
        LED,SWOUT:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        SEG: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
        BCD: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
        IO: OUT STD_LOGIC_VECTOR(2 DOWNTO  0);
        BEEP,POINT:OUT STD_LOGIC
    );
end TEST;

architecture TEST_arch of TEST is
COMPONENT clkhu
  PORT (CLKOUT:out STD_LOGIC);
END COMPONENT;

SIGNAL COUNT1:STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL COUNTR,COUNTL:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL BCD_T:STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL COUNT2:STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL CLKIN,CLK1,CLK2:STD_LOGIC;
SIGNAL BCD_S,BCD1,BCD2,BCD3,BCD4:STD_LOGIC_VECTOR(3 DOWNTO 0);

begin
  -- <<enter your statements here>>

  U1:CLKHU PORT MAP (CLKIN);
  SWOUT<=COUNT1(9 DOWNTO 2);
  P1:PROCESS(CLKIN,COUNT1)
  BEGIN
  IF(CLKIN='1' AND CLKIN'EVENT)THEN
      COUNT1<=COUNT1+1;
  END IF;
      CLK1<=COUNT1(9);
  END PROCESS;
  P2:PROCESS(CLK1,COUNT2)
  BEGIN
  IF(CLK1='1' AND CLK1'EVENT)THEN
  COUNT2<=COUNT2+1;
  CLK2<=COUNT2(1);
  END IF;
  END PROCESS;

  
  P3:PROCESS(CLK2,COUNT2,LED)
  BEGIN
  IF(CLK2='1' AND CLK2'EVENT)THEN
       IF(COUNT2( 5 DOWNTO 4)="00")THEN 
       LED(0)<='0';
       LED(1)<=LED(0);
       LED(2)<=LED(1);
       LED(3)<=LED(2);
       ELSIF(COUNT2(5 DOWNTO 4)="01")THEN
       LED(0)<='1';
       LED(1)<=LED(0);
       LED(2)<=LED(1);
       LED(3)<=LED(2);
       ELSIF(COUNT2(5 DOWNTO 4)="10")THEN
       LED(3)<='0';
       LED(2)<=LED(3);
       LED(1)<=LED(2);
       LED(0)<=LED(1);
       ELSE
       LED(3)<='1';
       LED(2)<=LED(3);
       LED(1)<=LED(2);
       LED(0)<=LED(1);
       END IF;
        
        
  END IF;
  END PROCESS;
       LED(7)<=LED(0);
       LED(6)<=LED(1);
       LED(5)<=LED(2);
       LED(4)<=LED(3);
       
  BEEP<=JIR AND JIL;
  PS:PROCESS(COUNT1)
  BEGIN 
  CASE COUNT1(1 DOWNTO 0) IS 
     WHEN "00"=>SEG<="1110";BCD_S<=BCD1;IO(1 DOWNTO 0)<="00";
     WHEN "01"=>SEG<="1101";BCD_s<=BCD2;IO(1 DOWNTO 0)<="01";
     WHEN "10"=>SEG<="1011";BCD_S<=BCD3;IO(1 DOWNTO 0)<="10";
     WHEN "11"=>SEG<="0111";BCD_S<=BCD4;IO(1 DOWNTO 0)<="11";
     WHEN OTHERS=>NULL;
  END CASE;
   IF(COUNT2(4 DOWNTO 3)=COUNT1(1 DOWNTO 0) )THEN 
       POINT<='1';
   ELSE 
       POINT<='0';
   END IF;
  END PROCESS;
  IO(2)<=CLKIN; 
PR:PROCESS(JIR,COUNTR)
BEGIN
IF(JIR'EVENT AND JIR='1')THEN
   COUNTR<=COUNTR+1;
 END IF;
END PROCESS;
   BCD1<=COUNTL(3 DOWNTO 0);
   BCD2<=COUNTL(7 DOWNTO 4); 
   
PL:PROCESS(JIL,COUNTL)
BEGIN
IF(JIL'EVENT AND JIL='0')THEN
   COUNTL<=COUNTL+1;
 END IF;
 END PROCESS; 
   BCD3<=COUNTR(3 DOWNTO 0);
   BCD4<=COUNTR(7 DOWNTO 4); 
   
   
   
   --HEX-to-seven-segment decoder
--	HEX:	in 	STD_LOGIC_VECTOR (3 downto 0);
--	LED:	out	STD_LOGIC_VECTOR (6 downto 0);
--
-- segment encoding
--      0
--     ---  
--  5 |   | 1
--     ---   <- 6
--  4 |   | 2
--     ---
--      3
	
    with BCD_S SELect
	BCD_T<=	"1111001" when "0001",	--1
		"0100100" when "0010",	--2
		"0110000" when "0011",	--3
		"0011001" when "0100",	--4
		"0010010" when "0101",	--5
		"0000010" when "0110",	--6
		"1111000" when "0111",	--7
		"0000000" when "1000",	--8
		"0010000" when "1001",	--9
		"0001000" when "1010",	--A
		"0000011" when "1011",	--b
		"1000110" when "1100",	--C
		"0100001" when "1101",	--d
		"0000110" when "1110",	--E
		"0001110" when "1111",	--F
		"1000000" when others;	--0
    
  BCD<=NOT BCD_T;
   
  
   End TEST_arch;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -