OpenCores
URL https://opencores.org/ocsvn/deflatecore/deflatecore/trunk

Subversion Repositories deflatecore

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/trunk/.cvspass
0,0 → 1,?rev2len?
:pserver:smallcode@cvs.opencores.org:/cvsroot/smallcode ARyeew1_
/trunk/HashChain.vhd
0,0 → 1,135
--------------------------------------------------------------------------------
-- Company:
-- Engineer:
-- Create Date: 03:46:54 10/31/05
-- Design Name:
-- Module Name: Hash - Behavioral
-- Project Name: Deflate
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
--------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.std_logic_unsigned.all;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
 
entity HashChain is
Port ( Data_in : in std_logic_vector (7 downto 0); -- Data input from byte stream
Hash_o : out real; -- Hash value of previous data
Clock, -- Clock
Reset, -- Reset
Output_E : in bit -- Output Enable
);
end HashChain;
 
 
--From Robert Sedgwicks Algorithms in C
architecture RSHash of HashChain is
signal mode,
data : integer;
 
begin
mode <= 0 when clock = '1' and reset = '0' and Output_E = '1' else -- Active data being latched to output
1 when clock = '0' and reset = '0' and Output_E = '1' else -- No change to output till thge next clock
2 when clock = '1' and reset = '1' and Output_E = '1' else -- Reset active
2 when clock = '1' and reset = '1' and Output_E = '0' else -- Reset active
3 when clock = '1' and reset = '0' and Output_E = '0' else -- Disable output
4;
--data <= Data_in; --Need to convert the input standard logic input to a form that can be processed using arthimetic
Process (mode)
variable a, b, hash : real ; -- Variables for calculating the output
begin
case mode is
when 0 => --Calculate the hash key of the current input value using the Data on the input vector
hash := hash * a;
hash := hash + data;
a := a * b;
when 2 =>
hash := 0.0; -- Reset
a:=378551.0; -- Reset
b:=63689.0; -- Reset
when 3=> -- Need to implement a disable output section
 
when OTHERS => -- Do nothing
 
End case;
hash_o<= hash; -- Assign the clculated hash value to the output
end process;
end RSHash;
 
--An algorithm produced by Professor Daniel J. Bernstein and
--shown first to the world on the usenet newsgroup comp.lang.c.
--It is one of the most efficient hash functions ever published
--Actual function hash(i) = hash(i - 1) * 33 + str[i];
--Function now implemented using XOR hash(i) = hash(i - 1) * 33 ^ str[i];
architecture DJB of HashChain is
signal mode,
data : integer;
 
begin
mode <= 0 when clock = '1' and reset = '0' and Output_E = '1' else -- Active data being latched to output
1 when clock = '0' and reset = '0' and Output_E = '1' else -- No change to output till thge next clock
2 when clock = '1' and reset = '1' and Output_E = '1' else -- Reset active
2 when clock = '1' and reset = '1' and Output_E = '0' else -- Reset active
3 when clock = '1' and reset = '0' and Output_E = '0' else -- Disable output
4;
--data <= Data_in; --Need to convert the input standard logic input to a form that can be processed using arthimetic
Process (mode)
variable a, b, hash : real ; -- Variables for calculating the output
begin
case mode is
when 0 => --Calculate the hash key of the current input value using the Data on the input vector
a := hash * 33.0;
hash := a + hash + data;
when 2 =>
hash := 5831.0; -- Reset
when 3=> -- Need to implement a disable output section
 
when OTHERS => -- Do nothing
 
End case;
hash_o<= hash; -- Assign the clculated hash value to the output
end process;
end DJB;
 
 
--This algorithm was created for sdbm (a public-domain reimplementation of ndbm) database library.
--it was found to do well in scrambling bits, causing better distribution of the keys and fewer splits.
--it also happens to be a good general hashing function with good distribution.
--the actual function is hash(i) = hash(i - 1) * 65599 + str[i];
architecture sdbm of HashChain is
signal mode,
data : integer;
 
begin
mode <= 0 when clock = '1' and reset = '0' and Output_E = '1' else -- Active data being latched to output
1 when clock = '0' and reset = '0' and Output_E = '1' else -- No change to output till thge next clock
2 when clock = '1' and reset = '1' and Output_E = '1' else -- Reset active
2 when clock = '1' and reset = '1' and Output_E = '0' else -- Reset active
3 when clock = '1' and reset = '0' and Output_E = '0' else -- Disable output
4;
--data <= Data_in; --Need to convert the input standard logic input to a form that can be processed using arthimetic
Process (mode)
variable a, b, hash : real ; -- Variables for calculating the output
begin
case mode is
when 0 => --Calculate the hash key of the current input value using the Data on the input vector
a := hash * 65599.0;
hash := a + hash + data;
when 2 =>
hash := 0.0; -- Reset
when 3=> -- Need to implement a disable output section
 
when OTHERS => -- Do nothing
 
End case;
hash_o<= hash; -- Assign the clculated hash value to the output
end process;
end sdbm;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.