Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NIOS II начало.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Evgeniiy
Здравствуйте, начал изучать nios и появилось у меня несколько вопросов, если кому не трудно буду рад прочитать ответы.

1)Есть ли возможность симулировать работу NIOS + логику FPGA в quartus simulator?

2)Создал я SOPC в котором само ядро, память и выход PIO, написал програмку на assembler типа счетчик
.text
.global main

main: movi r10,0x0
movi r11,0xff

loop: addi r10,r10,2
beq r10,r11, loop

.end

Как мне теперь выдать в PIO содержимое регистра r10?
Kuzmi4
2 Evgeniiy
1) Теоретически можно, практически не встречал есчё описаний такого. На Modelsim-е вроде все делают, да и апнота альтеры есть как раз про Modelsim+NIOS2.
2) Записать по его адресу в системе требуемое значение а логика сама его транслирует наружу.

Да и специально ж тема создана для таких вопросов, зачем плодить их ??
Evgeniiy
Kuzmi4

В SOPC Builder PIO имеет адреса BASE 0x00000000 и END 0x0000000f и куда мне писать?
vadimuzzz
Цитата(Evgeniiy @ Dec 17 2009, 15:32) *
В SOPC Builder PIO имеет адреса BASE 0x00000000 и END 0x0000000f и куда мне писать?

в BASE
Evgeniiy
Цитата(vadimuzzz @ Dec 17 2009, 12:56) *
в BASE



mov 0x00,R10 так вот не получается
vadimuzzz
Цитата(Evgeniiy @ Dec 17 2009, 16:07) *
mov 0x00,R10 так вот не получается

mov переносит между регистрами.
stwio R10,0x00
Evgeniiy
Цитата(vadimuzzz @ Dec 17 2009, 13:59) *
mov переносит между регистрами.
stwio R10,0x00


Спасибо
могу ли я теперь увидеть диаграмму работы в quartus simulator?
vadimuzzz
Цитата(Evgeniiy @ Dec 17 2009, 17:44) *
могу ли я теперь увидеть диаграмму работы в quartus simulator?

теоретически-да(подать клок,ресет и т.д.), но в моделсиме гораздо удобнее. в сигналтапе тоже удобно(www.altera.com/literature/an/an446.pdf).
Evgeniiy
Цитата(vadimuzzz @ Dec 17 2009, 18:08) *
теоретически-да(подать клок,ресет и т.д.), но в моделсиме гораздо удобнее. в сигналтапе тоже удобно(www.altera.com/literature/an/an446.pdf).



чем в моделсиме удобнее? там же на вхдл тестбенчи писать нужно, а в симуляторе быстренько нарисовал и готово
vadimuzzz
Цитата(Evgeniiy @ Dec 18 2009, 13:18) *
чем в моделсиме удобнее? там же на вхдл тестбенчи писать нужно, а в симуляторе быстренько нарисовал и готово

быстренько нарисовал - это когда 2 сигнала, а когда 22 - скопипастить тестбенч быстрее будет. да и сколько-нибудь сложное воздействие сымитировать в визуальном редакторе нереально.
Evgeniiy
Цитата(vadimuzzz @ Dec 18 2009, 11:01) *
быстренько нарисовал - это когда 2 сигнала, а когда 22 - скопипастить тестбенч быстрее будет. да и сколько-нибудь сложное воздействие сымитировать в визуальном редакторе нереально.


Впринципе да, надо изучать моделсим, щас попробую сначала в сигналтабе. Спасибо за ответы.
torik
Цитата
теоретически-да(подать клок,ресет и т.д.), но в моделсиме гораздо удобнее.


Ну а какова реальность? Я вот не очень представляю, как увязывается выполнение программы на NIOS с внешними воздействиями на железо, прописанными в тестбенчах. Чё-то вообще бред получается. Если отладка без учета программы ниоса, то это уже моделирование SOPC с шиной авалон. Не?
Evgeniiy
И еще вопросик, когда я создаю воркспейс в другой папке, у меня не создается проект, выдает ошибку error parsing project STF file, могу создавать проекты только в директории по умолчанию, как бы от этого уйти?
vadimuzzz
Цитата(torik @ Dec 18 2009, 17:34) *
Ну а какова реальность? Я вот не очень представляю, как увязывается выполнение программы на NIOS с внешними воздействиями на железо, прописанными в тестбенчах. Чё-то вообще бред получается. Если отладка без учета программы ниоса, то это уже моделирование SOPC с шиной авалон. Не?

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

Цитата(Evgeniiy @ Dec 18 2009, 17:41) *
И еще вопросик, когда я создаю воркспейс в другой папке, у меня не создается проект, выдает ошибку error parsing project STF file, могу создавать проекты только в директории по умолчанию, как бы от этого уйти?

