[an error occurred while processing this directive]
Помогите начинающему - решили проект сделать (нужен буфер com-портов - 10 штук, работающих с разными скоростями), плюс простая логика, как это лучше сделать, где взять информацию(+)
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

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

Отправлено Andrey_ 18 марта 2004 г. 06:41

подробнее задача такая - компьютер обменивается с несколькими котроллерами по rs-232 на разных скоростях 50 - 600 бод через модемы и по разным каналам (радио, вч, кабель). надо поставить промежуточный контроллер который обменивается с компьютером быстро, а сам одновременно опрашивает все контроллеры и хранит у себя в буфере информацию.
плюс некоторая логика типа лампочек-кнопочек.
в наличии есть плис epm7128. попробовал такой код на vhdl - но в эту плис даже он один не лезет (maxplusII) хотя в active -hdl прекрасно компилируется и симулируется . где можно взять информацию (желательно на русском) в электронном виде? и вообще это в принципе может влезть в epm7128?


код

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_signed.all;
use ieee.std_logic_arith.all;
entity Serial is
port
(
load : in STD_LOGIC;
reset: in STD_LOGIC;
del_load : in STD_LOGIC;
clk : in STD_LOGIC;
d : inout STD_LOGIC_VECTOR (7 downto 0);
oclk : inout STD_LOGIC;
o : out STD_LOGIC ;
serial_in : in STD_LOGIC;
e : out STD_LOGIC;
tx: out STD_LOGIC --: <= '1' -- 1 передача, 0 байт передан

);
end;

architecture behavioral of Serial is
type t1 is range 0 to 12;
type byte_int is range 0 to 255;

begin
process (clk)
variable t : integer;
variable t_in : integer;
variable num_in_bit : integer;
variable delitel : integer :=5 ;
variable i: t1 ;--is range 0 to 255;
variable chet: STD_LOGIC := '0';
variable start : STD_LOGIC;
variable s : STD_LOGIC_vector (7 downto 0);
variable in_buf : STD_LOGIC_vector (8 downto 0);

begin

if reset = '1' then
i := 0;
else
if (clk'event and clk='1') then -- проверка на фронт импульса
if (i = 0 and load = '1' ) then -- проверка на загрузку данных
t:= delitel + 1;
s(7 downto 0) := d(7 downto 0);
o <= '0'; -- стартовый бит
tx <= '1'; -- идет передача
i := 12;
chet := '0'; -- инициализация бита четности
end if;
if (i = 0 and del_load = '1') then -- проверка на загрузку делителя
delitel := conv_integer(d);
t:= delitel;
t_in := delitel;

end if;
-- прием
if ( start = '0' and serial_in = '0') then
start := '1';
t_in := delitel + delitel/2;
num_in_bit := 0;
end if;
if (start = '1' and t_in = 0) then
t_in := delitel;
num_in_bit := num_in_bit + 1;
in_buf(7 downto 1) := in_buf (6 downto 0);
in_buf(0) := serial_in;
if num_in_bit > 8 then
start := '0';
end if;
else
t_in := t_in - 1;

end if;

--передача рабочий такт после деления
if (t = 0) then
t := delitel;
oclk <= not oclk;
if (i > 1) then
if ( i = 4 and chet = '1') then -- бит четности
o <= '1';
else
o <= s(0); -- посылка
if (s(0) = '1' ) then -- вычисление бита четности
chet := not chet;
end if;
end if;
if i = 3 then
o <= '0'; --стоповый бит
end if;
s(6 downto 0) := s(7 downto 1); -- сдвиг
i := i - 1;
end if;
if (i = 1) then
e <= '1';
i := 0;
o <= '1';
tx <= '0';
else
e <= '0';
end if;
else
t := t - 1;
end if;
-- входной такт
end if;
end if;

if i>0 then
-- oclk <= not clk;
else
oclk <= '0';
end if;
end process;
end behavioral;



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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru