Перейти к содержанию
    

id_gene

Свой
  • Постов

    317
  • Зарегистрирован

  • Посещение

Весь контент id_gene


  1. Используйте $stop вместро $finish. Или я чего-то не понял?
  2. Если времена примерно одинаковые, то действительно не имеет смысла. У меня время компиляции обычно меньше в разы, поэтому я компилирую все, чтобы не думать над этой проблемой вообще. К тому же, этот же список файлов я использую в нц-верилоге и debussy. Если его еще использовать и для синтезатора (обычно у меня два списка, с рабочими исходниками и с тестовыми воздействиями), то для всех инструментов исходники гарантированно одинаковы.
  3. 2 vitus_strom: я по прежнему предлагаю вам жестко компилировать все файлы проекта из списка - текстового файла. vcom -f project_files.txt Сколько времени это занимает?
  4. Ну если вы еще этого не сделали, то нужно скачать комплект доков с сайта альтеры разом (первая ссылка) или по отдельности. В комплекте в разделе ug есть "getting started", а в hb/nios2 есть handbooks. Какие-то примеры периферии есть в третьем хандбуке. Связь простая - вы создаете систему в СОПС-билдере, получаете ptf файл. Потом в НИОС ИДЕ создаете проект nios c++ application в той же папке, он (ИДЕ) цепляет PTF, видит там периферию и ее адреса. В обратном направлении не работает. Или я не понял, что вы хотели. С ISS я не работал. Вы же сами писали, что PIO не поддерживается ISS-ом. Думаете, таймер поддерживается? Или вообще какая-либо периферия?
  5. Не знаю. В описании компонента периферии может быть что-то есть. Можно просто поковырять исходники. Можно примеры посмотреть. Я, честно говоря, очень мало пользовался периферией.
  6. А если вернуться к посту №13 То должны были вылезти Error.
  7. Всякие штуки для работы с периферией лежат в библиотеках, и доступны из проекта my_project_syslib/Device Drivers [sopc Builder]/altera_avalon_timer/sdk/timer_struct.h И когда вы таймер встраиваете в билдере, драйверы должны цепляться или руками через include пропишите.
  8. В SOPC билдере меню File / SOPC builder setup / Component/kit Library Search Path пропишите путь к компоненту ниос (что-то вроде C:/altera/61/nios2eds/components). По-моему, об этом пишется вместе с ошибкой о ненайденном компоненте, по крайнйе мере раньше писали. Переносить папку из ниос ИДЕ в папку проекта - это зря. Вернитее ее назад, она может пригодится в будущем в других проектах.
  9. Так вы дизассемблируйте и посмотрите. И посмотрите все-таки опиание примера hello_world_small.
  10. :bb-offtopic: Это квест. Если вы нашли e-mail адрес, куда посылать резюме, то вы прошли первый уровень. :) На этом этапе многие отсеиваются...
  11. Опять же, это все вопросы ОС и ее оболочки. Перенаправляйте вывод в файл с помощью, например, оператора ">", т.е. ...objdump -D -S foo.elf > my_output.txt p.s. +1 к ответу Vetal :a14: , сам не догадался
  12. из словаря: patch - это заплатка; path - путь. В данном случае $PATH - это переменная среды операционной системы. Никак не связано с патчем. Кратко: программе нужен файл (cygwin1.dll). Вопрос: где его искать? Ответы: а) во всех папках в компьютере - очень долго; b) за шкафом - очень пыльно; с) только в некоторых местах; места указаны в переменной $PATH. Править в виндах: свойства системы/дополнительно/переменные среды. Если не охота возиться, скопируйте саму длл в рабочую папку (библиотека, вроде, небольшая).
  13. Ну правильно вам сказали, ищите длл. В состав квартуса входит некий урезанный cygwin (почему-то у вас пути к нему не прописаны). Сам cygwin запускается батником altera\61\quartus\bin\cygwin\cygwin.bat Там же на кнопке Run as Modelsim. При компиляции проекта создается папка ***_sim, в которую кладется содержимое памятей - файлы *.dat, при моделировании памят инициализируется из этих файлов. Вообще там практически все автоматизировано, если интересно - поковыряйте скрипты для моделсима setup_sim.do
  14. Чем - nios-objdump Как вариант: дизассемблировать elf Что: count_binary_0 project/{Debug|Release}/count_binary_0 project.elf Чем: altera/61/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/nios2-elf-objdump Ключи те же. Сам пример не смотрел. ISS ругается на компонент, потому что не может его промоделировать. Это, все-таки, внешний по отношению к процессору модуль, и результат обращения в него не может быть предсказан. Попробуйте промоделировать верилог.
  15. Как раз в новом ЕСНУГЕ об этом пишут первым пунктом. Начало той темы тоже любопытно.
  16. было что-то вроде define_name_rule RULE_DISABLE_SLASH -allowed A-Za-z0-9_; change_names -hierarchy -rules RULE_DISABLE_SLASH; change_names -hierarchy -rules verilog;
  17. Правильно. Неправ. Единственное различие между reg и wire в том, что reg можно назначать только в блоке always, а wire только через assing. Поскольку case в комбинаторике можно использовать только внутри always блока, то здесь как раз объявелн reg. Есть еще блок initial. В нем вы можете использовать только reg для назначений, но если очень надо wire, то для можно поставить force/release. Поищите в интернете примеры, под рукой нет ни одного. Общее правило таково: в регистрах используются неблокирующие <=, в комбинаторных always блоках - блокирующие =. Еще можно в кэш попасть. То есть опять фактического чтения из памяти не произойдет. тут еще можно поразбираться. ps нормальные примеры у Альтеры. Оптимальность в данном случае - такая тонкая штука. pps кстати, мой верилог можно еще больше упростить, например assign m_write = state_machine_reg[0]; и так далее.
  18. Например вы читаете в цикле переменную, которая у вас меняется независимо от программы (аппаратным контроллером). int a = 0; while (a); Такую конструкцию компилятор оптимизирует и выкидыает, потому что не увидит в ней смысла, пока вы не объявите переменную как voltile. Тогда компилятор честно вставит чтение. Как раз ваш случай. Зачем процессору читать второй раз переменную led из памяти, если она уже хранится в стеке или в регистре. Успел покопаться только в вашем модуле, глобальных проблем в нем не вижу. Попробуйте в дебагере определить адрес переменной led и монитором памяти (он там внизу запрятан) посмотреть реальное содержание памяти в этом месте до и после программы. Общие замечания по верилогу: на мой взгляд, слишком много лишних регистров. В каких-то случаях это может быть оправдано, особенно, когда вам нужно все конвееризировать, и сильно не хватает скорости, или когда вы хотите избавиться от лишних переключений в нерабочем состоянии, но вся эта братия занимет ресурсы и межсоединения. Вот посмотрите, как я переписал ваш модуль. Вы к этому тоже со временем привыкнете, начнете понимать, что и где можно сократить. Я там все три модуля в один записал, чтобы файлы не плодить. Синхронизация внешних данных происходит всегда, а не только по стробу старта. Если это критично, то не надо там плодить еще одну машину состояний, просто поставьте два регистра после go_reg, и пользуйтесь ими. Чтение слейва синхронное, т.е. данные идут из регистра. можно урезать до асинхронного, выиграть такт, но удлиннить путь. Чтение контрольного регистра я выкинул, потому что полезной информации вы там не найдете. Машина состояний теперь имеет три состояния. Для увеличения скорости можно добавить еще одно состояние после чтения, чтобы принять прочитанные данные в регистр, и только потом сравнивать с сохраненным значением. Это разгрузит логику данных по чтению, и вы получите большую частоту. Все вышесказанное мое имхо и, возможно, слегка упрощено. Критика принимается. :) Ушел. my_sm.v
  19. Ну во-первых, вы не приложили модуль syst. Во-вторых, лучше бы вы все файлы в одном архиве выложили рядом, чтобы разом скачать, для желающих. Самое главное - вы систему моделировали в моделсиме до синтеза? Программа небольшая, много времени не займет. Общие замечания: много лишнего верилога в регистрах, о чем вам должен был сказать синтезатор. пример: если вы записываете в регистр, достаточно просто написать if (write) my_reg <= writedata; и совсем не надо дописывать else my_reg <= my_reg; Читать тяжело. Сейчас я попробую посмотреть, что внутри, если получится - напишу. А может вы просто в тесте ошибку сделали, и проверяете while (IORD_TESTM_STATUS(TESTM_0_BASE) & 0x1); вместо while (IORD_TESTM_STATUS(TESTM_0_BASE) & 0x2); Но тогда у вас все висеть должно намертво. И еще я бы led объявил как volatile, но это вы должны были в дебагере в ассемблере увидеть, что чтениz не происходит.
  20. Наступил на следующую проблему: Квартус 6.1, патч 0.49, Стратикс2-90 ревизия Б. Двухпортовое двухклоковое 2к фифо собственного производства (не мегавизард). При написании блока RAM для фифо в виде 2D массива или мегавизардом с размещением "Auto" кладется на M4k. На некоторых (небольших) частотах сбоит по записи, т.е. читаются _всегда_ нули. При повышении частоты записи, изменении частоты чтения или перекладывания памяти в M-RAM сбои пропадают абсолютно. Согласно errata sheet проблема есть, но только для кристаллов ревизии А и вылечена для квартусов позже 5.0 sp2. Ставить квартус 7+ пока не буду. з.ы. О! Попробовал перейти на timequest - всплыли нарушения по данным, приходящим в фифо. НО в контрольных сигналах я уверен - адрес и write-enable приходят с регистров. Classic TA проблем не видит. Возможно, sdc я переписал нехорошо. з.з.ы. поскольку нашел пути обхода, на данный момент баг для меня некритичный, и копать глубже нет ни большого желания, ни хоть какого времени.
  21. Для синтеза нельзя. Должна была ошибка появиться при компиляции квартусом. Для теста можно. Вроде проблем в указанном отрывке не видно.
  22. Пример hello_world_small занимает ~332 байта (из файла readme) :) А уж под свое приложение оценивайте, пожалуйста, сами. При компиляции размер кода пишется. А вообще настройки сислиба не помогают оценке. Ругаться будет только на этапе компиляции. Более интересный вопрос: если вы в этой памяти храните посторонние данные от других мастеров или обращаетесь напрямую, и ИДЕ этого не видит. Тогда вам нужно будет ограничивать расположение секций, чтобы они не пересекались с данными, или объявлять для посторонних данных свои секции, чтоб компилятор остальное сам утрясал. Я к этому вопросу только недавно подшел, и пока отложил в сторону (времени нет). Можно еще посмотреть результат компиляции, посмотреть секции и выбрать свободное место, но тогда это надо делать при каждой пере-компиляции. Конечно, ухудшит, если внешняя память однопортовая. Если вам одновременно понадобятся инструкции и данные, то инструкциям придется потерпеть. А вот насколько станет хуже - опять зависит от кучи факторов, например, как часто будет туда обращаться кэш инструкций (какого он размера, и как написана программа, может она прыгает постоянно во все стороны, а может в цикле считает себе спокойно, а цикл в кэш влезает целиком). Моделируйте. Извините, не заметил. По моему, ничего. Если бы у вас туда был нацелен reset address, то там лежала бы секция .entry. Почему по умолчанию они не сдвигают этот адрес в ноль, когда возможно, - не знаю.
  23. Читать доки внимательнее и экспериментировать на модели. Там все видно. Reset address указывает на флеш. В ИДЕ в свойствах syslib для проекта укажете, где у вас хранится секция .text (инструкции), а где секция .rwdata (переменные программы) и так далее. Если reset адрес указывает на флеш, а программу вы кладете в СДРАМ, то ИДЕ вам автоматически подсунет во флеш загрузчик. exception адрес указывает на таблицу векторов прерываний - куда пойдет процессор, когда получит прерывание.
×
×
  • Создать...