поподробнее, что за проект, какой воркспейс. ни фига не понятно
Evgeniiy
Цитата(vadimuzzz @ Dec 18 2009, 16:52) *
а в чем разница с моделсимом? так же берется нетлист, на входы подаются воздействия. программа присутствует в виде файла инициализации памяти (понятно, надо on-chip юзать). другое дело, что по функционалу убого, ну так и сказано уже не раз было, что м-сим удобнее.


поподробнее, что за проект, какой воркспейс. ни фига не понятно


если я меняю workspace в NIOS II IDE стандартный там nios2-ide-workspace-8.0_1, на другой в другой папке и создаю проект не в директорию по умолчанию а в свою,то проект не создается и появляется ошибка error parsing project STF file.

я просто хочу создать проект не в c\altera\nios..., а скажем на диске d, а могу создать тока туда
vadimuzzz
Цитата(Evgeniiy @ Dec 18 2009, 20:11) *
если я меняю workspace в NIOS II IDE стандартный там nios2-ide-workspace-8.0_1, на другой в другой папке и создаю проект не в директорию по умолчанию а в свою,то проект не создается и появляется ошибка error parsing project STF file.

я просто хочу создать проект не в c\altera\nios..., а скажем на диске d, а могу создать тока туда

так это эклипсовские настройки там лежат, они ценности не представляют. сам проект и его system library лежат в папке software в квартусовском проекте. если в настройках эклипса поковыряться, то, наверное, можно найти способ, но какой смысл в этом?
Evgeniiy
Цитата(vadimuzzz @ Dec 18 2009, 17:21) *
так это эклипсовские настройки там лежат, они ценности не представляют. сам проект и его system library лежат в папке software в квартусовском проекте. если в настройках эклипса поковыряться, то, наверное, можно найти способ, но какой смысл в этом?



Я просто хотел создать проект и все к нему относящееся в другой папке, на другом диске и пока не создал там папку эклипс, IDE выдавал ошибку и не создавал его.








А есть ли возможность в порт выдавать числа напрямую, а не через регистры r1,r2 итд.
я вот хочу например регистр таймера snapl выдать в PIO
barabek
Цитата(Evgeniiy @ Dec 23 2009, 00:50) *
А есть ли возможность ...

Таких команд в asm нет.
Evgeniiy
Написал програмку для таймера, счетчик загружается из регистра периода и досчитав до нуля не выдает сигнала timeout и перезагружается всеми единицами, а не как написано в пдф числом из регистра периода, в ригистре статус всегда горит бит RUN, как бы исправить это?

CODE
.equ timer_status, (0x20)
.equ timer_control, (0x24)
.equ timer_period_low, (0x28)
.equ timer_period_high, (0x2C)
.equ timer_snap_low, (0x30)
.equ timer_snap_high, (0x34)

.text
.global main

main:
movui r12,0x0
movui r15,0x4
movui r16,0x12

stwio r16,timer_period_low(r12)
stwio r15,timer_control(r12)
loop:

ldwio r14,timer_status(r12)
stwio r16,timer_snap_low(r12)
ldwio r17,timer_snap_low(r12)
bne r12,r15,loop
.End
vadimuzzz
а вот это
Код
stwio r16,timer_snap_low(r12)
ldwio r17,timer_snap_low(r12)

зачем? так он до второго пришествия считать будет. настройки таймера в SOPC`е какие? период не маловат? и почему инициализируете только младшие разряды? содержимое всех регистров тоже выкладывайте.
Evgeniiy
Цитата(vadimuzzz @ Dec 24 2009, 11:59) *
а вот это
Код
stwio r16,timer_snap_low(r12)
ldwio r17,timer_snap_low(r12)

зачем? так он до второго пришествия считать будет. настройки таймера в SOPC`е какие? период не маловат? и почему инициализируете только младшие разряды? содержимое всех регистров тоже выкладывайте.





stwio r16,timer_snap_low(r12)
ldwio r17,timer_snap_low(r12) r17 выдаю в порт и тем самым смотрю, что на счетчике. Все записав в старшие разряды 0, все заработало. Спасибо за ответ.
Evgeniiy
Подскажите мне пожалуйста ещё на счет прерываний. Я так понимаю что бы включить их нужно записать 1 в ITO регистра счетчика, 1 в PIEрегистра статус и 1 в соответсятвующий бит регистра ienable. В моём примере у счетчика IRQ0, вот он досчитал, оно выдалось и тут вопрос, что дальше? IRQ0 можно использовать как метку, если IRQ0= 1 значит выполняется кусок программы ниже или что если не секрет?
vadimuzzz
самый простой вариант - висеть в цикле, смотреть соотв. флажок; когда срабатывает прерывание, вызывается обработчик, который сбрасывает флаг. более интересный вариант - сделать interrupt vector. или прикрутить EIC (в последних версиях ниоса появился, я еще не пробовал, обхожусь софтовыми)
Evgeniiy
Цитата(vadimuzzz @ Dec 24 2009, 17:38) *
самый простой вариант - висеть в цикле, смотреть соотв. флажок; когда срабатывает прерывание, вызывается обработчик, который сбрасывает флаг. более интересный вариант - сделать interrupt vector. или прикрутить EIC (в последних версиях ниоса появился, я еще не пробовал, обхожусь софтовыми)



