Например TDA7294

 Форум РадиоКот • Просмотр темы - Передача данных с буферной памяти ПЛИС на МК
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Чт окт 18, 2018 01:11:33



Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Передача данных с буферной памяти ПЛИС на МК
СообщениеДобавлено: Чт май 25, 2017 17:15:51 
Родился

Зарегистрирован: Чт май 25, 2017 17:02:56
Сообщений: 3
Рейтинг сообщения: 0
Добрый день! Прошу прощения, если я плохо смотрел форум и такая тема уже существует! В таком случае, пожалуйста перенаправьте!
Ситуация следующая: я получаю на ПЛИС байты данных на частоте 33МГц. Эти данные мне нужно передать в микроконтроллер для дальнейшей обработки. ПЛИС - EPM240T100A5, МК - ATmega 2560. Так как частоты работы разные, появилась идея создать буферную память, куда будут поступать данные с шины, а уже с буфера на частоте МК передавать ему данные.
Пожалуйста помогите с решением, т.к. времени до сдачи проекта осталось очень мало, а на данном этапе я застрял в связи с небольшими знаниями в области ПЛИС.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача данных с буферной памяти ПЛИС на МК
СообщениеДобавлено: Чт май 25, 2017 17:48:15 
Друг Кота
Аватар пользователя

Карма: 8
Зарегистрирован: Пн июл 13, 2009 15:37:39
Сообщений: 3931
Откуда: Московская область, наукоград.....
Рейтинг сообщения: 0
Строго говоря дело безнадежное.
scorpein писал(а):
получаю на ПЛИС байты данных на частоте 33МГц.

Сколько байт и за какое время?
Сколько при этом времени МК обрабатывает данные?
Ответив на эти вопросы можно начать думать.
Но, больно подозрительна частота - случайно не PCI?
У Вашей CPLD всего навсего 240 регистров, грубо 30 байт, если вычесть затраты на обращения между мк и ПК(?) то останется еще меньше.
Боюсь Вам надо вместо epmки ставить хотя бы cyclon III, емкостью в 25 тыс вентилей. Тогда можно сделать буфер емкостью в 32кБайт.

_________________
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже


Вернуться наверх
 Профиль  
 
JLCPCB, 10 прототипов ПП всего за $2 и 2 дня доставка!

Крупнейший производитель печатных плат в Китае, 300,000+ заказчиков, 10,000+ он-лайн заказов в день.

Рассчитайте цену онлайн:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Передача данных с буферной памяти ПЛИС на МК
СообщениеДобавлено: Пт май 26, 2017 08:27:58 
Родился

Зарегистрирован: Чт май 25, 2017 17:02:56
Сообщений: 3
Рейтинг сообщения: 0
Спасибо за ответ! Почти угадали с PCI, но не она, а шина LPC - это обновлённая ISA, а частоту на ней сделали 33, как в PCI.
С ПЛИСа я обращаюсь к 80 порту, который выводится в шине LPC, с него получаю байты данных. за несколько секунд (5-10) можно получить порядка 20 байт.
Пока что я ещё не организовывал никакой связи между МК и ПЛИС. МК должен просто получать последовательно эти байты и согласно им выводить некую информацию на дисплей.
К сожалению поменять ПЛИС я уже не могу..

Total logic elements 48 / 240 ( 20 % )
Total pins 23 / 80 ( 29 % )
Total virtual pins 0
UFM blocks 0 / 1 ( 0 % )

Добавлено after 2 hours 33 minutes 3 seconds:
Я выделил память штатными средствами. Пожалуйста посмотрите код.
Код:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.STD_LOGIC_ARITH.ALL;
--use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity LPC_IOW80 is

   -- разрядность шин
generic
   (
      DATA_WIDTH : natural := 3;
      ADDR_WIDTH : natural := 5
   );
   
Port
(
lclk: in std_logic; -- LPC: 33MHz clock (rising edge)
lframe_n: in std_logic; -- LPC: frame, active low
lreset_n: in std_logic; -- LPC: reset, active low
lad: in std_logic_vector(3 downto 0); -- LPC: multiplexed bus

        --назначение портов для памяти
      addr   : in natural range 0 to 2**ADDR_WIDTH - 9;

      we      : in std_logic := '1';
      q      : out std_logic_vector((2**DATA_WIDTH -5) downto 0)

);
end LPC_IOW80;

