📄 encode.vhd
字号:
LIBRARY IEEE; --编码加交织
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE ieee.std_logic_arith.all;
ENTITY ENCODE IS
PORT ( CLK,RST: IN STD_LOGIC;
EN_IN:IN STD_LOGIC;
DATA_IN: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
IS_SECOND: IN STD_LOGIC;
ADDRESS_IN:IN STD_LOGIC_VECTOR (2 DOWNTO 0);
--TEST_REG0,TEST_REG1,TEST_REG2,TEST_REG3,TEST_REG15:OUT STD_LOGIC_VECTOR (11 DOWNTO 0);
--TEST_COUNT: OUT INTEGER RANGE 0 TO 72;
EN_WRITE_OUT: OUT STD_LOGIC;
EN_READ_OUT : OUT STD_LOGIC_VECTOR (5 DOWNTO 0);
EN_FINISH_OUT : OUT STD_LOGIC;
DATA_OUT: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));
END ENCODE ;
ARCHITECTURE one OF ENCODE IS
SIGNAL REG0,REG1,REG2,REG3,REG4,REG5,REG6,REG7 : STD_LOGIC_VECTOR (11 DOWNTO 0);
SIGNAL REG8,REG9,REG10,REG11,REG12,REG13,REG14,REG15 : STD_LOGIC_VECTOR (11 DOWNTO 0);
BEGIN
DATA:PROCESS(CLK,RST)
VARIABLE COUNT: INTEGER RANGE 0 TO 72;
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
REG0(11)<=REG0(7) XOR REG0(4) XOR REG0(3) XOR REG0(1);
REG0(10)<=REG0(7) XOR REG0(6) XOR REG0(4) XOR REG0(2) XOR REG0(1) XOR REG0(0);
REG0(9)<=REG0(6) XOR REG0(5) XOR REG0(3) XOR REG0(1) XOR REG0(0);
REG0(8)<=REG0(5) XOR REG0(4) XOR REG0(2) XOR REG0(0);
REG1(11)<=REG1(7) XOR REG1(4) XOR REG1(3) XOR REG1(1);
REG1(10)<=REG1(7) XOR REG1(6) XOR REG1(4) XOR REG1(2) XOR REG1(1) XOR REG1(0);
REG1(9)<=REG1(6) XOR REG1(5) XOR REG1(3) XOR REG1(1) XOR REG1(0);
REG1(8)<=REG1(5) XOR REG1(4) XOR REG1(2) XOR REG1(0);
REG2(11)<=REG2(7) XOR REG2(4) XOR REG2(3) XOR REG2(1);
REG2(10)<=REG2(7) XOR REG2(6) XOR REG2(4) XOR REG2(2) XOR REG2(1) XOR REG2(0);
REG2(9)<=REG2(6) XOR REG2(5) XOR REG2(3) XOR REG2(1) XOR REG2(0);
REG2(8)<=REG2(5) XOR REG2(4) XOR REG2(2) XOR REG2(0);
REG3(11)<=REG3(7) XOR REG3(4) XOR REG3(3) XOR REG3(1);
REG3(10)<=REG3(7) XOR REG3(6) XOR REG3(4) XOR REG3(2) XOR REG3(1) XOR REG3(0);
REG3(9)<=REG3(6) XOR REG3(5) XOR REG3(3) XOR REG3(1) XOR REG3(0);
REG3(8)<=REG3(5) XOR REG3(4) XOR REG3(2) XOR REG3(0);
REG4(11)<=REG4(7) XOR REG4(4) XOR REG4(3) XOR REG4(1);
REG4(10)<=REG4(7) XOR REG4(6) XOR REG4(4) XOR REG4(2) XOR REG4(1) XOR REG4(0);
REG4(9)<=REG4(6) XOR REG4(5) XOR REG4(3) XOR REG4(1) XOR REG4(0);
REG4(8)<=REG4(5) XOR REG4(4) XOR REG4(2) XOR REG4(0);
REG5(11)<=REG5(7) XOR REG5(4) XOR REG5(3) XOR REG5(1);
REG5(10)<=REG5(7) XOR REG5(6) XOR REG5(4) XOR REG5(2) XOR REG5(1) XOR REG5(0);
REG5(9)<=REG5(6) XOR REG5(5) XOR REG5(3) XOR REG5(1) XOR REG5(0);
REG5(8)<=REG5(5) XOR REG5(4) XOR REG5(2) XOR REG5(0);
REG6(11)<=REG6(7) XOR REG6(4) XOR REG6(3) XOR REG6(1);
REG6(10)<=REG6(7) XOR REG6(6) XOR REG6(4) XOR REG6(2) XOR REG6(1) XOR REG6(0);
REG6(9)<=REG6(6) XOR REG6(5) XOR REG6(3) XOR REG6(1) XOR REG6(0);
REG6(8)<=REG6(5) XOR REG6(4) XOR REG6(2) XOR REG6(0);
REG7(11)<=REG7(7) XOR REG7(4) XOR REG7(3) XOR REG7(1);
REG7(10)<=REG7(7) XOR REG7(6) XOR REG7(4) XOR REG7(2) XOR REG7(1) XOR REG7(0);
REG7(9)<=REG7(6) XOR REG7(5) XOR REG7(3) XOR REG7(1) XOR REG7(0);
REG7(8)<=REG7(5) XOR REG7(4) XOR REG7(2) XOR REG7(0);
REG8(11)<=REG8(7) XOR REG8(4) XOR REG8(3) XOR REG8(1);
REG8(10)<=REG8(7) XOR REG8(6) XOR REG8(4) XOR REG8(2) XOR REG8(1) XOR REG8(0);
REG8(9)<=REG8(6) XOR REG8(5) XOR REG8(3) XOR REG8(1) XOR REG8(0);
REG8(8)<=REG8(5) XOR REG8(4) XOR REG8(2) XOR REG8(0);
REG9(11)<=REG9(7) XOR REG9(4) XOR REG9(3) XOR REG9(1);
REG9(10)<=REG9(7) XOR REG9(6) XOR REG9(4) XOR REG9(2) XOR REG9(1) XOR REG9(0);
REG9(9)<=REG9(6) XOR REG9(5) XOR REG9(3) XOR REG9(1) XOR REG9(0);
REG9(8)<=REG9(5) XOR REG9(4) XOR REG9(2) XOR REG9(0);
REG10(11)<=REG10(7) XOR REG10(4) XOR REG10(3) XOR REG10(1);
REG10(10)<=REG10(7) XOR REG10(6) XOR REG10(4) XOR REG10(2) XOR REG10(1) XOR REG10(0);
REG10(9)<=REG10(6) XOR REG10(5) XOR REG10(3) XOR REG10(1) XOR REG10(0);
REG10(8)<=REG10(5) XOR REG10(4) XOR REG10(2) XOR REG10(0);
REG11(11)<=REG11(7) XOR REG11(4) XOR REG11(3) XOR REG11(1);
REG11(10)<=REG11(7) XOR REG11(6) XOR REG11(4) XOR REG11(2) XOR REG11(1) XOR REG11(0);
REG11(9)<=REG11(6) XOR REG11(5) XOR REG11(3) XOR REG11(1) XOR REG11(0);
REG11(8)<=REG11(5) XOR REG11(4) XOR REG11(2) XOR REG11(0);
REG12(11)<=REG12(7) XOR REG12(4) XOR REG12(3) XOR REG12(1);
REG12(10)<=REG12(7) XOR REG12(6) XOR REG12(4) XOR REG12(2) XOR REG12(1) XOR REG12(0);
REG12(9)<=REG12(6) XOR REG12(5) XOR REG12(3) XOR REG12(1) XOR REG12(0);
REG12(8)<=REG12(5) XOR REG12(4) XOR REG12(2) XOR REG12(0);
REG13(11)<=REG13(7) XOR REG13(4) XOR REG13(3) XOR REG13(1);
REG13(10)<=REG13(7) XOR REG13(6) XOR REG13(4) XOR REG13(2) XOR REG13(1) XOR REG13(0);
REG13(9)<=REG13(6) XOR REG13(5) XOR REG13(3) XOR REG13(1) XOR REG13(0);
REG13(8)<=REG13(5) XOR REG13(4) XOR REG13(2) XOR REG13(0);
REG14(11)<=REG14(7) XOR REG14(4) XOR REG14(3) XOR REG14(1);
REG14(10)<=REG14(7) XOR REG14(6) XOR REG14(4) XOR REG14(2) XOR REG14(1) XOR REG14(0);
REG14(9)<=REG14(6) XOR REG14(5) XOR REG14(3) XOR REG14(1) XOR REG14(0);
REG14(8)<=REG14(5) XOR REG14(4) XOR REG14(2) XOR REG14(0);
REG15(11)<=REG15(7) XOR REG15(4) XOR REG15(3) XOR REG15(1);
REG15(10)<=REG15(7) XOR REG15(6) XOR REG15(4) XOR REG15(2) XOR REG15(1) XOR REG15(0);
REG15(9)<=REG15(6) XOR REG15(5) XOR REG15(3) XOR REG15(1) XOR REG15(0);
REG15(8)<=REG15(5) XOR REG15(4) XOR REG15(2) XOR REG15(0);
IF RST='1' THEN
REG0<="000000000000";
REG1<="000000000000";
REG2<="000000000000";
REG3<="000000000000";
REG4<="000000000000";
REG5<="000000000000";
REG6<="000000000000";
REG7<="000000000000";
REG8<="000000000000";
REG9<="000000000000";
REG10<="000000000000";
REG11<="000000000000";
REG12<="000000000000";
REG13<="000000000000";
REG14<="000000000000";
REG15<="000000000000";
COUNT:=0;
EN_WRITE_OUT<='0';
EN_READ_OUT<="000000";
DATA_OUT<="0000";
EN_FINISH_OUT<='0';
ELSE
IF (EN_IN='1') THEN
IF COUNT=68 THEN
COUNT:=68;
ELSE
COUNT:=COUNT+1;
END IF;
CASE COUNT IS
WHEN 1=> CASE ADDRESS_IN IS
WHEN "001"=> EN_READ_OUT<="100000";
WHEN "010"=> EN_READ_OUT<="010000";
WHEN "011"=> EN_READ_OUT<="001000";
WHEN "100"=> EN_READ_OUT<="000100";
WHEN "101"=> EN_READ_OUT<="000010";
WHEN "110"=> EN_READ_OUT<="000001";
WHEN OTHERS=>NULL;
END CASE;
EN_WRITE_OUT<='0';
DATA_OUT<="0000";
WHEN 2=> NULL;
WHEN 3=> REG0(7 DOWNTO 0)<=DATA_IN;--1
WHEN 4=> REG1(7 DOWNTO 0)<=DATA_IN;--2
WHEN 5=> REG2(7 DOWNTO 0)<=DATA_IN;--3
WHEN 6=> REG3(7 DOWNTO 0)<=DATA_IN;--4
WHEN 7=> REG4(7 DOWNTO 0)<=DATA_IN;--5
WHEN 8=> REG5(7 DOWNTO 0)<=DATA_IN;--6
WHEN 9=> REG6(7 DOWNTO 0)<=DATA_IN;--7
WHEN 10=> REG7(7 DOWNTO 0)<=DATA_IN;--8
WHEN 11=> REG8(7 DOWNTO 0)<=DATA_IN;--9
WHEN 12=> REG9(7 DOWNTO 0)<=DATA_IN;--10
WHEN 13=> REG10(7 DOWNTO 0)<=DATA_IN;--11
WHEN 14=> REG11(7 DOWNTO 0)<=DATA_IN;--12
WHEN 15=> REG12(7 DOWNTO 0)<=DATA_IN;--13
WHEN 16=> REG13(7 DOWNTO 0)<=DATA_IN;--14
WHEN 17=> REG14(7 DOWNTO 0)<=DATA_IN;--15
WHEN 18=> IF IS_SECOND='1' THEN
REG15(7 DOWNTO 0)<="00000000";--16
ELSE
REG15(7 DOWNTO 0)<=DATA_IN;--16
END IF;
EN_WRITE_OUT<='1';
EN_READ_OUT<="000000";
WHEN 19=>DATA_OUT(3)<=REG0(0);DATA_OUT(2)<=REG1(0);DATA_OUT(1)<=REG2(0);DATA_OUT(0)<=REG3(0);--17
WHEN 20=> DATA_OUT(3)<=REG4(0);DATA_OUT(2)<=REG5(0);DATA_OUT(1)<=REG6(0);DATA_OUT(0)<=REG7(0);--18
WHEN 21=> DATA_OUT(3)<=REG8(0);DATA_OUT(2)<=REG9(0);DATA_OUT(1)<=REG10(0);DATA_OUT(0)<=REG11(0);--19
WHEN 22=> DATA_OUT(3)<=REG12(0);DATA_OUT(2)<=REG13(0);DATA_OUT(1)<=REG14(0);DATA_OUT(0)<=REG15(0);--20
WHEN 23=> DATA_OUT(3)<=REG0(1);DATA_OUT(2)<=REG1(1);DATA_OUT(1)<=REG2(1);DATA_OUT(0)<=REG3(1);--21
WHEN 24=> DATA_OUT(3)<=REG4(1);DATA_OUT(2)<=REG5(1);DATA_OUT(1)<=REG6(1);DATA_OUT(0)<=REG7(1);--22
WHEN 25=> DATA_OUT(3)<=REG8(1);DATA_OUT(2)<=REG9(1);DATA_OUT(1)<=REG10(1);DATA_OUT(0)<=REG11(1);--23
WHEN 26=> DATA_OUT(3)<=REG12(1);DATA_OUT(2)<=REG13(1);DATA_OUT(1)<=REG14(1);DATA_OUT(0)<=REG15(1);--24
WHEN 27=> DATA_OUT(3)<=REG0(2);DATA_OUT(2)<=REG1(2);DATA_OUT(1)<=REG2(2);DATA_OUT(0)<=REG3(2);--25
WHEN 28=> DATA_OUT(3)<=REG4(2);DATA_OUT(2)<=REG5(2);DATA_OUT(1)<=REG6(2);DATA_OUT(0)<=REG7(2);--26
WHEN 29=> DATA_OUT(3)<=REG8(2);DATA_OUT(2)<=REG9(2);DATA_OUT(1)<=REG10(2);DATA_OUT(0)<=REG11(2);--27
WHEN 30=> DATA_OUT(3)<=REG12(2);DATA_OUT(2)<=REG13(2);DATA_OUT(1)<=REG14(2);DATA_OUT(0)<=REG15(2);--28
WHEN 31=> DATA_OUT(3)<=REG0(3);DATA_OUT(2)<=REG1(3);DATA_OUT(1)<=REG2(3);DATA_OUT(0)<=REG3(3);--29
WHEN 32=> DATA_OUT(3)<=REG4(3);DATA_OUT(2)<=REG5(3);DATA_OUT(1)<=REG6(3);DATA_OUT(0)<=REG7(3);--30
WHEN 33=> DATA_OUT(3)<=REG8(3);DATA_OUT(2)<=REG9(3);DATA_OUT(1)<=REG10(3);DATA_OUT(0)<=REG11(3);--31
WHEN 34=> DATA_OUT(3)<=REG12(3);DATA_OUT(2)<=REG13(3);DATA_OUT(1)<=REG14(3);DATA_OUT(0)<=REG15(3);--32
WHEN 35=> DATA_OUT(3)<=REG0(4);DATA_OUT(2)<=REG1(4);DATA_OUT(1)<=REG2(4);DATA_OUT(0)<=REG3(4);--33
WHEN 36=> DATA_OUT(3)<=REG4(4);DATA_OUT(2)<=REG5(4);DATA_OUT(1)<=REG6(4);DATA_OUT(0)<=REG7(4);--34
WHEN 37=> DATA_OUT(3)<=REG8(4);DATA_OUT(2)<=REG9(4);DATA_OUT(1)<=REG10(4);DATA_OUT(0)<=REG11(4);--35
WHEN 38=> DATA_OUT(3)<=REG12(4);DATA_OUT(2)<=REG13(4);DATA_OUT(1)<=REG14(4);DATA_OUT(0)<=REG15(4);--36
WHEN 39=> DATA_OUT(3)<=REG0(5);DATA_OUT(2)<=REG1(5);DATA_OUT(1)<=REG2(5);DATA_OUT(0)<=REG3(5);--37
WHEN 40=> DATA_OUT(3)<=REG4(5);DATA_OUT(2)<=REG5(5);DATA_OUT(1)<=REG6(5);DATA_OUT(0)<=REG7(5);--38
WHEN 41=> DATA_OUT(3)<=REG8(5);DATA_OUT(2)<=REG9(5);DATA_OUT(1)<=REG10(5);DATA_OUT(0)<=REG11(5);--39
WHEN 42=> DATA_OUT(3)<=REG12(5);DATA_OUT(2)<=REG13(5);DATA_OUT(1)<=REG14(5);DATA_OUT(0)<=REG15(5);--40
WHEN 43=> DATA_OUT(3)<=REG0(6);DATA_OUT(2)<=REG1(6);DATA_OUT(1)<=REG2(6);DATA_OUT(0)<=REG3(6);--41
WHEN 44=> DATA_OUT(3)<=REG4(6);DATA_OUT(2)<=REG5(6);DATA_OUT(1)<=REG6(6);DATA_OUT(0)<=REG7(6);--42
WHEN 45=> DATA_OUT(3)<=REG8(6);DATA_OUT(2)<=REG9(6);DATA_OUT(1)<=REG10(6);DATA_OUT(0)<=REG11(6);--43
WHEN 46=> DATA_OUT(3)<=REG12(6);DATA_OUT(2)<=REG13(6);DATA_OUT(1)<=REG14(6);DATA_OUT(0)<=REG15(6);--44
WHEN 47=> DATA_OUT(3)<=REG0(7);DATA_OUT(2)<=REG1(7);DATA_OUT(1)<=REG2(7);DATA_OUT(0)<=REG3(7);--45
WHEN 48=> DATA_OUT(3)<=REG4(7);DATA_OUT(2)<=REG5(7);DATA_OUT(1)<=REG6(7);DATA_OUT(0)<=REG7(7);--46
WHEN 49=> DATA_OUT(3)<=REG8(7);DATA_OUT(2)<=REG9(7);DATA_OUT(1)<=REG10(7);DATA_OUT(0)<=REG11(7);--47
WHEN 50=> DATA_OUT(3)<=REG12(7);DATA_OUT(2)<=REG13(7);DATA_OUT(1)<=REG14(7);DATA_OUT(0)<=REG15(7);--48
WHEN 51=> DATA_OUT(3)<=REG0(8);DATA_OUT(2)<=REG1(8);DATA_OUT(1)<=REG2(8);DATA_OUT(0)<=REG3(8);--49
WHEN 52=> DATA_OUT(3)<=REG4(8);DATA_OUT(2)<=REG5(8);DATA_OUT(1)<=REG6(8);DATA_OUT(0)<=REG7(8);--50
WHEN 53=> DATA_OUT(3)<=REG8(8);DATA_OUT(2)<=REG9(8);DATA_OUT(1)<=REG10(8);DATA_OUT(0)<=REG11(8);--51
WHEN 54=> DATA_OUT(3)<=REG12(8);DATA_OUT(2)<=REG13(8);DATA_OUT(1)<=REG14(8);DATA_OUT(0)<=REG15(8);--52
WHEN 55=> DATA_OUT(3)<=REG0(9);DATA_OUT(2)<=REG1(9);DATA_OUT(1)<=REG2(9);DATA_OUT(0)<=REG3(9);--53
WHEN 56=> DATA_OUT(3)<=REG4(9);DATA_OUT(2)<=REG5(9);DATA_OUT(1)<=REG6(9);DATA_OUT(0)<=REG7(9);--54
WHEN 57=> DATA_OUT(3)<=REG8(9);DATA_OUT(2)<=REG9(9);DATA_OUT(1)<=REG10(9);DATA_OUT(0)<=REG11(9);--55
WHEN 58=> DATA_OUT(3)<=REG12(9);DATA_OUT(2)<=REG13(9);DATA_OUT(1)<=REG14(9);DATA_OUT(0)<=REG15(9);--56
WHEN 59=> DATA_OUT(3)<=REG0(10);DATA_OUT(2)<=REG1(10);DATA_OUT(1)<=REG2(10);DATA_OUT(0)<=REG3(10);--57
WHEN 60=> DATA_OUT(3)<=REG4(10);DATA_OUT(2)<=REG5(10);DATA_OUT(1)<=REG6(10);DATA_OUT(0)<=REG7(10);--58
WHEN 61=> DATA_OUT(3)<=REG8(10);DATA_OUT(2)<=REG9(10);DATA_OUT(1)<=REG10(10);DATA_OUT(0)<=REG11(10);--59
WHEN 62=> DATA_OUT(3)<=REG12(10);DATA_OUT(2)<=REG13(10);DATA_OUT(1)<=REG14(10);DATA_OUT(0)<=REG15(10);--60
WHEN 63=> DATA_OUT(3)<=REG0(11);DATA_OUT(2)<=REG1(11);DATA_OUT(1)<=REG2(11);DATA_OUT(0)<=REG3(11);--61
WHEN 64=> DATA_OUT(3)<=REG4(11);DATA_OUT(2)<=REG5(11);DATA_OUT(1)<=REG6(11);DATA_OUT(0)<=REG7(11);--62
WHEN 65=> DATA_OUT(3)<=REG8(11);DATA_OUT(2)<=REG9(11);DATA_OUT(1)<=REG10(11);DATA_OUT(0)<=REG11(11);--63
WHEN 66=> DATA_OUT(3)<=REG12(11);DATA_OUT(2)<=REG13(11);DATA_OUT(1)<=REG14(11);DATA_OUT(0)<=REG15(11);--64
WHEN 67=> EN_FINISH_OUT<='1';
EN_WRITE_OUT<='0';
EN_READ_OUT<="000000";
WHEN OTHERS =>NULL;
END CASE;
ELSE
REG0<="000000000000";
REG1<="000000000000";
REG2<="000000000000";
REG3<="000000000000";
REG4<="000000000000";
REG5<="000000000000";
REG6<="000000000000";
REG7<="000000000000";
REG8<="000000000000";
REG9<="000000000000";
REG10<="000000000000";
REG11<="000000000000";
REG12<="000000000000";
REG13<="000000000000";
REG14<="000000000000";
REG15<="000000000000";
COUNT:=0;
EN_WRITE_OUT<='0';
EN_READ_OUT<="000000";
DATA_OUT<="0000";
EN_FINISH_OUT<='0';
END IF;
END IF;
END IF;
--TEST_COUNT<=COUNT;
END PROCESS DATA;
--TEST_REG0<=REG12;
--TEST_REG1<=REG13;
--TEST_REG2<=REG14;
--TEST_REG3<=REG3;
--TEST_REG15<=REG15;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -