Господа опытные программисты
помогите пожалуйста советом как решить проблему подключения модуля опроса состояния енкодера к шине авалон
Модуль Encoder_Control создан как bdf файл т.е blok_diagram/shematik_file иметтся три входа F_0, F_1, clk и выходы шина данных data[4..0], irq. Теперь очень нужно подключить шину Avalon Memory-Mapped чтобы в ядро передавать данные о состоянии енкодера.
На данный момент удалось создать ядро с помощью SOPC_Builder оно получилось как в примере tt_nios2_hardware_tutorial. Не могу понять как в это ядро имплантировать Avalon Bus Modul чтобы были правильные выводы для соединения с проводниками от Encoder_Control в котором должен быть Slave port peripheral.
За ранее благодарен любой информации
А что есть это ваше ядро ?? На сколько я понял вам нужно передавать данные с энкодера в мэйн - ну так вам нужно IRQ sender и Avalon MemoryMapped slave - мастер опрашивает слейв по прерыванию
Jemmax
Apr 10 2009, 12:23
Да все верно Avalon Memory Mapped slave. Едиственно проблема была в ядре создать эту шину с помощью new_component и выбрать из списка сигналов нужные для данного проекта
Теперь нужно выяснить возможно ли сделать шину data двунаправленной чтобы по ней шли данные от енкодера и записывались начальные данные в блок управления енкодером
Kuzmi4
Apr 10 2009, 14:37
Реализуете
slave read/write , назначаете порты в
new_component и будет вам счастие
Jemmax
Apr 14 2009, 10:21
Кузмич я имел в виду чтобы шины readdata[7..0] и writedata[7..0] сделать как одну т.е. занять только восемь проводников. Такое техническое решение возможно ?? У нас ведь сигналы read, write есть.
И еще если не затруднит аргументируйте ответ ссылкой на доументацию.
Цитата(Jemmax @ Apr 14 2009, 14:21)

я имел в виду чтобы шины readdata[7..0] и writedata[7..0] сделать как одну т.е. занять только восемь проводников.
так не получится, нет внутри в плисах (в ядре) Altera тристабильных ресурсов, только на IO крисстала (выходные пины). Делайте модуль с отдельной шиной записи и шиной чтения и подключайте к Avalon.
Jemmax
Apr 15 2009, 20:54
Спасибо за совет разобрался с writedata[7..0] и readdata[7..0] шины однонаправленные, и в Z- состояние переводить после приема/передачи не нужно в Avalon Memory-Mapped interfaces все предусмотрено. Теперь другая проблема получить правильные сигналы от подчиненного устройства для передачи данных чтобы они соответствовали интерфейсу шины авалон.
устройство энкодер при вращении ручки на шине readdata[7..0] появляется поток чисел от 0-32 (это сделано работает) теперь нужно увязать поток данных с сигналом read он я понял активен когда '0', irq, chipselect, clk.
Подскажите пожалуйста может быть есть пример на VHDL для операции чтения подчиненного устройства. Я если честно запутался во временных диаграммах пытаюсь все смоделировать в waveform.
Kuzmi4
Apr 16 2009, 09:27
2 Jemmax - что есть
Цитата
.....теперь нужно увязать поток данных с сигналом read он я понял активен когда '0', irq, chipselect, clk.
Как я понял вам нужно загнать даные в регистр, выставить интерупт и прочитаеть данные с регистра мастером - всё

.
Jemmax
Apr 16 2009, 10:32
На данный момент нужно в работающем блке опроса состояния энкодера Encoder_Box создать модуль на VHDL который-бы отправлял и принимал данные от Avalon-MM Slave в соответствии с сигналами шины.
Столкнулся с проблемой изменения значеня в регистре который используется в двух разных процессах. В одном процессе по rising_edge CLK я выполняю Time_Set <= Time_Set+1 или Time_Set <= Time_Set-1 тут все нормально. Но как только по шине авалон writedata[7..0] приходит число (0-31) для начальной установки оно не изменяет текущее значение в Time_Set. (точнее говоря даже компилятор не пропускает такой алгоритм)
Kuzmi4
Apr 16 2009, 10:40
2 Jemmax - так вам по ходу мастер нужен... тогда вам прямая дорога сюда -
Описалово - раздел "Fundamental WRITE/READ MASTER" вроде бы
А на счёт траблы вашей - синтезер арёт что насилуют, потому как переменную можно читать из разных процессов , но писать её можно тольок в одном процессе
Цитата(Jemmax @ Apr 16 2009, 14:32)

Но как только по шине авалон writedata[7..0] приходит число (0-31) для начальной установки оно не изменяет текущее значение в Time_Set
возможно что мастер пишет в слейв, т.е. выставляет сигнал address, write, writedata и не анализирует обратный сигнал от слейва - waitrequest, и прекращает цикл записи (сбрасывает сигнал write), либо waitrequest неправильно формируется от слейва (всегда готов, хотя на деле не так), а мастер пишет в никуда данные.
Jemmax
Apr 16 2009, 19:47
Скажите а почему мне нужен авалон-мастер для опроса модуля обработки сигнала от энкодера. Если я правильно понимаю мастером является само ядро Nios (либо другое устройство которое может генерить запрос DMA) мне необходимо просто обработать сигналы шины Avalon MM Slave Сделать я это хочу путем опроса "проводов" chipslect, read_n, write_n, readdata[7..0] , writedata[7..0] которые заходят в модуль обработки сигналов энкодра
Kuzmi4
Apr 17 2009, 12:15
Если слейв у вас есть, с выведенным интеруптом, то в принципе можно и ниосом опрашивать....
Но тормоз он ещё тот...
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.