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

📄 huffman_en_full.vhd

📁 huffman code vhdl program
💻 VHD
📖 第 1 页 / 共 5 页
字号:
                      END CASE;
                  WHEN OTHERS => NULL;
               END CASE;
            END IF;
         END IF;
      END IF;
   END PROCESS;

   --***************************************************************************
   -- variable length code and corresponding code length for AC coefficients.
   --  variable length code and corresponding code length for AC coefficients.
   --    Table zero is used for intra blocks anf table one is used for non-intra     
   --    blocks.  For a run/level pair not defined in table zero or one, an escape
   --    code followed by a 6 bit run symbol and 12 bit level is used.
   
   --assign run_level_pair <= {run_in,level_in};
   
   --always @ (posedge CLK)
   -- always @ (posedge CLK)
   -- begin
   --   if (RST)
   --      begin vlcode_ac1 <= {18'b0}; codelength_ac1 <= 5'd0; end
   --   else
   -- begin if (rdy_in == 1'b1)
   -- begin
   -- case(rl_in) 
   -- 		18'b000000000000000001: 
   -- 		   begin  vlcode_ac1 <= {17'b00000000000001010,rl_in[11]}; codelength_ac1 <= 5'd5; end
   -- 		18'b000000000000000101: 
   -- 		   begin  vlcode_ac1 <= {17'b00000000000000111,rl_in[11]}; codelength_ac1 <= 5'd4; end
   -- 		18'b000000000000001010: 
   -- 		   begin  vlcode_ac1 <= {17'b00000000000001110,rl_in[11]}; codelength_ac1 <= 5'd5; end
   -- 		18'b000001000000000101: 
   -- 		   begin  vlcode_ac1 <= {18'b111100001111001101}; codelength_ac1 <= 5'd18; end
   -- 		18'b000011000000000111: 
   -- 		   begin  vlcode_ac1 <= {17'b00000000000010111,rl_in[11]}; codelength_ac1 <= 5'd6; end
   -- 	  18'b000111000000001001: 
   -- 		   begin  vlcode_ac1 <= {17'b00000000000000000,rl_in[11]}; codelength_ac1 <= 5'd5; end
   -- 	  18'b010000000000010000: 
   -- 		   begin  vlcode_ac1 <= {17'b10000000000010110,rl_in[11]}; codelength_ac1 <= 5'd7; end
   -- 	  18'b010101000000001001: 
   -- 		   begin  vlcode_ac1 <= {17'b00000000000010110,rl_in[11]}; codelength_ac1 <= 5'd7; end
   --     default: 
   -- 		   begin  vlcode_ac1 <= {18'b111111111111111111}; codelength_ac1 <= 5'd18; end
   -- endcase
   -- end
   -- end
   -- end
   
   --***************************************************************************

temp4 <= '0' & rl_in(10 DOWNTO 0);
temp5 <= '0' & rl_in(10 DOWNTO 0);
temp6 <= '0' & rl_in(10 DOWNTO 0);
temp7 <= '0' & rl_in(10 DOWNTO 0);
temp8 <= '0' & rl_in(10 DOWNTO 0);
temp9 <= '0' & rl_in(10 DOWNTO 0);
temp10 <= scan_type & rl_in(17 DOWNTO 12) &  rl_in(10 DOWNTO 0);
temp11 <= full_flag4 & half_flag4;

   PROCESS (CLK)
   BEGIN
      IF (CLK'EVENT AND CLK = '1') THEN
         IF (RST = '1') THEN
            vlcode_ac1 <= "000000000000000000"; codelength_ac1 <= "00000";    
         ELSE
            IF (eob = '1' AND scan_type = '1') THEN
               vlcode_ac1 <= "000000000000000010"; -- NOTE 2
			   codelength_ac1 <= "00010";   -- NOTE 2
            ELSE
               IF (eob = '1' AND scan_type = '0') THEN
                  vlcode_ac1 <= "000000000000000110";    
                  codelength_ac1 <= "00100";   -- NOTE 2             
               ELSE
                  IF (cntr64 = "0000001" AND (rl_in(17 DOWNTO 12) & 
                  rl_in(10 DOWNTO 0)) = "00000000000000001") THEN
                     vlcode_ac1 <= "00000000000000001" & rl_in(11);    
                     codelength_ac1 <= "00010"; -- note3, DC coeff               
                  ELSE
                     --******************* scan type = x, run = x, level = 1 *******
                     CASE temp10 IS 
                       WHEN 'X' & "XXXXXX" &"00000000001"  =>   -- level = 1  
                              CASE rl_in(17 DOWNTO 12) IS --run
                                 WHEN "010001" => --17
                                       vlcode_ac1 <= "00000000000011111" & rl_in(11);    
                                       codelength_ac1 <= "01101";    
                                 WHEN "010010" => --18
                                       vlcode_ac1 <= "00000000000011010" & rl_in(11);    
                                       codelength_ac1 <= "01101";    
                                 WHEN "010011" => --19
                                       vlcode_ac1 <= "00000000000011001" & rl_in(11);    
                                       codelength_ac1 <= "01101";    
                                 WHEN "010100" => --20
                                       vlcode_ac1 <= "00000000000010111" & rl_in(11);    
                                       codelength_ac1 <= "01101";    
                                 WHEN "010101" => --21
                                       vlcode_ac1 <= "00000000000010110" & rl_in(11);    
                                       codelength_ac1 <= "01101";    
                                 WHEN "010110" => --22
                                       vlcode_ac1 <= "00000000000011111" & rl_in(11);    
                                       codelength_ac1 <= "01110";    
                                 WHEN "010111" => --23
                                       vlcode_ac1 <= "00000000000011110" & rl_in(11);    
                                       codelength_ac1 <= "01110";    
                                 WHEN "011000" => --24
                                       vlcode_ac1 <="00000000000011101" & rl_in(11);    
                                       codelength_ac1 <= "01110";    
                                 WHEN "011001" => --25
                                       vlcode_ac1 <= "00000000000011100" & rl_in(11);    
                                       codelength_ac1 <= "01110";    
                                 WHEN "011010" => --26
                                       vlcode_ac1 <= "00000000000011011" & rl_in(11);    
                                       codelength_ac1 <= "01110";    
                                 WHEN "011011" => --27
                                       vlcode_ac1 <= "00000000000011111" & rl_in(11);    
                                       codelength_ac1 <= "10001";    
                                 WHEN "011100" => --28
                                       vlcode_ac1 <= "00000000000011110" & rl_in(11);    
                                       codelength_ac1 <= "10001";    
                                 WHEN "011101" => --29
                                       vlcode_ac1 <= "00000000000011101" & rl_in(11);    
                                       codelength_ac1 <= "10001";    
                                 WHEN "011110" => --30
                                       vlcode_ac1 <= "00000000000011100" & rl_in(11);    
                                       codelength_ac1 <= "10001";    
                                 WHEN "011111" => --31
                                       vlcode_ac1 <= "00000000000011011" & rl_in(11);    
                                       codelength_ac1 <= "10001";    
                                 WHEN OTHERS =>NULL;
                              END CASE;
                     WHEN 'X' & "XXXXXX" & "00000000010" => --level = 2
                              CASE rl_in(17 DOWNTO 12) IS --(run)
                                 WHEN "000110" => --6
                                          vlcode_ac1 <= "00000000000011110" & rl_in(11);    
                                          codelength_ac1 <= "01101";    
                                 WHEN "000111" => --7
                                          vlcode_ac1 <= "00000000000010101" & rl_in(11);    
                                          codelength_ac1 <= "01101";    
                                 WHEN "001000" => --8
                                          vlcode_ac1 <= "00000000000010001" & rl_in(11);    
                                          codelength_ac1 <= "01101";    
                                 WHEN "001001" => --9
                                          vlcode_ac1 <= "00000000000010001" & rl_in(11);    
                                          codelength_ac1 <= "01110";    
                                 WHEN "001010" => --10
                                          vlcode_ac1 <= "00000000000010000" & rl_in(11);    
                                          codelength_ac1 <= "01110";    
                                 WHEN "001011" => --11
                                          vlcode_ac1 <= "00000000000011010" & rl_in(11);    
                                          codelength_ac1 <= "10001";    
                                 WHEN "001100" => --12
                                          vlcode_ac1 <= "00000000000011001" & rl_in(11);    
                                          codelength_ac1 <= "10001";    
                                 WHEN "001101" => --13
                                          vlcode_ac1 <= "00000000000011000" & rl_in(11);    
                                          codelength_ac1 <= "10001";    
                                 WHEN "001110" => --14
                                          vlcode_ac1 <= "00000000000010111" & rl_in(11);    
                                          codelength_ac1 <= "10001";    
                                 WHEN "001111" => --15
                                          vlcode_ac1 <= "00000000000010110" & rl_in(11);    
                                          codelength_ac1 <= "10001";    
                                 WHEN "010000" => --16
                                          vlcode_ac1 <= "00000000000010101" & rl_in(11);    
                                          codelength_ac1 <= "10001";    
                                 WHEN OTHERS => NULL;
                              END CASE;
                     WHEN 'X' & "XXXXXX" & "00000000011" => --level = 3
                              CASE rl_in(17 DOWNTO 12) IS --(run)
                                 WHEN "000011" => --3
                                          vlcode_ac1 <= "00000000000011100" & rl_in(11);    
                                          codelength_ac1 <= "01101";    
                                 WHEN "000100" => --4
                                          vlcode_ac1 <= "00000000000010010" & rl_in(11);    
                                          codelength_ac1 <= "01101";    
                                 WHEN "000101" => --5
                                          vlcode_ac1 <= "00000000000010010" & rl_in(11);    
                                          codelength_ac1 <= "01110";    
                                 WHEN "000110" => --6
                                          vlcode_ac1 <= "00000000000010100" & rl_in(11);    
                                          codelength_ac1 <= "10001";    
                                 WHEN OTHERS => NULL;
                              END CASE;
                     WHEN 'X' & "000000" & "XXXXXXXXXXX" =>  --run = 0
                              CASE temp4 IS --(level)
                                 WHEN "000000010000" => --16
                                          vlcode_ac1 <= "00000000000011111" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000010001" => --17
                                          vlcode_ac1 <= "00000000000011110" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000010010" => --18
                                          vlcode_ac1 <= "00000000000011101" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000010011" => --19
                                          vlcode_ac1 <= "00000000000011100" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000010100" => --20
                                          vlcode_ac1 <= "00000000000011011" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000010101" => --21
                                          vlcode_ac1 <= "00000000000011010" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000010110" => --22
                                          vlcode_ac1 <= "00000000000011001" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000010111" => --23
                                          vlcode_ac1 <= "00000000000011000" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000011000" => --24
                                          vlcode_ac1 <= "00000000000010111" & rl_in(11);    
                                          codelength_ac1 <= "01111";    
                                 WHEN "000000011001" => --25
                                          vlcode_ac1 <= "00000000000010110" & rl_in(11);    
                                          codelength_ac1 <= "01111";    

⌨️ 快捷键说明

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