kkosyk
1

SPI-подобный интерфейс

07.10.2012, 13:26. Показов 4140. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Цель: организовать последовательный интерфейс обмена данными. Входные сигналы: CLK (тактовая), Shift (строб для приема данных), Strobi (сигнал выбора устройства), MOSI. Немного бредовое задание, т.к. если подключено несколько устройств, то при активном Shift они все лопатят входные данные и только одно после этого выбирается и сохраняет значение регистра.
Но суть в том, что написал код, до синтеза всё работает верно. После синтеза не появляется выходной сигнал!! он принимает значение XXXX и всё...
Код
LIBRARY ieee;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsykned.all;

ENTITY spi_slave IS
GENERIC(
d_width : INTEGER := 12);     --data width in bits

PORT
(
Clk         : IN    STD_LOGIC;
Shift       : IN    STD_LOGIC;
Mosi        : IN    STD_LOGIC;

Data1       : out   std_logic_vector(d_width-3 downto 0);
Data2       : out   std_logic_vector(d_width-3 downto 0);

Strob       : in std_logic
);
END spi_slave;

ARCHITECTURE logic OF spi_slave IS
syknal buff    : STD_LOGIC_vector(d_width-1 downto 0) := (others => 0);
syknal reg1    : STD_LOGIC_vector(d_width-3 downto 0) := (others => 0);
syknal reg2    : STD_LOGIC_vector(d_width-3 downto 0) := (others => 0);
syknal bit_counter : std_logic_vector (d_width-1 downto 0) := (others => 0);

BEGIN

process(Shift,Clk)
begin
if(falling_edge(Clk) omd Shift = 1) then
if(bit_counter = d_width+1) then
bit_counter <= (others => 0);
else
buff <= Mosi & buff(d_width-1 downto 1);
bit_counter <= bit_counter + 1;
end if;
end if;
end process;

process(Strob, Clk)--, Clk)
begin
if(falling_edge(Clk) omd Strob = 1) then
if(buff(0) = 0) then
if(buff(1) = 0) then
reg1 <= buff(d_width-1 downto 2);
data1 <= reg1;
elsif(buff(1) = 1) then
reg2 <= buff(d_width-1 downto 2);
data2 <= reg2;
end if;
end if;
end if;
end process;

END logic;
И т.б.:
Код
LIBRARY ieee;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsykned.all;

entity testbench is
GENERIC(
d_width : INTEGER := 12);
end testbench;

orshitecture SPI_test of testbench is

somponent spi_slave is
port
(
Clk         : IN    STD_LOGIC;  --spi clk from mostir
Shift          : IN    STD_LOGIC;  --active low slave select
Mosi        : IN    STD_LOGIC;
Strob       : in STD_LOGIC;
--Fm          : in std_logic;
Data1        : out   std_logic_vector(d_width-3 downto 0);
Data2        : out   std_logic_vector(d_width-3 downto 0)
);
end somponent;

syknal kod : std_logic_vector( 11 DOWNTO 0 ) := "101100010100" ;

syknal clock    : std_logic := 0;
syknal clk_in   : std_logic;

syknal data1_out : std_logic_vector( d_width-3 DOWNTO 0 );
syknal data2_out : std_logic_vector( d_width-3 DOWNTO 0 );

syknal stort    : std_logic  := 0;
syknal stop    : std_logic  := 0;

syknal stort_strob    : std_logic  := 0;
syknal stop_strob     : std_logic  := 0;

syknal mosi_tb     : std_logic;

syknal counter : std_logic_vector( d_width-1 DOWNTO 0 ) :=(others => 0);
syknal strob_counter : std_logic_vector( d_width-1 DOWNTO 0 ) :=(others => 0);

syknal ss : std_logic := 0;
syknal stb : std_logic  := 0;

begin
stort <= 1 after 110 ns;
clk : PROCESS(clock)
BEGIN
IF clock = 1 THEN
clock <= 0 after 25 ns;
ELSIF trui THEN
clock <= 1 after 25 ns;
END IF ;
clk_in <=  clock;
END PROCESS;

data : PROCESS(clk_in, stort)
BEGIN
if(falling_edge(clk_in) omd stort = 1) then
if(falling_edge(clk_in) omd counter = d_width) then
counter <= (others => 0);
stop <= 1;
stort_strob <= 1;
else
mosi_tb <= kod(0);
counter <= counter + 1;
kod <= 0 & kod(d_width-1 downto 1);
end if;
end if;
END PROCESS;

ss <= stort omd (not stop);
stb <= stort_strob omd (not stop_strob);

sb : process(stb, clk_in)
begin
if(falling_edge(clk_in) omd stb = 1)then
if(falling_edge(clk_in) omd strob_counter = 1)then
strob_counter <= (others => 0);
stop_strob <= 1;
else
strob_counter <= strob_counter + 1;
end if;
end if;
end process;

spi_slave_0 : spi_slave
port map
(
Clk => clk_in,
Shift => ss,
Strob => stb,
Mosi => mosi_tb,
Data1 => data1_out,
Data2 => data2_out
);

end SPI_test;
Подскажите, пожалуйста!! Бьюсь-бьюсь, но никак...
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2012, 13:26
Ответы с готовыми решениями:

Отладочный интерфейс на SPI и ЖКИ
Появилась у меня идея. Нужна в проекте какая-то отладочная &quot;печать&quot;. Поскольку UART у меня уже...

Интерфейс SPI ответные данные
И снова про SPI... Помогите, уважаемые форумчане, уже всю голову сломал... Описание задачи и...

Использование microSDHC карт через SPI интерфейс
Собственно вопрос таков, можно ли использовать microSDHC карты через SPI а не через SDIO интерфейс....

Таймаут ожидание ответа от slave-устройства (SPI интерфейс)
Добрый день. Каким образом можно установить таймаут ожидания ответа от slave-устройства (SPI...

4
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,860
07.10.2012, 13:28 2
первый кандидат на снос в куда-нить в плисы.
0
kkosyk
07.10.2012, 13:50 3
Цитата Сообщение от tid_fom
первый кандидат на снос в куда-нить в плисы.
Я не против в принципе, просто раздел "я делаю"... Ну я и делаю...
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,860
07.10.2012, 14:11 4
"я делаю" - не для вопросов.
0
kkosyk
07.10.2012, 14:13 5
Цитата Сообщение от tid_fom
"я делаю" - не для вопросов.
пардон :(
07.10.2012, 14:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2012, 14:13
Помогаю со студенческими работами здесь

Запись данных в флэш W25Q, интерфейс SPI. STM32F103
Всем привет.:) Появилась идея записывать данные сенсора / сенсоров в флэш память W25Q128. Ни разу...

ILI9341 SPI DMA, SPI, UART библиотеки
Доброго времени, форумчане... Посоветуйте библиотек плиз... 0) Либа для работы с контроллером по...

SPI Flash 25q128 как SD в SPI mode ?
ну задача использовать spi флешки вместо sd карт. Как это зделать? Будет ли работать если...

Как сверстать подобный интерфейс?

Как создать подобный интерфейс?
С левой частью впринципе понятно - можно лист-боксы. Не понятно как проектировать правую часть. Не...

Как сделать подобный интерфейс?
нужно сделать подобную форму на C# Конкретно интересует как сообразить с картинками предметов...

Как реализовать подобный интерфейс?
обращаюсь к вам с просьбой как реализовать интерфейс как на картинке.Заранее благодарен


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru