Easyelectronics.ru

Электроника для всех
Текущее время: 28 июн 2017, 00:03

Часовой пояс: UTC + 5 часов



    • The World's Cheapest PCB Prototyping: 10 шт. 2-слоя 100*100mm 2$(около 140rub), изготовление за 24 часа.
    • Создание принципиальных схем и проектирование печатных плат
    • Крупнейший китайский онлайн магазин радиодеталей. Скидка 50%
    • Просмотр GERBER файлов

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 10 апр 2016, 16:59 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1003
Откуда: Сочи
Подтолкните в нужную сторону, никак не могу сообразить.

С одной стороны поступают байты по 8-разрядной шине. Данные выдает контроллер AVR, он же выдает сигнал тактирования и строб загрузки.

Размер буфера 9 байт.

С другой стороны - непрерывный последовательный вывод 8х9 = 72 бита.

Я хочу сделать, чтобы выдача начиналась сразу после загрузки первого байта, а остальные байты подгружались уже в процессе вывода.

Как это сделать на VHDL?
Или просто логику работы подскажите.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 10 апр 2016, 17:11 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 2565
FIFO из двух портовой памяти с разрядностью данных соответственно 8 и 1 бит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 11 апр 2016, 10:25 
Старожил
Аватара пользователя

Зарегистрирован: 20 апр 2010, 17:59
Сообщения: 991
Откуда: Челябинск
Из краткого описания очень похоже на логику 74HC597.
Посмотреть структурную схему и описать на VHDL.

PS. А почему раздел "Экзотические контроллеры", ведь ПЛИС больше к "Цифровой электронике" относится.

_________________
"Жизнь - театр, мы в нем актеры"© У. Шекспир.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 11 апр 2016, 10:42 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1003
Откуда: Сочи
с загрузкой вопросов нет.
Не знал, как выгрузку организовать.

Теперь понял, что нужно отдельный 8-разрядный буфер и отдельный счетчик на выгрузку.

Еще подумаю.
PS/ про плис все пишут здесь, насколько я понимаю


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 12 апр 2016, 01:04 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1003
Откуда: Сочи
Нет, все равно не врубаюсь.
Ну сделал я память. 9 ячеек.
Как алгоритм работы реализовать. Вот смотрите.

Опускаем ресет. Указатель адреса нулевой, буфер пустой, сигнал разрешения загрузки высокий.
Передатчик устанавливает нужное значение и поднимает вход data_load.
Байт с входа data попадает в нулевую ячейку памяти.
Указатель адреса увеличивается на единицу.
---Здесь должна начаться передача, то есть внутренний сигнал разрешения передачи поднимается, адрес ячейки для передачи равен нулю, ячейка под таким номером загружается в выходной буфер, он начинает сдвигаться по тактовому сигналу.
Когда девять ячеек загружено, сигнал разрешения загрузки опускается (для простоты - до окончания передачи).

Как все это по процессам распихать?
И еще, есть толковая инструкция, как тестбенч сделать, чтобы сигналы посмотреть?
А то тыкаюсь, как слепой котенок.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 12 апр 2016, 01:29 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1003
Откуда: Сочи
Ладно.

Код:
port
(
   clock:         in std_logic;    --- input clock
   reset:         in std_logic;
   data:            in std_logic_vector(7 downto 0);  --- data byte
   data_load:              in std_logic;
   load_enable:           out std_logic;   --receiver ready
   vout:            out std_logic
);

Код:
--память
type memory_t is array(8 downto 0) of std_logic_vector(7 downto 0);;
signal ram : memory_t;

Код:
--сигналы, относящиеся к загрузке
signal addr_to_load: std_logic_vector (3 downto 0) := (others => '0');
--к выгрузке
signal out_buffer: std_logic_vector (7 downto 0) := (others => '0');
signal shift_counter: std_logic_vector (2 downto 0):= (others => '0');
signal out_enable: std_logic;


Теперь, что в процессах будет происходить
1. асинхронный ресет - сброс всех значений на 0, выходы в Z-состояние.

2. если указатель адреса переполнен - опустить разрешение загрузки
иначе, если поднялся data_load, то загрузить data по адресу, адрес увеличить.

3. если указатель адреса больше 0 (хотя бы 1 байт загрузился) - поднять out_enable.

Так примерно?
С выводом еще думать надо.
Может, есть способ описать это все как-то попроще? Пробелы в знаниях сказываются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 12 апр 2016, 01:47 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 2565
http://www.asic-world.com/examples/vhdl/syn_fifo.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 26 апр 2017, 01:42 
Свой человек
Аватара пользователя

Зарегистрирован: 02 дек 2010, 19:20
Сообщения: 67
antonluba писал(а):
Как все это по процессам распихать?

Если еще актуально. Зачем пихать по процессам, когда можно уложиться в один?
Примерно так, сигнал clk -тактовая частота много выше частоты сдвига в SPI.
sclk-сигнал сдвига в самом SPI.
Двигаем влево (вправо переделать можно по аналогии).
Код:
process(clk)
variable dti_v:std_logic_vector(dwidth-1 downto 0 ):=std_logic_vector(to_unsigned( 0,dwidth));--наш регистр длинной dwidth
variable sclk_v:std_logic_vector(1 downto 0 );--детектор фронтов для сигнала сдвига
begin
   if(rising_edge(clk))then
     if(reset='0')then--настройка при сбросе
         dti_v:=std_logic_vector(to_unsigned( 0,dwidth));
         sclk_v:=sclk&sclk;-- записываем текущее значение сигнала сдвига
     else
         sclk_v:=sclk_v(0)&sclk;--сдвигаем сигнал записис каждый так для нахождения фронта
         if(load_data='1')then
             dti_v(7 downto 0):=data;--грузим сигнал
         end if;
         if(sclk_v="01")then -- когда передний фронт
            dti_v:=dti_v(dwidth-2 downto 0)&'0';-- двигаем сигнал влево с дополнением нулями в младшей части
         end if;
     end if;
end if;
end process;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
СообщениеДобавлено: 26 апр 2017, 09:30 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1003
Откуда: Сочи
Спасибо.
По сути получается, что длинный регистр не нужен, но нужно обеспечить правильную загрузку байта (в нужный момент поднимать load_data).

A я хотел в принципе асинхронную загрузку, то есть мастер выдает байты насколько сможет быстро, слейв загружает их в буфер до заполнения, сразу после загрузки первого байта начинает передачу, а когда буфер заполнится, поднимает флаг занято, пока не закончит передачу.

А вообще да, не актуально уже.


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

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB