0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
1

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

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

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

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

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

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

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

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

Сдвиговый регистр с асинхронным сбросом и параллельной загрузкой
Есть код сдвигового регистра с асинхронным сбросом и параллельной загрузкой, не могу понять зачем...

Реверсивный сдвиговый N разрядный регистр на VHDL
Здраствуйте! Стоит задача написать описать реверсивный сдвиговый регистр на D триггерах. Схему я...

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

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

измеритель температуры на VHDL. ПЛИС
Здравствуйте, появилась задача написать код на VHDL или verilog для измерителя темпратуры, где...

8
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
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,514
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
25.04.2017, 08:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2017, 08:43
Помогаю со студенческими работами здесь

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

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

Сдвиговый регистр
Здравствуйте! Помогите написать программу для сдвигового регистра..

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

Сдвиговый регистр
Здравствуйте. Собираю светодиодный индикатор. Использую stm32F103C8T6, сдвиговый регистр 74HC595...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru