| ??? 02/16/06 20:47 Read: times | #110183 - as requested a demo.....,sort of Responding to: ???'s previous message | 
| A digital intgrator is basicaly an adder plus an accumulator with a reset input, so this example one which ive used for earlier projects so it will do to demostrate the idea.it takes the sampled input adds an offset, then adds that result to the result in the accumulator.I havent written the code for the adder because that can be any type of adder we choose,same with the i/o its not memory mapped just plain old in/out.How fast it is depends mainly on how big we make the adders and if they are carry ripple or carry propagate and generate, but 20 Mhz would be very easy.
 
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity addacc is
   port (
    clock  : in  bit;
    rst    : in  bit; -- active high reset      
    acc    : in  bit_vector (10 downto 0); -- sample from adc
    result : out bit_vector (11 downto 0);
    offset : in  bit_vector (10 downto 0)
    );
end addacc;
architecture structural of addacc is
   component adder_10bit
      port (
      addend_10bit   : in  bit_vector (10 downto 0);
      augend_10bit   : in  bit_vector (10 downto 0);
      adder10_output : out bit_vector (11 downto 0)
      );
   end component;
signal result_adder01     : bit_vector (11 downto 0);
signal result_adder02     : bit_vector (11 downto 0);
signal result_adder02_reg : bit_vector (11 downto 0);
begin
adder01 : adder_10bit -- first adder to add adc sample and offset
  port map (
  addend_10bit     => offset,
  augend_10bit     => acc,
  adder10_output   => result_adder01
  );
adder02 : adder_10bit --second adder to add result from first adder to the result from accumulator
  port map (
  addend_10bit     => result_adder01,
  augend_10bit     => result_adder02_reg,
  adder10_output   => result_adder02
  );
  process (clock,rst)
  begin
          if  (rst='1') then
                result_adder02_reg <=(others=>'0');
          elsif ((clock = '1') and clock'event) then
                  result_adder02_reg <= result_adder02;
                  result <= result_adder02;
          end if;
  end process;
end structural;
The i/o could be made memory mapped if needed | 




