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

📄 encode.vhd

📁 本源码实现交织编码
💻 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 + -