[an error occurred while processing this directive]
|
Это часть проекта в которой реализован 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: info@telesys.ru