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

Subversion Repositories spiadc

[/] [spiadc/] [trunk/] [adcrecv.vhd] - Diff between revs 2 and 3

Show entire file | Details | Blame | View Log

Rev 2 Rev 3
Line 9... Line 9...
--------------------------------------------------------------------
--------------------------------------------------------------------
-- Description : (win1251) SPI мастер-приемник с минимальными затратами ресурсов.
-- Description : (win1251) SPI мастер-приемник с минимальными затратами ресурсов.
--      и возможностью выдачи shut-down посылки. Преназначено для загрузки АЦП AD747x.
--      и возможностью выдачи shut-down посылки. Преназначено для загрузки АЦП AD747x.
--      Может загружать настраиваемую часть SPI последовательности (кусок).
--      Может загружать настраиваемую часть SPI последовательности (кусок).
--              формирует последовательность вхождения и выхода из посылки сигналов nSS и SCK:
--              формирует последовательность вхождения и выхода из посылки сигналов nSS и SCK:
--                  после посылка обозначается активным nSS('0'), на старте посылки SCK='1' полтакта
--          посылка обозначается активным nSS('0'), на старте посылки SCK='1' полтакта
--          загружаются биты по переднему фронту SCK, последний бит посылки неимеет заднего
--          загружаются биты по переднему фронту SCK, последний бит посылки неимеет заднего
--           фронта, SCK = '1' все пассивное время.
--           фронта, SCK = '1' все пассивное время.
 
 
-- Description : SPI master-receiver minimalistic costs
-- Description : SPI master-receiver minimalistic costs
--      intended for loading ADC AD747x, capable produce shut-down frames.
--      intended for loading ADC AD747x, capable produce shut-down frames.
--      can load tunable part of frame. generate entry/exit sequences on nSS, SCK:
--      can load tunable part of frame. generate entry/exit sequences on nSS, SCK:
--          activate nSS='0' on frame transfer, SCK='1' for half clock cycle at frame start,
--          activate nSS='0' on frame transfer, SCK='1' for half clock cycle at frame start,
--          data loads on rising front SCK, last frame bit have no falling edge SCK,
--          data loads on rising front SCK, last frame bit have no falling edge SCK,
--          SCK='1' durung inactive period.   
--          SCK='1' durung inactive period.   
 
 
 
--   SDLen, SDMax:
 
        -- sets len of short spi sequence for poweroff purposes short (SDLen) and maximum (SDMax) length
 
--   QuietLen:
 
        -- requred TimeOut before start 
 
--   Start:
 
        --Start lock on rising CLK, and changes ignores during transmition. if one still high after transmition 
 
        --   ends, then new frame starts after QuietLen timeout if ContinueStart not active
 
--   ContinueStart:
 
        -- if false then spi produce controling sequense of xfer entry and inter-frame pause
 
        -- else spi start new frame xfer immeidate after completing current frame
 
--   ShutDown
 
        -- locks by high level, after Shuting down complete new SutDown sequence can be forced by Start
 
        -- if one activate during transmition, then it forces current frame to close if it can (beetween SDLen..SDMax bits)
 
        --    or generate short shutdown frame after completing current frae else
 
--   Ready:
 
        -- rising edge of ready can be used for loading DQ data to dest.
 
--   Shift:
 
        -- shift clock for internal data register  intended to expand load logic to parallel loading registers, 
 
        -- to make a multi chanel reciever
 
--   Sleeping
 
        -- State of ADC power mode - is it shutdowned.
--------------------------------------------------------------------
--------------------------------------------------------------------
-- $Log$
-- $Log$
--------------------------------------------------------------------
--------------------------------------------------------------------
 
 
LIBRARY ieee;
LIBRARY ieee;
Line 33... Line 55...
        -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
        -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
    GENERIC(
    GENERIC(
        SPILen      : positive  := 16;
        SPILen      : positive  := 16;
        DataLen     : positive  := 16;
        DataLen     : positive  := 16;
        DataOffset  : natural   := 0;
        DataOffset  : natural   := 0;
        -- ShutDownLen sets len of short spi sequence for poweroff purposes
 
        SDLen       : natural   := 1;
        SDLen       : natural   := 1;
        SDMax       : natural   := 10;
        SDMax       : natural   := 10;
        -- requred TimeOut before start 
 
        QuietLen    : natural   := 1
        QuietLen    : natural   := 1
    );
    );
        PORT
        PORT
        (
        (
        CLK     : IN STD_LOGIC;
        CLK     : IN STD_LOGIC;
        Start   : IN STD_LOGIC;
        Start   : IN STD_LOGIC;
 
 
        -- if false then spi produce controling sequense of xfer entry and inter-frame pause
 
        -- else spi start new frame xfer immeidate after completing current frame
 
        ContinueStart : in STD_LOGIC := '0';
        ContinueStart : in STD_LOGIC := '0';
        ShutDown: IN STD_LOGIC;
        ShutDown: IN STD_LOGIC;
        reset   : IN STD_LOGIC;
        reset   : IN STD_LOGIC;
 
 
        SDI     : IN STD_LOGIC;
        SDI     : IN STD_LOGIC;
        SCK     : OUT STD_LOGIC;
        SCK     : OUT STD_LOGIC;
        nSS     : OUT STD_LOGIC;
        nSS     : OUT STD_LOGIC;
 
 
        DQ      : OUT std_logic_vector(DataLen-1 downto 0);--STD_LOGIC_2D(Chanels-1 downto 0, DataLen-1 downto 0);
        DQ      : OUT std_logic_vector(DataLen-1 downto 0);--STD_LOGIC_2D(Chanels-1 downto 0, DataLen-1 downto 0);
        -- rising edge of ready can be used for loading DQ data to dest.
 
        Ready   : OUT STD_LOGIC;
        Ready   : OUT STD_LOGIC;
        -- used to expand load logic to parallel loading registers, to make a multi chanel reciever
        Shift   : OUT STD_LOGIC;
        Shift   : OUT STD_LOGIC
        Sleeping : OUT STD_LOGIC
        );
        );
        -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
        -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
 
 
END AdcRecv;
END AdcRecv;
 
 
Line 130... Line 146...
       elsif falling_edge(enable) then
       elsif falling_edge(enable) then
            SDDone      <= SDEnough;
            SDDone      <= SDEnough;
        end if;
        end if;
    end process;
    end process;
 
 
 
    Sleeping <= SDDone;
 
 
    Qsafer: if QuietLen > 1 generate
    Qsafer: if QuietLen > 1 generate
                QuietOk <= '1' when (QuietCnt >= QuietLen) else '0';
                QuietOk <= '1' when (QuietCnt >= QuietLen) else '0';
 
 
        QuietCounter: process(FSMState, reset, CLK, QuietOk) is begin
        QuietCounter: process(FSMState, reset, CLK, QuietOk) is begin
                        if (reset = '1')
                        if (reset = '1')

powered by: WebSVN 2.1.0

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