Skip to content
Snippets Groups Projects
firUnit.vhd 4.13 KiB
-------------------------------------------------------------------------------
-- Title      : firUnit
-- Project    :
-------------------------------------------------------------------------------
-- File       : operativeUnit.vhd
-- Author     : Jean-Noel BAZIN  <jnbazin@pc-disi-026.enst-bretagne.fr>
-- Company    :
-- Created    : 2018-04-11
-- Last update: 2024-03-26
-- Platform   :
-- Standard   : VHDL'93/02
-------------------------------------------------------------------------------
-- Description: 8 bit FIR
-------------------------------------------------------------------------------
-- Copyright (c) 2018
-------------------------------------------------------------------------------
-- Revisions  :
-- Date        Version  Author  Description
-- 2018-04-11  1.0      jnbazin Created
-------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity firUnit is

    port (
        I_clock               : in  std_logic;                     -- global clock
        I_GlobalInit          : in  std_logic;                     -- asynchronous global reset
        I_inputSample         : in  std_logic_vector(7 downto 0);  -- 8 bit input sample
        I_inputSampleValid    : in  std_logic;
        O_filteredSample      : out std_logic_vector(7 downto 0);  -- filtered sample
        O_filteredSampleValid : out std_logic
        );

end entity firUnit;

architecture archi_firUnit of firUnit is

    component controlUnit is
        port (
            I_clock               : in  std_logic;
            I_GlobalInit          : in  std_logic;
            I_inputSampleValid    : in  std_logic;
            I_processingDone      : in  std_logic;
            O_loadShift           : out std_logic;
            O_initAddress         : out std_logic;
            O_incrAddress         : out std_logic;
            O_initSum             : out std_logic;
            O_loadSum             : out std_logic;
            O_loadY               : out std_logic;
            O_FilteredSampleValid : out std_logic);
    end component controlUnit;

    component operativeUnit is
        port (
            I_clock          : in  std_logic;
            I_inputSample    : in  std_logic_vector(7 downto 0);
            I_loadShift      : in  std_logic;
            I_initAddress    : in  std_logic;
            I_incrAddress    : in  std_logic;
            I_initSum        : in  std_logic;
            I_loadSum        : in  std_logic;
            I_loadY          : in  std_logic;
            O_processingDone : out std_logic;
            O_Y              : out std_logic_vector(7 downto 0));
    end component operativeUnit;

    signal SC_processingDone : std_logic;
    signal SC_loadShift      : std_logic;
    signal SC_initAddress    : std_logic;
    signal SC_incrAddress    : std_logic;
    signal SC_initSum        : std_logic;
    signal SC_loadSum        : std_logic;
    signal SC_loadY          : std_logic;

begin

    controlUnit_1 : entity work.controlUnit
        port map (
            I_clock               => I_clock,
            I_GlobalInit          => I_GlobalInit,
            I_inputSampleValid    => I_inputSampleValid,
            I_processingDone      => SC_processingDone,
            O_loadShift           => SC_loadShift,
            O_initAddress         => SC_initAddress,
            O_incrAddress         => SC_incrAddress,
            O_initSum             => SC_initSum,
            O_loadSum             => SC_loadSum,
            O_loadY               => SC_loadY,
            O_FilteredSampleValid => O_FilteredSampleValid);

    operativeUnit_1 : entity work.operativeUnit
        port map (
            I_clock          => I_clock,
            I_inputSample    => I_inputSample,
            I_loadShift      => SC_loadShift,
            I_initAddress    => SC_initAddress,
            I_incrAddress    => SC_incrAddress,
            I_initSum        => SC_initSum,
            I_loadSum        => SC_loadSum,
            I_loadY          => SC_loadY,
            O_processingDone => SC_processingDone,
            O_Y              => O_filteredSample);

end architecture archi_firUnit;