OSDN Git Service

add GPL license on VHDL file. change motionJPEG file(GFDL).
[fpga-leon-mjpeg/leon-mjpeg.git] / grlib-gpl-1.0.22-b4095 / lib / kuri / mjpeg / idct2.vhd.bak
diff --git a/grlib-gpl-1.0.22-b4095/lib/kuri/mjpeg/idct2.vhd.bak b/grlib-gpl-1.0.22-b4095/lib/kuri/mjpeg/idct2.vhd.bak
deleted file mode 100644 (file)
index 23894eb..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-library grlib;
-use grlib.stdlib.all;
-
-
-
-entity idct2 is
-    port ( rst : in  std_ulogic;
-           clk : in  std_ulogic;
-           ready1 : out std_logic;
-           strobe1 : in std_logic;
-           coeffin : in  std_logic_vector (15 downto 0);
-           outdata : out  std_logic_vector (7 downto 0);
-           ready2 : in std_logic;
-           strobe2 : out std_logic
-           );
-end idct2;
-
-architecture rtl of idct2 is
-
-function mysigned_mul(a,b : std_logic_vector) return std_logic_vector is
-variable z : std_logic_vector(a'length + b'length -1 downto 0);
-begin
-    z := std_logic_vector(signed(a) * signed(b));
-    return(z);
-end;
-
-
-function mysigned_add(a,b : std_logic_vector) return std_logic_vector is
-variable ex_a : std_logic_vector(a'length downto 0);
-variable ex_b : std_logic_vector(b'length downto 0);
-variable z1 : std_logic_vector(a'length downto 0);
-variable z2 : std_logic_vector(b'length downto 0);
-begin
-    ex_a := a(a'left) & a;
-    ex_b := b(b'left) & b;
-    if( a'length > b'length)then
-       z1 := std_logic_vector(signed(ex_a) + signed(ex_b));
-       return(z1);
-    else
-       z2 := std_logic_vector(signed(ex_a) + signed(ex_b));
-       return(z2);
-    end if;
-end;
-
-function round1(indata : std_logic_vector(32 downto 0)) return std_logic_vector is
-variable judge :std_logic;
-variable z : std_logic_vector(14 downto 0);
-begin
-       judge := indata(17);
-       if (judge = '0') then
-               z := indata(32 downto 18);
-       else 
-               z := indata(32 downto 18) + 1;
-       end if;
-       return(z);
-end;
-
-function round2(indata : std_logic_vector(32 downto 0); pol : std_logic) return std_logic_vector is
-variable judge : std_logic;
-variable tmpdata : std_logic_vector(32 downto 0);
-variable z : std_logic_vector(14 downto 0);
-begin
-       if (pol = '1') then
-               tmpdata := not indata + 1 ;
-       else
-               tmpdata := indata;
-       end if;
-       judge := tmpdata(17);
-       if (judge = '1') then
-               z := tmpdata(32 downto 18) + 1;
-       else
-               z := tmpdata(32 downto 18);
-       end if;
-       return(z);
-end;
-
-constant S_ZERO : SIGNED := "0000000000";
-constant S_TWOFIVEFIVE : SIGNED := "0011111111";
-
-function round3(indata : std_logic_vector(17 downto 0)) return std_logic_vector is
-variable judge : std_logic;
-variable z : std_logic_vector(12 downto 0);
-variable value : integer;
-begin
-       judge := indata(4);
-       if (judge = '0') then
-               z := indata(17 downto 5);
-       else
-               z := indata(17 downto 5) + 1;
-       end if;
-       value := to_integer(signed(z));
-   if (value < -128) then
-       return("10000000");
-   end if;
-   if(value > 127) then
-       return("01111111");
-   end if;     
-       return(z(7 downto 0));
-end;
-
-                       
-
-subtype coeff23 is std_logic_vector(16 downto 0);
-type coeff_array1 is array(0 to 31) of coeff23;
-constant coeff_rom : coeff_array1 :=
-
-("01011010100000101","01011010100000101","01011010100000101","01011010100000101",
- "01111101100010101","01101010011011011","01000111000111010","00011000111110001",
- "01110110010000011","00110000111111000","11001111000001001","10001001101111101",
- "01101010011011011","11100111000001111","10000010011101100","10111000111000111",
- "01011010100000101","10100101011111100","10100101011111100","01011010100000101",
- "01000111000111010","10000010011101100","00011000111110001","01101010011011011",
- "00110000111111000","10001001101111101","01110110010000011","11001111000001001",
- "00011000111110001","10111000111000111","01101010011011011","10000010011101100");
-
-
-type tablereg_type is array (0 to 3) of std_logic_vector(16 downto 0);
-type accumulator_type is array (0 to 7) of std_logic_vector(17 downto 0);
-type resultreg_type is array (0 to 7) of std_logic_vector(7 downto 0);
-
-
-type d_reg is record
-   inreg : std_logic_vector(15 downto 0);
-       accumulator : accumulator_type;
-       result_reg : resultreg_type;
-end record;
-
-type c_reg is record
-       counter : std_logic_vector(6 downto 0);
-end record;
-
-type all_reg is record
-       data_reg : d_reg;
-       control_reg : c_reg;
-end record;
-       
-type node1_array is array (0 to 3) of std_logic_vector(16 downto 0);
-type node2_array is array (0 to 3) of std_logic_vector(32 downto 0);
-type node3_array is array (0 to 7) of std_logic_vector(14 downto 0);
-type node4_array is array (0 to 7) of std_logic_vector(17 downto 0);
-type node5_array is array (0 to 7) of std_logic_vector(18 downto 0);
-type node6_array is array (0 to 7) of std_logic_vector(7 downto 0);
-       
-signal r, rin : all_reg;
---signal sig_node1_0 : std_logic_vector(16 downto 0);
---signal sig_node2_0 : std_logic_vector(32 downto 0);
---signal sig_node3_0 : std_logic_vector(14 downto 0);
---signal sig_node4_0 : std_logic_vector(17 downto 0);
---signal sig_node5_0 : std_logic_vector(18 downto 0);
---signal sig_node6_0 : std_logic_vector(7 downto 0);
---signal sig_node1_3 : std_logic_vector(16 downto 0);
---signal sig_node2_3 : std_logic_vector(32 downto 0);
---signal sig_node3_4 : std_logic_vector(14 downto 0);
---signal sig_node4_4 : std_logic_vector(17 downto 0);
---signal sig_node5_4 : std_logic_vector(18 downto 0);
---signal sig_node6_4 : std_logic_vector(7 downto 0);
-
-
-begin
-
-comb : process(r, rst, strobe1, ready2, coeffin)
-       variable v : all_reg;
-       variable node1 : node1_array;
-       variable node2 : node2_array;
-       variable node3 : node3_array;
-       variable node4 : node4_array;
-  variable node5 : node5_array;
-       variable node6 : node6_array;
-       variable node7 : std_logic_vector(9 downto 0);
-       variable node8 : std_logic_vector(9 downto 0);
-       variable pol : std_logic;
-
-       variable count_num : integer;
-       variable vstrobe2 : std_logic;
-       variable vready1 : std_logic;
-begin
-       
-       v := r;
-       vstrobe2 := '0';
-       count_num := to_integer(unsigned(r.control_reg.counter));
-       
-       v.data_reg.inreg := coeffin;
-       
-       case count_num is
-       when 2 | 10 | 18 | 26 | 34 | 42 | 50 | 58 =>
-               node1(0) := coeff_rom(4);
-               node1(1) := coeff_rom(5);
-               node1(2) := coeff_rom(6);
-               node1(3) := coeff_rom(7);
-       when 3 | 11 | 19 | 27 | 35 | 43 | 51 | 59 =>
-               node1(0) := coeff_rom(8);
-               node1(1) := coeff_rom(9);
-               node1(2) := coeff_rom(10);
-               node1(3) := coeff_rom(11);
-       when 4 | 12 | 20 | 28 | 36 | 44 | 52 | 60 =>
-               node1(0) := coeff_rom(12);
-               node1(1) := coeff_rom(13);
-               node1(2) := coeff_rom(14);
-               node1(3) := coeff_rom(15);
-       when 5 | 13 | 21 | 29 | 37 | 45 | 53 | 61 =>
-               node1(0) := coeff_rom(16);
-               node1(1) := coeff_rom(17);
-               node1(2) := coeff_rom(18);
-               node1(3) := coeff_rom(19);
-       when 6 | 14 | 22 | 30 | 38 | 46 | 54 | 62 =>
-               node1(0) := coeff_rom(20);
-               node1(1) := coeff_rom(21);
-               node1(2) := coeff_rom(22);
-               node1(3) := coeff_rom(23);
-       when 7 | 15 | 23 | 31 | 39 | 47 | 55 | 63 =>
-               node1(0) := coeff_rom(24);
-               node1(1) := coeff_rom(25);
-               node1(2) := coeff_rom(26);
-               node1(3) := coeff_rom(27);
-       when 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 =>
-               node1(0) := coeff_rom(28);
-               node1(1) := coeff_rom(29);
-               node1(2) := coeff_rom(30);
-               node1(3) := coeff_rom(31);              
-       when others =>
-               node1(0) := coeff_rom(0);
-               node1(1) := coeff_rom(1);
-               node1(2) := coeff_rom(2);
-               node1(3) := coeff_rom(3);
-       end case;
-       
-       for i in 0 to 3 loop
-          node2(i) := mysigned_mul(node1(i), r.data_reg.inreg);
-          node3(i) := round1(node2(i));
-       end loop;
-       
-       
---     when 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 | 21 | 23 | ..... | 65 
--- when 2   4   6   8   10   12   14   16   18   20   22           64  
-
-       if((count_num mod 2) = 0 and (count_num >= 2) and (count_num <= 64))then
-               pol := '1';
-       else
-               pol := '0';
-       end if;
-                       
-       node3(4) := round2(node2(3), pol);
-       node3(5) := round2(node2(2), pol);
-       node3(6) := round2(node2(1), pol);
-       node3(7) := round2(node2(0), pol);
-       
-       if((count_num = 1) or (count_num = 9) or (count_num = 17) or (count_num = 25) or (count_num = 33) or (count_num = 41) or (count_num = 49) or (count_num = 57)) then
-               for i in 0 to 7 loop
-                  node4(i) := (others => '0');
-               end loop;
-       else
-          for i in 0 to 7 loop
-             node4(i) := r.data_reg.accumulator(i);
-          end loop;
-       end if;
-
-   for i in 0 to 7 loop
-      node5(i) := mysigned_add(node3(i), node4(i));
-      v.data_reg.accumulator(i) := node5(i)(17 downto 0);
-      node6(i) := round3(r.data_reg.accumulator(i));
-   end loop;
-       
-       if((count_num = 9) or (count_num = 17) or (count_num = 25) or (count_num = 33) or (count_num = 41) or (count_num = 49) or (count_num = 57) or (count_num = 65)) then
-               for i in 0 to 7 loop
-                  v.data_reg.result_reg(i) := node6(i);
-               end loop;
-       else
-          for i in 0 to 6 loop
-             v.data_reg.result_reg(i) := r.data_reg.result_reg(i+1);
-          end loop;
-          v.data_reg.result_reg(7) := (others => '0');
-       end if;
-
-       node7 := mysigned_add(r.data_reg.result_reg(0),"010000000");
-
-   if((count_num >= 10) and (count_num <= 73))then
-      vstrobe2 := '1';
-   end if; 
-
--- controller part
-   if ((count_num = 0 and strobe1 = '1') or count_num /= 0) then
-       v.control_reg.counter := std_logic_vector(to_unsigned(count_num + 1,7));
-       if(count_num = 73)then
-           v.control_reg.counter := (others => '0');
-       end if;
-   end if;
-   vready1 := '0';
-   if(ready2 = '1' and count_num <= 63)then
-       vready1 := '1';
-   end if;
-   
--- reset part
-   if rst = '0' then
-       for i in 0 to 7 loop
-          v.data_reg.accumulator(i) := (others => '0');
-          v.data_reg.result_reg(i) := (others => '0');
-       end loop;
-       v.control_reg.counter := (others => '0');
-   end if; 
-         
--- signal
-       outdata <= node7(7 downto 0);
-       strobe2 <= vstrobe2;
-       ready1 <= vready1;
-       rin <= v;
-
--- debug
---   sig_node1_0 <= node1(0);
---   sig_node2_0 <= node2(0);
---   sig_node3_0 <= node3(0);
---   sig_node4_0 <= node4(0);
---   sig_node5_0 <= node5(0);
---   sig_node6_0 <= node6(0);
---   sig_node1_3 <= node1(3);
---   sig_node2_3 <= node2(3);
---   sig_node3_4 <= node3(4);
---   sig_node4_4 <= node4(4);
---   sig_node5_4 <= node5(4);
---   sig_node6_4 <= node6(4);
-end process;
-
--- registers
-reg : process(clk)
-begin
-       if rising_edge(clk) then
-               r <= rin;
-       end if;
-end process;
-
-end rtl;
-