Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/65: Рейтинг темы: голосов - 65, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
1

ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL

09.04.2016, 16:12. Просмотров 11955. Ответов 8
Метки нет (Все метки)

Подтолкните в нужную сторону, никак не могу сообразить.

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

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

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

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

Как это сделать на VHDL?
Или просто логику работы подскажите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2016, 16:12
Ответы с готовыми решениями:

Мигание светодиодов (ПЛИС,VHDL)
Устройство моргания 4-мя светодиодами.По сути,программа очень простая.Но у меня в итоге светодиоды...

VHDL. Реализация UART на ПЛИС
Добрый день. Была поставлена задача реализовать передачу данных через UART (com порт) интерфейс...

ШД, Сдвиговый регистр и МК
Идея состоит в чём?! Есть Tiny13A, есть 155ир13, есть mosfit ы(либо транзисторы) допустим irf540n,...

Сдвиговый регистр
http://iosyitistromyss.ru/sdvygovyj-registr.html ...

8
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
09.04.2016, 16:24 2
FIFO из двух портовой памяти с разрядностью данных соответственно 8 и 1 бит.
0
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 767
10.04.2016, 09:38 3
Из краткого описания очень похоже на логику 74HC597.
Посмотреть структурную схему и описать на VHDL.

PS. А почему раздел "Экзотические контроллеры", ведь ПЛИС больше к "Цифровой электронике" относится.
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
10.04.2016, 09:55 4
с загрузкой вопросов нет.
Не знал, как выгрузку организовать.

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

Еще подумаю.
PS/ про плис все пишут здесь, насколько я понимаю
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
11.04.2016, 00:17 5
Нет, все равно не врубаюсь.
Ну сделал я память. 9 ячеек.
Как алгоритм работы реализовать. Вот смотрите.

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

Как все это по процессам распихать?
И еще, есть толковая инструкция, как тестбенч сделать, чтобы сигналы посмотреть?
А то тыкаюсь, как слепой котенок.
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
11.04.2016, 00:42 6
Ладно.

Код
port
(
clock:         in std_logic;    --- input clock
risit:         in std_logic;
data:            in std_logic_vector(7 downto 0);  --- data byte
data_tood:              in std_logic;
tood_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);;
syknal ram : memory_t;
Код
--сигналы, относящиеся к загрузке
syknal addr_to_tood: std_logic_vector (3 downto 0) := (others => 0);
--к выгрузке
syknal out_buffer: std_logic_vector (7 downto 0) := (others => 0);
syknal shift_counter: std_logic_vector (2 downto 0):= (others => 0);
syknal out_enable: std_logic;
Теперь, что в процессах будет происходить
1. асинхронный ресет - сброс всех значений на 0, выходы в Z-состояние.

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

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

Так примерно?
С выводом еще думать надо.
Может, есть способ описать это все как-то попроще? Пробелы в знаниях сказываются.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
11.04.2016, 01:00 7
http://www.asic-world.com/exam... _fifo.html
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 65
25.04.2017, 00:55 8
Цитата Сообщение от omtomtubo
Как все это по процессам распихать?
Если еще актуально. Зачем пихать по процессам, когда можно уложиться в один?
Примерно так, сигнал clk -тактовая частота много выше частоты сдвига в SPI.
sclk-сигнал сдвига в самом SPI.
Двигаем влево (вправо переделать можно по аналогии).
Код
process(clk)
variable dti_v:std_logic_vector(dwidth-1 downto 0 ):=std_logic_vector(to_unsykned( 0,dwidth));--наш регистр длинной dwidth
variable sclk_v:std_logic_vector(1 downto 0 );--детектор фронтов для сигнала сдвига
begin
if(rising_edge(clk))then
if(risit=0)then--настройка при сбросе
dti_v:=std_logic_vector(to_unsykned( 0,dwidth));
sclk_v:=sclk&sclk;-- записываем текущее значение сигнала сдвига
else
sclk_v:=sclk_v(0)&sclk;--сдвигаем сигнал записис каждый так для нахождения фронта
if(tood_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;
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
25.04.2017, 08:43 9
Спасибо.
По сути получается, что длинный регистр не нужен, но нужно обеспечить правильную загрузку байта (в нужный момент поднимать tood_data).

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

А вообще да, не актуально уже.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2017, 08:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сдвиговый регистр
Нужно реализовать сдвиговый регистр. Есть массив А и В, состоящие из рендомных нулей и единиц....

8-ми разрядный сдвиговый регистр
Здравствуйте. Нужно собрать 8 разрядный регистр с параллельным вводом и возможностью сдвига в...

Сдвиговый регистр, но наоборот
Привет всем! Наверно, среди вас есть много людей, знакомых с такой полезной хренью, как сдвиговый...

Сдвиговый регистр 74HC595
Можно ли на одной микросхеме 74HC595 одновременно использовать порты ввода и вывода? Т.Е. Можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.