Jump to content
    

Microblaze+DDR2+UART

соберитесь, там в начале есть галочка натив фифо! Вам не нужен фифо на шину. Вам нужно встроить фифо в свой модуль, нафига создавать кучу сигналов для шинного фифо. Да, надо будет написать вывод данных в шину через регистр, но это не сложно, полчасика с отладкой...

 

 

Share this post


Link to post
Share on other sites

это когда вы уже выберите фифо

memory and storage-> FIFOs -> fifo Generator

 

элемент сделается и добавится в проект, потом по нему 2 раза кликните откроется (или сразу по добавлению откроется) визард.

на первой странице натив - акси, ставьте галку натив.

 

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

 

то есть алгоритм

считали данные а АЦП, поставили на вход фифо, дернули на 1 клок врайт енайбл и готово.

 

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

 

 

кстати эти сигналы очень для вас важны, если фифо опустошится значит скорости передачи хватает, если переполнится то нет. Потерь данных с фифо не должно быть, если оно не переполнилось и не опустошилось

Share this post


Link to post
Share on other sites

Посмтотри пожалуйста правильно ли там все, вот что получилось пока что(модуль ацп еще не добавлял). Его добавить его то просто как add source? Где его вставить как компонент и связать порты (в каком из файлов). И алгоритм, что ты описал где мне кодить?(спасибо, кстати, что подробно так его описал)).

microblaze_adc.rar

Share this post


Link to post
Share on other sites

все делается в файле user. Это файл предоставлен для вас, все остальные файлы - это файлы обертки, максимум когда их надо редактировать это если вы хотите какие то сигналы прокинуть на ружу из вашего юзера. Тогда эти порты объявляется во внешнем файле и прокидываются во внутрь юзера.

 

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

Share this post


Link to post
Share on other sites

во я лошара:) это у меня среда vhd файл приняла за какой то образ диска)...

 

ну да ладно. я увидел пустой юзер файл, это не есть верно) его стоило бы наполнить.

 

А импортить модуль в проект надо уже после того как в ISE вы его напишите, проверите и имплементнете.

 

 

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

 

У меня виндоус 8 и 64 бита, а для ксалинкса - это приговор, так что работаю на виртуалке (не спрашивайте почему так получилось, это карма:)), и надо сделать кучу действий чтобы открыть проект, это утомляет...

Share this post


Link to post
Share on other sites

Юзер пустой, потому что я еще не писал там ничего и не добавлял). Вообщем я так понял сейчас я должен сделать вот что: 1) вставить мой vhdl модуль в проект

2) В user файле где написано USER signal declarations added here, as needed for user logic вставить мой компонент моего ацп модуля.

3) Там же в user где написано --USER logic implementation added here связываю с помощью port map мой ацп компонент с портами user файла.

4) И там же в архитектуре описать алгоритм чтения-записи, что ты мне сказал.

Share this post


Link to post
Share on other sites

да

только есть еще 5 пункт

 

5. в верхнем модуле в который вставлен ваше user надо "прокинуть" порты что вы добавите на ружу. Ну то есть добавить такие же порты в верхнем модуле, и соединить их со входами юзера.

 

дальше проверки и имплементайшен

 

потом импорт его в платформ студию, добавление к процу и так далее...

 

для начала попробуйте без фифо, просто организовать считывание данных с АЦП в процессор через шину.

Share this post


Link to post
Share on other sites

для начала попробуйте без фифо, просто организовать считывание данных с АЦП в процессор через шину.

Т.е пока без 4 пункта сделать? (без фифо)

Share this post


Link to post
Share on other sites

ну да, сделайте шаблон на 4 регистра к примеру. Там будет процедура записи и чтения по адресам регистров, уже визардом сделанная.

Данные с АЦП просто пихайте в один из регистров, а с проца попробуйте почитать по адресу. Если все получится между АЦП и регистром вставите фифо. Совсем в начале можно даже без АЦП:) просто поймите как оно все работает...

Share this post


Link to post
Share on other sites

Вообщем добавил ацп модуль, добавил ацп как компонент в user , возник вопрос: при связывании портов adc с user портами не знаю, к чему подключить spi_adc(in). И еще: мне похоже нужно будет добавить еще модули приемника и передатчика, т.к я платой управляю(настраиваю предусилитель и включаю ацп) с компа(посылаю по uart команды).

user_logic.rar

Share this post


Link to post
Share on other sites

что такое spi_adc(in). Это данные от АЦП или к АЦП.

 

вам надо юзере сделать такой порт, и к нему подключить. Потом во внешнем модуле сделать такой же порт и подключить его к этому порту юзера.

 

а уж последний подключить через констраин к нужной ноге плис.

 

Логично сделать чтобы команды с компа по уарт принимал процессор микроблайз, раскодировал, понимал что надо и делал это. Доступ к ацп все через те же регистры этого же модуля...

Share this post


Link to post
Share on other sites

Spi_adc - это вход с ацп. Данные от ацп adc_a : out std_logic_vector(13 downto 0) я привязал к Bus2IP_Data .

вам надо юзере сделать такой порт, и к нему подключить.
Т.е я могу в user, где описаны порты Bus2IP_Clk : in std_logic;

Bus2IP_Reset : in std_logic;

Bus2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1);

Bus2IP_BE : in std_logic_vector(0 to C_SLV_DWIDTH/8-1);

Bus2IP_RdCE : in std_logic_vector(0 to C_NUM_REG-1);

Bus2IP_WrCE : in std_logic_vector(0 to C_NUM_REG-1);

IP2Bus_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1);

IP2Bus_RdAck : out std_logic;

IP2Bus_WrAck : out std_logic;

IP2Bus_Error : out std_logic создавать порты, которые мне будут нужны и потом привязывать? Там просто написано Bus protocol ports, do not add to or delete

 

Т.е, например у меня есть N количество портов в ацп модуле. Этот модуль я вставляю в проект, потом как компонент в user файл. Порты ацп, которые мне не нужно связывать с портами user файла , но их нужно вывести потом наружу (задать в ucf ) я добавляю к user портам и связываю. А порты ацп, которые мне не нужно ни связывать с user портами, ни выводить наружу, я просто объявляю сигналы(с таким же названием) и связываю их с ними . И в топ файле верхнего уровня сделать тоже самое. Так я понимаю?))

Edited by vitali36

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...