Easyelectronics.ru

Электроника для всех
Текущее время: 22 авг 2017, 21:59

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



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

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

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

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

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

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

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

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


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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

Код:
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
Сообщения: 2631
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
Сообщения: 1049
Откуда: Сочи
Спасибо.
По сути получается, что длинный регистр не нужен, но нужно обеспечить правильную загрузку байта (в нужный момент поднимать load_data).

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

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


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

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


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

Сейчас этот форум просматривают: NStorm


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

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

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