Jump to content
    

Как объединить два VHDL модуля в один для прошивки ПЛИС

Даже если курсач (хотя что за курсач в июле ? :)), в процессе пусть научится чему-то. Польза будет. Будет делать сам, но под присмотром.

Share this post


Link to post
Share on other sites

Польза будет. Будет делать сам, но под присмотром.

правильно...

Share this post


Link to post
Share on other sites

Это не курсач. ПЛИС Spartan 3an Starter Kit. ADC LTC1407A-1. Вход АЦП подключаю к звуковой разъем компьютера( играет музыка - поступает аналоговый сигнал ). Дальше он оцифровывается на АЦП и после этого данные нужно закинуть на UART и передать на компьютер. АЦП настроен норммально. Проверял на осциллографе. UART отдельно тоже тестировал. Все нормально. Есть отдельные проекты АЦП и UART. В том архиве, что я выше высылал, я пытаюсь собрать это в один проект, дабы передать данные на UART. Не пойму, как их там связать

Share this post


Link to post
Share on other sites

Еще раз повторяю.

Для того что бы передать данные от АЦП через UART в ПК надо создать модуль, в котором будет с одной стороны формироваться сигнатура с тестбенча для АЦП, с другой стороны - тестбенч для UART. Еще, как правильно сказали, надо либо отсылать только 8 из 14 (или сколько там?) бит, либо разделить их (эти несколько бит результата преобразования) и побайтно отправлять в UART. Далее объединяете модулем верхнего уровня и вуа-ля!

Еще добавлю.

При создании модуля управления надо решить и временное согласование. К примеру. Скорость передачи по UART 115200, значит максимум можно выжать 11520 байт/с (10 бит). Следовательно управление АЦП должно либо идти с этой частотой (отбрасываете младшие биты), либо в 2 раза реже (если передаете по два байта).

Share this post


Link to post
Share on other sites

2 vitali36:

Сегодня я гляну на ADC и StarterKit, а вы пока обрисуйте в виде блок-схемы типа "3 квадрата - 5 линий" :) то, чего вы хотите добиться. Количество деталей в схеме - чем больше, тем лучше (тока не совсем уж до фанатизма, конечно). Что откуда входит-выходит, разрядности и т.п. Неплохо бы не забыть и об управляющих сигналах, и тактовых тоже. Глядишь, пытаясь изложить в таком виде, и для себя прояснение придет. Вообще-то, с блок-схемы любое проектирование надо начинать. Польза будет.

Share this post


Link to post
Share on other sites

в котором будет с одной стороны формироваться сигнатура с тестбенча для АЦП, с другой стороны - тестбенч для UART

Не очень понятен вот этот момент. Разъясни поподробнее пожалуйста. Тестбенчи я писал, чтобы проверить работоспособность в моделировании isim

Edited by vitali36

Share this post


Link to post
Share on other sites

Не очень понятен вот этот момент. Разъясни поподробнее пожалуйста. Тестбенчи я писал, чтобы проверить работоспособность в моделировании isim

Формируете тестбенч, который формирует/эмулирует поток данных с АЦП (точно так же как должно быть в "железе"). Далее Вы смотрите выход Вашего UART (для отладки можете сделать в тестбенче приемник UART). Имитацию АЦП можно делать с помощью чтения данных из файла...

Добиваетесь, чтобы на выходе Вашего UART были данные с АЦП.

 

Это будет работать в том случае если скорость АЦП и Вашего UART равны...

 

Как- то так :laughing:

Share this post


Link to post
Share on other sites

При моделировании УАРТа, к примеру, наверняка подавали байты и сигнал начала передачи, а также тактирования!

Вот то же самое надо сделать и в новом модуле - он должен формировать привязанные друг к другу сигналы запуска АЦП, затем чтения результата, далее выдать результат в шину УАРТа и подать сигнал запись данных в передатчик УАРТа. Ожидаем окончания передачи байта. Далее все в вечном цикле.

PS Отличием между модулем и тестбенчем можно считать, то обстоятельство, что в тестбенче писали wait for X us; а тут надо сделать таймер из счетчика

Share this post


Link to post
Share on other sites

Так, c этим разобрался. Теперь момент, который больше всего меня интересует. В топ модуле связывают компоненты с помощью port map, а в entity описывают входы и выходы. В моем случае у АЦП куча входов и выходов и у UART куча входов и выходов. Т.е , как я представляю на рисунке : сначала АЦП со входами и выходами , затем рядом UART. Мне придется связать выходы АЦП со входами UART. И какие выходы и входы описать в entity. Посмотрите файлы( кто скачивал ) и на рисунке черканите. Их хрен свяжешь..

Edited by vitali36

Share this post


Link to post
Share on other sites

Ну если совсем не хотите слушать и делать как советуют, то связывать надо так:

В entity назначаете сигналы управления АЦП, выход УАРТа и тактовый вход;

Модули управления АЦП и УАРТа объявляете component полностью копируя назначение сиганлов в модулях (там где entity)

Назначаете сигналы - выход АЦП (н-р ADC_s:std_logic_vector(13 downto 0))

Затем в begin вставляете в качестве D1: АЦП, а в качестве D2: УАРТ

Выход АЦП посылаете в ADC_s. А для входа данных УАРТа пишите =>ADC_s(13 downto 6) - присваивание 8ми битной шине старшей части 14 битной шины.

Share this post


Link to post
Share on other sites

Ну если совсем не хотите слушать и делать как советуют
Так я и хочу, как советуют) А управляющий модуль в топ не надо вставлять как component. И есть ли какие-либо порты в управляющем модуле, помимо описания функциональной части? Делаю первый рабочий так сказать проект, так что не серчайте если что..

Share this post


Link to post
Share on other sites

Управляющий модуль тоже надо компонентом вставлять.

В итоге должно быть так

Модуль АЦП - выводов x1 из них x2<x1- внешние соединяемые с микросхемой

Модуль УАРТа - y1 из них y2<y1 - внешние сигналы (TXD, RXD и тп)

В модуле управления, сигналов должно быть ((x1-x2)+(y1-y2)).

Их наименование и разрядность должны (рекомендую ибо так проще не запутаться) совпадать с сигналами идущими от АЦП и на УАРТ.

Если все сделано верно, то в топовом модуле, каждой паре назначаете один сигнал. Например пара "результат АЦП-модуль управления" - ADC_s(x downto 0), паре "модульь управления - данные УАРТа" -DT_s(7 downto 0) и тд.

После объявления компонентов в порт мапе пишете слева - имя порта в компоненте, а справа сигнал куда отослать или откуда принять. Что то аля

D1:ADC

PORT MAP(

clk=>clk,

Rez=>ADC_s,

....

....

);

Собственно все.

Share this post


Link to post
Share on other sites

Модуль АЦП - выводов x1 из них x2<x1- внешние соединяемые с микросхемой

Модуль УАРТа - y1 из них y2<y1

А что за x1, x2, y1, y2. почему неравенства?

Share this post


Link to post
Share on other sites

А что за x1, x2, y1, y2. почему неравенства?

наверно, имеются ввиду выводу которые идут наружу - из ПЛИС, и выводы которые внутренние для ПЛИС - остаются внутри ПЛИС

Share this post


Link to post
Share on other sites

Именно так: x1, y1 это все порты модулей, а x2,y2- порты для связи с микросхемами. Разница между ними - число выводов остающихся внутри ПЛИС

Share this post


Link to post
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...