Если я буду висеть в цикле и смотреть флаг, то когда ж моя программа выполняться будет?
vadimuzzz
Цитата(Evgeniiy @ Dec 25 2009, 12:08) *
Если я буду висеть в цикле и смотреть флаг, то когда ж моя программа выполняться будет?

никто же не говорил, что в цикле нужно только смотреть флаг smile.gif в любой из описанных выше реализаций подразумевается наличие бесконечного цикла. разница только в способе, которым вызывается обработчик прерывания
Evgeniiy
Цитата(vadimuzzz @ Dec 25 2009, 09:49) *
никто же не говорил, что в цикле нужно только смотреть флаг smile.gif в любой из описанных выше реализаций подразумевается наличие бесконечного цикла. разница только в способе, которым вызывается обработчик прерывания



Ну вот началась у меня программа я глянул флаги и пошел выполнять свою прогу, допустим на середине кода взвелся флаг, те у меня будет задержка обнаружения флага равная остатку кода?
vadimuzzz
Цитата(Evgeniiy @ Dec 25 2009, 13:08) *
Ну вот началась у меня программа я глянул флаги и пошел выполнять свою прогу, допустим на середине кода взвелся флаг, те у меня будет задержка обнаружения флага равная остатку кода?

прерывания по своей сути предполагаются достаточно редкими событиями, в сравнении с тактовой частотой процессора. т.е. если, к примеру проц на 50 МГц, а таймер, скажем, на 50 кГц - то это нормально. а если, проц 50 МГц, а таймер 25 МГц - то инструмент(МК) выбран неправильно. также неявно подразумевается, что обработчики прерываний - это маленькие куски кода имеющие наивысший приоритет. ну и если у вас реальная задача, так озвучьте ее, может вам ни ниос, ни прерывания и не нужны.
Evgeniiy
vadimuzzz

Реальной задачи у меня для ниуса нет, просто появилось свободное время, решил изучить ниус, до этого работал только с ПЛИС.
vadimuzzz
тогда RTFM: ftp://ftp.altera.com/outgoing/download/su...II_docs_9_1.zip
Evgeniiy
Цитата(vadimuzzz @ Dec 25 2009, 10:55) *



Почитал я эти документы, но вот вопросик у меня все равно есть. При срабатывании прерывания начинает выполняться код записанный в как я понимаю в стартапе , как бы это убрать?
vadimuzzz
Цитата(Evgeniiy @ Dec 29 2009, 13:09) *
Почитал я эти документы, но вот вопросик у меня все равно есть. При срабатывании прерывания начинает выполняться код записанный в как я понимаю в стартапе , как бы это убрать?

поподробнее сформулируйте вопрос. что за прерывание, в какой конфигурации. если в мануале непонятный момент - ткните в страницу.
Evgeniiy
Написал пример счетчика, нажимаю debug, и начинаю тыкать step info дойдя до места где счетчик досчитывает и выдает прерывание, я прыгаю на выполнение этого кода. я думал, что после выдачи прерывания его номер просто записывается в регистр ipending и моя программа продолжает выполнятся , если я не слежу за этим регистром.

Код
0x00002024 <_start+4>:  ori   sp,sp,16384
0x00002028 <_start+8>:  movhi gp,0
0x0000202c <_start+12>: ori   gp,gp,41736
0x00002030 <_start+16>: movhi r2,0
0x00002034 <_start+20>: ori   r2,r2,8980
0x00002038 <_start+24>: movhi r3,0
0x0000203c <_start+28>: ori   r3,r3,8980
0x00002040 <_start+32>: beq   r2,r3,0x2050 <_start+48>
0x00002044 <_start+36>: stw   zero,0(r2)
0x00002048 <_start+40>: addi  r2,r2,4
0x0000204c <_start+44>: bltu  r2,r3,0x2044 <_start+36>
0x00002050 <_start+48>: call  0x2098 <alt_load>
0x00002054 <_start+52>: call  0x217c <alt_main>
vadimuzzz
ничего не понял. запускается обработчик прерывания что-ли? давайте весь расклад. что за систему собрали. что за программу написали. ассемблер без комментариев малоинформативен.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.