architecture RTL of LPC_IOW80 is
type LPC_State_Type is
(
IDLE, -- Waiting for a start condition
START, -- Start condition detected
WADDN3, -- I/O write address nibble 3 (A15..A12)
WADDN2, -- I/O write address nibble 2 (A11..A8 )
WADDN1, -- I/O write address nibble 1 (A7..A4)
WADDN0, -- I/O write address nibble 0 (A3-A0)
WDATN1, -- I/O write data nibble 0 (D7..D4)
WDATN0, -- I/O write data nibble 1 (D3..D0)
WHTAR0, -- I/O write host turn around phase 0
WHTAR1, -- I/O write host turn around phase 1
WSYNC, -- I/O write sync
WPTAR -- I/O write peripheral turn around
);

signal LPC_State: LPC_State_Type;
signal lframe_nreg: std_logic; -- LPC frame register
signal lad_rin: std_logic_vector(lad'range); -- LPC input registers
signal W_Data: std_logic_vector(7 downto 0); -- LPC input Post Code

        -- создание массивов и объявление RAM
   -- Build a 2-D array type for the RAM
   subtype word_t is std_logic_vector((2**DATA_WIDTH-5) downto 0);
   type memory_t is array(2**ADDR_WIDTH-9 downto 0) of word_t;

   -- Declare the RAM signal.   
   signal ram : memory_t;

   -- Register to hold the address
   signal addr_reg : natural range 0 to 2**ADDR_WIDTH-9;
   
   
begin
_______
-- LPC bidirectional pins definition.
_______
-- Input register to get some timing margin
P_input_register: process(lclk)
begin
if (lclk'event and lclk='1') then
lad_rin <= lad;
lframe_nreg <= lframe_n;
end if;
end process;
_______
-- LPC state machine
-- LPC_State value is actually one clock cycle late.
_______
P_LPC_StatMachine: process(lclk)
begin
if (lclk'event and lclk='1') then
-- Synchronous reset
if (lreset_n = '0') then
LPC_State <= IDLE;
W_Data(7 downto 0) <= "00000000"; -- init. both displays to all on
else
case LPC_State is
-- Looking for a START condition
when IDLE =>
if (lframe_nreg = '0') and (lad_rin = "0000") then
LPC_State <= START; -- START condition detected
end if;
-- Skip extra cycles on START frame
-- (can be many clock cycles)
-- and then, check for I/O write transaction
when START =>
if (lframe_nreg = '0') then -- frame still asserted
if (lad_rin /= "0000") then
LPC_State <= IDLE; -- unsupported start code
end if;
else
if (lad_rin(3 downto 1) = "001") then
LPC_State <= WADDN3; -- I/O write detected
else
LPC_State <= IDLE; -- unsupported command
end if;
end if;
-- --------------------------------
-- I/O write transaction processing
-- --------------------------------
when WADDN3 => -- Write Data Address Nibble 3
-- Find next state
if (lframe_nreg = '0') or (lad_rin /= "0000") then
LPC_State <= IDLE; -- abort cycle, bad frame
-- or address mismatch
else
LPC_State <= WADDN2;
end if;
when WADDN2 => -- Write Data Address Nibble 2
-- Find next state
if (lframe_nreg = '0') or (lad_rin /= "0000") then
LPC_State <= IDLE; -- abort cycle, bad frame
-- or address mismatch
else
LPC_State <= WADDN1;
end if;
when WADDN1 => -- Write Data Address Nibble 1
-- Find next state
if (lframe_nreg = '0') or (lad_rin /= "1000") then
LPC_State <= IDLE; -- abort cycle, bad frame
-- or address mismatch
else
LPC_State <= WADDN0;
end if;
when WADDN0 => -- Write Data Address Nibble 0
-- Find next state
if (lframe_nreg = '0') or (lad_rin /= "0000") then
LPC_State <= IDLE; -- abort cycle, bad frame
-- or address mismatch
else
-- Write address valid. Subsequent Data displays.
LPC_State <= WDATN0; -- Next state will get
-- first data nibble
end if;
when WDATN0 => -- Data LSN (Least Significant Nibble)is
-- sent first
W_Data(3 downto 0) <= lad_rin; -- latch data (LSN)
if (lframe_nreg = '1') then
LPC_State <= WDATN1; -- Next state gets
-- 2nd data nibble
else
LPC_State <= IDLE;
end if;
when WDATN1 => -- Data MSN (Most Significant Nibble)
W_Data(7 downto 4) <= lad_rin; -- latch data (MSN)
if (lframe_nreg = '1') then
LPC_State <= WHTAR0;
else
LPC_State <= IDLE;
end if;
when WHTAR0 => -- Write Data Turn Around Cycle 0
if (lframe_nreg = '1') and (lad_rin = "1111") then
LPC_State <= WHTAR1;
else
LPC_State <= IDLE;
end if;
when WHTAR1 => -- Write Data Turn Around Cycle 1
if (lframe_nreg = '1') then
LPC_State <= WSYNC;
else
LPC_State <= IDLE;
end if;
when WSYNC => -- Write Data Sync Cycle
-- Note: No device to respond with a synch at I\O addr
-- 080h. Therefore bus should time out and abort.
-- State ==> to IDLE
if (lframe_nreg = '1') then
LPC_State <= WPTAR;
else
LPC_State <= IDLE;
end if;
when WPTAR => -- Write Data Final Turn Around Cycle
-- (not needed -- see WSYNC)
LPC_State <= IDLE; -- I/O write cycle end
when others =>
LPC_State <= IDLE; -- all other cases
end case;
end if;
end if;
end process;

        --данные с шины по тетраде помещаются в ram
   process(lclk)
   begin
   if(rising_edge(lclk)) then
      if(we = '1') then
         ram(addr) <= W_data(7 downto 4);
      end if;

      -- Register the address for reading
      addr_reg <= addr;
   end if;
      if(rising_edge(lclk)) then
      if(we = '1') then
         ram(addr) <= W_data(3 downto 0);
      end if;

      -- Register the address for reading
      addr_reg <= addr;
   end if;
   end process;
   
        --собственно вывод данных
        q <= ram(addr_reg);


end RTL;


Добавлено after 59 seconds:
В итоге значения таковы:
Total logic elements 235 / 240 ( 98 % )

Добавлено after 7 hours 7 minutes 26 seconds:
Только что предложили использовать внешнюю RAM-память. Модуль на 128 кб. Должны подвезти. Наверное, будет лучше использовать такой вариант...

Добавлено after 2 hours 53 minutes 3 seconds:
Привезли память UM61256K-15 (аналог IS61C256AH). Теперь нужно передавать на неё байты данных с ПЛИС и считывать их МК. Подскажите по этой теме? :dont_know:


Вернуться наверх
 Профиль  
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Второй конкурс по дизайну печатных плат от PCBWay!
Не в сети
 Заголовок сообщения: Re: Передача данных с буферной памяти ПЛИС на МК
СообщениеДобавлено: Вт май 30, 2017 09:05:25 
Мучитель микросхем

Карма: 4
Зарегистрирован: Пн июн 07, 2010 23:56:01
Сообщений: 407
Откуда: рф казань
Рейтинг сообщения: 0
глянь сюда http://hobby-research.at.ua/forum/2-1-160 это осцилл на EPM570 с памятью и мк stm32
а именно https://github.com/LeftRadio/NS3_EPM570 это исходники плиса
я думаю в проекте найдешь все нужное )))


Вернуться наверх
 Профиль  
 
Более 10 000 000 оригинальных новых компонентов

Поставка электронных компонентов под ваш проект

Комплексные решения поставки электронных компонентов

Сэкономьте $30 при первом заказе на сумму боле $200 (только для посетителей нашего форума)
Не в сети
 Заголовок сообщения: Re: Передача данных с буферной памяти ПЛИС на МК
СообщениеДобавлено: Ср май 31, 2017 05:15:07 
Родился

Зарегистрирован: Чт май 25, 2017 17:02:56
Сообщений: 3
Рейтинг сообщения: 0
Спасибо!!!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y