[an error occurred while processing this directive]
Вопрос по SPI на VHDL.
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

миниатюрный аудио-видеорекордер mAVR

Отправлено d_y 25 октября 2004 г. 13:34

Это часть проекта в которой реализован SPI.
Проверяем 16 бит и в зависимости от его состояния выставляем '0' на WRITE_s и по заднему фронту KOMAND необходимо записать входные данные IN_DATA в SPI регистр.

В чем собственно проблема :
Не работает присвоение SPI_REG(1 to 8):=IN_DATA. SPI при этом перестает работать вообще.
RTL view Synplify показывает что вход SPI - SDI ни куда не подсоединен.
Если закоментировать
if KOMAND'event and KOMAND='0' then
if SPI_REG(16)='0' then SPI_REG(1 to 8):=IN_DATA;
end if;
то SPI работает.
Но при этом в RTL view Synplify клок SPI - io_clk_in тоже ни куда не подсоединен, хотя при моделировании SPI работает.
Моделировал в Quartus, проверял и на кристалле.
Писалось в Synplify, потом переносил в Quartus.

-- SPI UNIT

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;


ENTITY SPI IS
PORT (io_clk_in, SDI,KOMAND : IN STD_LOGIC; -- io_clk_in - SCK SPI, SDI - вход SPI,KOMAND - SS SPI
SDO : out STD_LOGIC; -- выход SPI
SPI_adr : OUT STD_LOGIC_VECTOR(0 TO 7); -- адрес для обмена
IN_DATA : IN STD_LOGIC_VECTOR(0 TO 7); -- вход данных
OUT_DATA : OUT STD_LOGIC_VECTOR(0 TO 7); -- выход данных
WRITE : OUT STD_LOGIC --строб записи
) ;
END SPI;


ARCHITECTURE SDEV OF SPI IS
SIGNAL SPI_Shift_signal :STD_LOGIC_VECTOR(0 TO 17);
signal WRITE_s : STD_LOGIC;
signal SPI_adr_s : STD_LOGIC_VECTOR (0 to 7);

BEGIN

spishift: process (io_clk_in,SDI,KOMAND)
variable SPI_REG :STD_LOGIC_VECTOR(0 TO 17);
begin

if KOMAND='0' then
if io_clk_in'event and io_clk_in='1' then
SPI_REG(0) := SDI;
end if;
if io_clk_in'event and io_clk_in='0' then
for i in 17 downto 1 loop
SPI_REG(i) := SPI_REG(i-1);
end loop;
end if;
WRITE_s<='0';
else if SPI_REG(16)='1' then WRITE_s<='0'; --записать
else WRITE_s<='1';
end if;
end if;
if KOMAND'event and KOMAND='1' then

SPI_adr_s<=SPI_REG(9 to 16); --запись адреса

end if;
if KOMAND'event and KOMAND='0' then
if SPI_REG(16)='0' then SPI_REG(1 to 8):=IN_DATA; --запись данных в регистр SPI
end if;
end if;


SPI_adr<= SPI_adr_s ;
SPI_Shift_signal<=SPI_REG;
OUT_DATA<=SPI_REG(1 to 8); --выходная шина данных.
SPI_adr<=SPI_REG(9 to 16); -- адрес
end process;

WRITE<=WRITE_s;
SDO<=SPI_Shift_signal(17);

END SDEV;


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru