📄 huffman_en_full.vhd
字号:
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 + -