OSDN Git Service

Merge branch 'hw-huffdctycc' into debug-netmjpeg
[fpga-leon-mjpeg/leon-mjpeg.git] / grlib-gpl-1.0.22-b4095 / lib / kuri / mjpeg / huffdctycc.vhd.bak
diff --git a/grlib-gpl-1.0.22-b4095/lib/kuri/mjpeg/huffdctycc.vhd.bak b/grlib-gpl-1.0.22-b4095/lib/kuri/mjpeg/huffdctycc.vhd.bak
new file mode 100644 (file)
index 0000000..ff26398
--- /dev/null
@@ -0,0 +1,223 @@
+------------------------------------------------------------------------------
+--  Copyright (C) 2011, Kenichi Kurimoto
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 2 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program; if not, write to the Free Software
+--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+-----------------------------------------------------------------------------
+-- Entity:      huffdctycc
+-- File:        huffdctycc.vhd
+-- Author:      Kenichi Kurimoto 
+-- Description: huffman decoder,2D-DCT,upsample,and YCbCr-RGB translation
+--                    for jpeg decode
+------------------------------------------------------------------------------
+
+
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use std.textio.all;
+use ieee.std_logic_textio.all;
+
+library grlib;
+use grlib.amba.all;
+use grlib.stdlib.all;
+use grlib.devices.all;
+
+library techmap;
+use techmap.gencomp.all;
+
+library kuri;
+use kuri.mjpeg.all;
+
+entity huffdctycc is
+   generic (
+      memtech : integer := DEFMEMTECH;
+      shindex : integer := 0;
+      haddr  : integer := 0;
+      hmask  : integer := 16#fff#;
+      hirq   : integer := 0;      
+      pindex : integer := 0;
+      paddr  : integer := 0;
+      pmask  : integer := 16#fff#;
+      mhindex : integer := 0;
+      chprot : integer := 3);      
+
+   port (
+      rst   : in std_ulogic;
+      clk   : in std_ulogic;
+      ahbmi : in ahb_mst_in_type;
+      ahbmo : out ahb_mst_out_type;
+      ahbsi : in ahb_slv_in_type;
+      ahbso : out ahb_slv_out_type;
+      apbi  : in apb_slv_in_type;
+      apbo  : out apb_slv_out_type;
+      logan_sig : out std_logic_vector(31 downto 0)
+   );
+end;
+
+architecture rtl of huffdctycc is
+
+signal kready1, kready2, kready3, kready4, kready5, kready6, 
+       kstrobe1, kstrobeq, kstrobe2, kstrobe3, kstrobe4, kstrobe5, kstrobe6: std_logic;
+signal kdata1 : std_logic_vector(11 downto 0);
+signal kaddress1 : std_logic_vector(5 downto 0);
+signal kdata2 : std_logic_vector(11 downto 0);
+signal kdataq1 : std_logic_vector(7 downto 0);
+signal kdataq2 : std_logic_vector(7 downto 0);
+signal kdata3 : std_logic_vector(15 downto 0);
+signal kdata4 : std_logic_vector(15 downto 0);
+signal kdata5 : std_logic_vector(7 downto 0);
+signal kdata6 : std_logic_vector(23 downto 0);
+signal error : std_logic_vector(2 downto 0);
+signal jpg_setting : jpg_set_type;
+signal startgen : std_logic;
+signal kaddq : std_logic_vector(7 downto 0);
+signal krdq : std_logic;
+signal krddataq : std_logic_vector(7 downto 0);
+
+signal count_r, count_rin :std_logic_vector(31 downto 0);
+
+signal logan_sig2 : std_logic_vector(31 downto 0);
+
+-- pragma translate_off
+file out_file1 : text open write_mode is "aft_huff.txt";
+file out_file2 : text open write_mode is "aft_huffmem.txt";
+file out_file3 : text open write_mode is "aft_dct1.txt";
+file out_file4 : text open write_mode is "aft_dctmem.txt";
+file out_file5 : text open write_mode is "aft_dct2.txt";
+file out_file6 : text open write_mode is "aft_yccmem.txt";
+-- pragma translate_on
+
+begin
+   huffman : huff 
+   generic map(memtech => memtech,shindex => shindex , haddr => haddr, hmask => hmask,
+                hirq => hirq, pindex => pindex, paddr => paddr, pmask => pmask)
+   port map(rst => rst, clk => clk, ahbsi => ahbsi, ahbso => ahbso, apbi => apbi, apbo => apbo,
+             kready => kready1, kstrobe => kstrobe1, kdata => kdata1, kaddress => kaddress1, jpg_setting => jpg_setting, 
+             error => error, startgen => startgen, kstrobeq => kstrobeq, kdataq => kdataq1,
+             kaddq => kaddq, krddataq => krddataq,  krdq => krdq, logan_sig2 => logan_sig2);
+   
+   dctmem1 : huffmemcont
+   generic map(memtech => memtech)
+   port map(rst => rst, clk => clk, kready1 => kready1, kstrobe1 => kstrobe1, kaddress1 => kaddress1, kdata1 => kdata1, kready2 => kready2,
+            kstrobe2 => kstrobe2, kdata2 => kdata2, error =>error(0), samp_fact => jpg_setting.samp_fact,
+            kstrobeq1 => kstrobeq, kdataq1 => kdataq1, kdataq2 => kdataq2,
+            kaddq => kaddq, krdq => krdq, krddataq => krddataq, startgen => startgen);
+   
+   dct1 : idct1
+   port map(rst => rst, clk => clk, ready1 => kready2, strobe1 => kstrobe2, coeffin => kdata2,
+            quantin => kdataq2, outdata => kdata3, ready2 => kready3, strobe2 => kstrobe3, startgen => startgen);
+   
+   dctmem2 : dctmem2cont
+   generic map(memtech => memtech)
+   port map(rst => rst, clk => clk, kready1 => kready3, kstrobe1 => kstrobe3, kdata1 => kdata3,
+            kready2 => kready4, kstrobe2 => kstrobe4, kdata2 => kdata4, error => error(1), startgen => startgen);
+   
+   dct2 : idct2
+   port map(rst => rst, clk => clk, ready1 => kready4, strobe1 => kstrobe4, coeffin => kdata4,
+            outdata => kdata5, ready2 => kready5, strobe2 => kstrobe5, startgen => startgen); 
+   
+   yccmem : yccmemcont
+   generic map(memtech => memtech)
+   port map(rst => rst, clk => clk, kready1 => kready5, kstrobe1 => kstrobe5, kdata1 => kdata5,
+            kready2 => kready6, kstrobe2 => kstrobe6, kdata2 => kdata6, samp_fact => jpg_setting.samp_fact,
+            error => error(2), startgen => startgen);
+   
+   ycb : yccrgb
+   generic map(memtech => memtech, hirq => hirq, mhindex => mhindex,
+               chprot => chprot)
+   port map(rst => rst, clk => clk, ahbmi => ahbmi, ahbmo => ahbmo, kready => kready6,
+            kstrobe => kstrobe6, kdata => kdata6, xmcumax => jpg_setting.xmcumax, ymcumax => jpg_setting.ymcumax,
+            incaddy => jpg_setting.incaddy, incaddmcux => jpg_setting.incaddmcux, incaddmcuy => jpg_setting.incaddmcuy, 
+            fbstartadd => jpg_setting.fbstartadd, startgen => startgen);
+
+
+huffcounter : process(clk, rst, kstrobe1, kaddress1, count_r)
+  variable  count_v :std_logic_vector(31 downto 0);
+begin
+  count_v := count_r;
+  if(kstrobe1 = '1' and kaddress1 = "111111") then
+    count_v := count_v + 1;
+  end if;
+  if (rst='0')then
+    count_v := (others=>'0');
+  end if;
+end process;
+
+reg :process(clk)
+begin
+  if rising_edge(clk) then
+    count_r <= count_rin;
+  end if;
+end process;
+
+logan_sig <= logan_sig2
+--logan_sig <= kstrobe2  &  kdata2  & kstrobe1 & kaddress1 & kdata1 ;
+--    logan_sig <= count_r(16 downto 2)  & kstrobe3   &  kdata3    & kstrobe2  &  kdata2  & kstrobe1 & kaddress1 & kdata1 ;
+
+--                                15           1           16        1             12       1            6           12      
+
+
+
+
+-- pragma translate_off
+writeout : process(clk,kstrobe1, kstrobe2, kstrobe3, kstrobe4, kstrobe5,kstrobe6, kdata1, kdata2, kdata3,kdata4,kdata5,kdata6)
+variable lc1 : line;
+variable lc2 : line;
+variable lc3 : line;
+variable lc4 : line;
+variable lc5 : line;
+variable lc6 : line;
+variable data1 : std_logic_vector(11 downto 0);
+variable data2 : std_logic_vector(11 downto 0);
+variable data3 : std_logic_vector(15 downto 0);
+variable data4 : std_logic_vector(15 downto 0);
+variable data5 : std_logic_vector(7 downto 0);
+variable data6 : std_logic_vector(23 downto 0);
+
+begin
+   if rising_edge(clk)then
+       if (kstrobe1 = '1')then
+--           data1 := kdata1;
+           hwrite(lc1, kdata1, RIGHT, 3);
+           writeline(out_file1,lc1);
+       end if;
+       if (kstrobe2 = '1')then
+           hwrite(lc2, kdata2, RIGHT, 3);
+           writeline(out_file2,lc2);
+       end if;
+       if(kstrobe3 = '1')then
+           hwrite(lc3, kdata3, RIGHT, 4);
+           writeline(out_file3,lc3);
+       end if;
+       if (kstrobe4 = '1')then
+           hwrite(lc4, kdata4, RIGHT, 4);
+           writeline(out_file4,lc4);
+       end if;
+       if(kstrobe5 = '1')then
+           hwrite(lc5, kdata5, RIGHT, 2);
+           writeline(out_file5,lc5);
+       end if;
+       if(kstrobe6 = '1')then
+           hwrite(lc6, kdata6, RIGHT, 6);
+           writeline(out_file6, lc6);
+       end if;
+   end if;
+end process;
+-- pragma translate_on
+
+end;
+