📄 data_manage.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DATA_MANAGE IS
PORT(
VS:IN STD_LOGIC;
DATA:IN STD_LOGIC_VECTOR(23 DOWNTO 0);
CLK50M:IN STD_LOGIC;
MCU_DATA:IN STD_LOGIC;
MCU_LATCH:IN STD_LOGIC;
MCU_CLK:IN STD_LOGIC;
ADDR:OUT STD_LOGIC_VECTOR(13 DOWNTO 0);
OE:OUT STD_LOGIC;
WE:OUT STD_LOGIC;
EN:OUT STD_LOGIC;
LATCH_OUT:OUT STD_LOGIC;
CLK_OUT:OUT STD_LOGIC;
RDATA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
GDATA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
BDATA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END DATA_MANAGE;
--****************************************
ARCHITECTURE A OF DATA_MANAGE IS
SIGNAL CLK_COUNTER:STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL CLK_T:STD_LOGIC;
SIGNAL CHUNNEL_COUNTER:STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL CHUNNEL_T:STD_LOGIC;
SIGNAL SECT_COUNTER:STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL SECT_T:STD_LOGIC;
SIGNAL L_COUNTER:STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL L_T:STD_LOGIC;
SIGNAL BLOCK_COUNTER:STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL BLOCK_T:STD_LOGIC;
SIGNAL SCAN_COUNTER:STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL RED_BIT:STD_LOGIC;
SIGNAL GREEN_BIT:STD_LOGIC;
SIGNAL BLUE_BIT:STD_LOGIC;
SIGNAL R_BIT:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL G_BIT:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL B_BIT:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL CONTROL_B:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL CONTROL_T:STD_LOGIC_VECTOR(7 DOWNTO 0);
--**********************************************
BEGIN
PROCESS(MCU_CLK)
BEGIN
IF MCU_CLK'EVENT AND MCU_CLK='1'THEN
LOOP2: FOR I IN 7 DOWNTO 1 LOOP
CONTROL_B(I)<=CONTROL_B(I-1);
END LOOP LOOP2;
CONTROL_B(0)<=MCU_DATA;
END IF;
END PROCESS;
--***********************************************
PROCESS(MCU_LATCH)
BEGIN
IF MCU_LATCH'EVENT AND MCU_LATCH='1'THEN
CONTROL_T<=CONTROL_B;
END IF;
END PROCESS;
--************************************************
PROCESS(CLK50M)
BEGIN
IF CLK50M'EVENT AND CLK50M='1'THEN
CLK_COUNTER<=CLK_COUNTER+1;
END IF;
END PROCESS;
CLK_T<='1'WHEN CLK_COUNTER="111"ELSE
'0';
--***********************************
PROCESS(CLK50M)
BEGIN
IF VS='0'THEN
CHUNNEL_COUNTER<="00";
ELSIF CLK50M'EVENT AND CLK50M='1'THEN
IF CLK_T='1'THEN
CHUNNEL_COUNTER<=CHUNNEL_COUNTER+1;
END IF;
END IF;
END PROCESS;
CHUNNEL_T<='1'WHEN CHUNNEL_COUNTER="11" AND CLK_T='1' ELSE
'0';
--*****************************
PROCESS(CLK50M)
BEGIN
IF VS='0'THEN
SECT_COUNTER<="000";
ELSIF CLK50M'EVENT AND CLK50M='1'THEN
IF CHUNNEL_T='1'THEN
SECT_COUNTER<=SECT_COUNTER+1;
END IF;
END IF;
END PROCESS;
SECT_T<='1'WHEN CHUNNEL_T='1'AND SECT_COUNTER="111"ELSE
'0';
--*************************
PROCESS(CLK50M)
BEGIN
IF VS='0'THEN
L_COUNTER<="00";
ELSIF CLK50M'EVENT AND CLK50M='1'THEN
IF SECT_T='1'THEN
L_COUNTER<=L_COUNTER+1;
END IF;
END IF;
END PROCESS;
L_T<='1'WHEN SECT_T='1' AND L_COUNTER="11"ELSE
'0';
--************************
PROCESS(CLK50M)
BEGIN
IF VS='0'THEN
BLOCK_COUNTER<="000000";
ELSIF CLK50M'EVENT AND CLK50M='1'THEN
IF L_T='1'THEN
IF BLOCK_COUNTER="100001"THEN
BLOCK_COUNTER<="000000";
ELSE
BLOCK_COUNTER<=BLOCK_COUNTER+1;
END IF;
END IF;
END IF;
END PROCESS;
BLOCK_T<='1'WHEN L_T='1'AND BLOCK_COUNTER="100001"ELSE
'0';
--********************
PROCESS (CLK50M)
BEGIN
IF VS='0'THEN
SCAN_COUNTER<="00000";
ELSIF CLK50M'EVENT AND CLK50M='1'THEN
IF BLOCK_T='1'THEN
SCAN_COUNTER<=SCAN_COUNTER+1;
END IF;
END IF;
END PROCESS;
RED_BIT<='0' WHEN SCAN_COUNTER(4)='1'ELSE
DATA(23) WHEN SCAN_COUNTER(3)='1'ELSE
DATA(22) WHEN SCAN_COUNTER(2)='1'ELSE
DATA(21) WHEN SCAN_COUNTER(1)='1'ELSE
DATA(20) WHEN SCAN_COUNTER(0)='1'ELSE
'0';
GREEN_BIT<='0' WHEN SCAN_COUNTER(4)='1'ELSE
DATA(15) WHEN SCAN_COUNTER(3)='1'ELSE
DATA(14) WHEN SCAN_COUNTER(2)='1'ELSE
DATA(13) WHEN SCAN_COUNTER(1)='1'ELSE
DATA(12) WHEN SCAN_COUNTER(0)='1'ELSE
'0';
BLUE_BIT<='0' WHEN SCAN_COUNTER(4)='1'ELSE
DATA(7) WHEN SCAN_COUNTER(3)='1'ELSE
DATA(6) WHEN SCAN_COUNTER(2)='1'ELSE
DATA(5) WHEN SCAN_COUNTER(1)='1'ELSE
DATA(4) WHEN SCAN_COUNTER(0)='1'ELSE
'0';
--************************
PROCESS(CLK50M)
BEGIN
IF CLK50M'EVENT AND CLK50M='1'THEN
IF CLK_COUNTER="100"THEN
LOOP1:FOR I IN 3 DOWNTO 1 LOOP
R_BIT(I)<=R_BIT(I-1);
B_BIT(I)<=B_BIT(I-1);
G_BIT(I)<=G_BIT(I-1);
END LOOP LOOP1;
R_BIT(0)<=RED_BIT;
G_BIT(0)<=GREEN_BIT;
B_BIT(0)<=BLUE_BIT;
END IF;
END IF;
END PROCESS;
--*****************************
PROCESS(CLK50M)
BEGIN
IF CLK50M'EVENT AND CLK50M='1'THEN
IF CHUNNEL_COUNTER="00" AND CLK_COUNTER="001" THEN
RDATA<=R_BIT;
GDATA<=G_BIT;
BDATA<=B_BIT;
END IF;
END IF;
END PROCESS;
--******************************
CLK_OUT<=CHUNNEL_COUNTER(1);
LATCH_OUT<='1'WHEN CHUNNEL_COUNTER="01"AND L_COUNTER="00" AND BLOCK_COUNTER="000000" AND SECT_COUNTER="001" ELSE
'0';
EN<='0'WHEN CONTROL_T="00000000"ELSE
'1';
WE<='1';
OE<='0';
ADDR<='0'& CHUNNEL_COUNTER & L_COUNTER & ( BLOCK_COUNTER ) & ( SECT_COUNTER);
END A;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -