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')
|