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

DukeXar

Свой
  • Постов

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

  • Посещение

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


  1. А молодежь еще не доросла :07: ей надо учиться, учиться, и, еще раз, у...читься!
  2. Простите за :bb-offtopic: , но это слишком высокая зарплата или малы знания? Можно ответить в личку.
  3. Е=010 М=0,0001… Сдвигаем: 001 0,001xx Все, дальше некуда -> генерируем исключение 100 0,0001xx 011 0,001xx0 010 0,01xx00 001 0,1xx000 Дальше опять некуда -> исключение Такие числа, как в последнем примере входят в область, которые нельзя представить нормализованными числами в данной сетке. Погрешность. http://en.wikipedia.org/wiki/IEEE_754 и IA-32 Intel Architecture Software Developer's Manual. Volume 1: Basic Architecture.
  4. Если порядок (E) смещенный, т.е. принимает только положительные значения, то его нулевое значение - минимальное значение, поэтому вполне возможно для использования. Т.е. порядок никак не влияет на то, является ли число нормализованным или денормализованным. Вот если он равен 0, а мантисса все еще не нормализованна, т.е. ее необходимо сдвинуть еще один раз влево (или несколько раз), то порядок уже некуда уменьшать, в результате получится переполнение (не помню как оно правильно называется, underflow), и результат получится равным 0. Вы просто не можете представить такое число в используемой разрядной сетке.
  5. Сам пользуюсь этим комплектом. Плата - чудо, особенно после TrexC1 с ep1c6. :) В CII_Starter_NIOS нет упомянутого файла, видимо, забыли положить. Сам процессор находится в cpu_0.v и зашифрован (насколько помню там по лицензии можно использовать сколько угодно времени при наличии подключения по JTAG или в течение 1 часа - потом процессор отключается). Различий в версиях квартуса нет. Я ставил 6.1 и все нормально. Чтобы проц работал дольше - надо его пересобрать в SOPC Builder с соответствующей лицензией (например, на генерацию plaintext NIOS II) - будут сгенерены заново cpu_0.v и все остальные файлы компонентов системы - после этого уже выполняйте синтез. Нормально синтезируется и (вроде) работает пример CII_Starter_SD_Card_Audio (я на нем dhrystone гонял), а вот что демонстрирует сам пример - не разбирался. Еще посмотрите CycloneII_Starter_Kit-v1.0.0\Examples\CII_Starter_tutorials\
  6. Мдя... на Edge цена укусилась. :blink: Тоже, кстати, RCP-based (Eclipse). А каким образом она подключается к целевой платформе? Com-порт или что-то еще? А про codelab ничего не нагуглил :(
  7. Как думал проверить работоспособность Avalon Slave устройства: 1) Заливаю прошивку в FPGA по JTAG 2) Запускаю отладчик из-под Eclipse 3) Смотрю по Signal Tap II сигнальчики И тут пришли они - грабли! Надо сначала отключить терминал, а, соответственно, и отладчик gdb, чтобы иметь возможность пользоваться Signal Tap II. Или я что-то не так делаю? :maniac:
  8. Вы меня прямо огорчили, у меня как-раз Cyclone II. А что еще существует для синтеза SystemVerilog и как обстоят дела с этим в квартусе 7? На сайте альтеры никаких толковых упоминаний... как всегда: initial support.
  9. =) Вот, я как раз хотел узнать, в чем же еще можно синтезировать на СВ. Я не противник СВ, даже наоборот, просто сейчас не могу его использовать, кроме как для моделирования. ;-)
  10. Понял... смотреть quartus_unix.pdf =) А проблема была во включенном SCIM (SKIM). После отключения падений не замечаю... равно как и японский текст вводить тоже не могу.
  11. Продолжаем эпопею с интерфейсами. module EngineControllerOutput (EngineControllerOutput_if.def ecif); bit [2:0] state; bit [1:0] chop; // строка 81 bit [3:0] phases; assign ecif.inhibit_n = { chop[1] & (phases[3] | phases[2]), chop[0] & (phases[1] | phases[0]) }; always @(posedge ecif.chclk or posedge ecif.sens[0]) begin if (ecif.sens[0]) chop[0] <= 0; else chop[0] <= 1; end always @(posedge ecif.sens[1]) begin if (ecif.sens[1]) // строка 96 chop[1] <= 0; //else // chop[1] <= 1; end assign ecif.phases = phases; Квартус говорит: Warning (10235): Verilog HDL Always Construct warning at EngineControllerOutput.sv(96): variable "ecif" is read inside the Always Construct but isn't in the Always Construct's Event Control Warning (10030): Net "chop[1]" at EngineControllerOutput.sv(81) has no driver or initial value, using a default initial value 0 Warning (10030): Net "chop[0]" at EngineControllerOutput.sv(81) has no driver or initial value, using a default initial value 0 :cranky: Как быть? Похоже, я выкину СВ и вернусь обратно на верилог.
  12. Потому что без спецификатора квартус говорит, следующее: module EngineController_AvalonSlave_Full #(parameter MSB = 31) (input bit i_Clk, input bit i_Reset_n, input bit i_Clk2, input bit i_ChClk, input bit i_ChipSelect, input bit [1:0] i_Address, input bit i_Write, input bit [MSB:0] i_WriteData, input bit i_Read, input bit i_LeftLimit, input bit i_RightLimit, input bit [1:0] i_Sens, output bit [MSB:0] o_ReadData, output bit o_Irq, output bit [3:0] o_Phases, output bit [1:0] o_Inhibit_n ); wire o_Clk; wire o_Reset; wire o_Half; wire o_CW; EngineControllerOutput_if ecif (o_Clk); EngineController_AvalonSlave #(.MSB(MSB)) avslv1 (i_Clk, i_Reset_n, i_Clk2, i_ChipSelect, i_Address, i_Write, i_WriteData, i_Read, i_LeftLimit, i_RightLimit, o_ReadData, o_Irq, o_Clk, o_Reset, o_Half, o_CW); EngineControllerOutput eng1 (ecif.def); assign o_Phases = ecif.phases; assign o_Inhibit_n = ecif.inhibit_n; assign ecif.chclk = i_ChClk; assign ecif.sens = i_Sens; assign ecif.reset = o_Reset; assign ecif.direction = o_CW; assign ecif.halfstep = o_Half; endmodule // EngineController_AvalonSlave_Full Warning (10030): Net "ecif.test.chclk" at EngineControllerFull.sv(52) has no driver or initial value, using a default initial value 0 и еще про reset, direction, halfstep, sens[0], sens[1] Все решилось явным указанием модпорта: assign o_Phases = ecif.test.phases; assign o_Inhibit_n = ecif.test.inhibit_n; assign ecif.test.chclk = i_ChClk; assign ecif.test.sens = i_Sens; assign ecif.test.reset = o_Reset; assign ecif.test.direction = o_CW; assign ecif.test.halfstep = o_Half; И если в ситуации с assign это еще понятно, то зачем указывать модпорт при связывании интерфейса и модуля, использующего этот интерфейс - непонятно. Похоже, квартус просто не смотрит на спецификацию модуля и его порты. :angry2: Вывод: При этом спецификация тоже получается дурная: ведь модпорт test предполагает входы для phases и inhibit_n и выходы для остальных, значит, в теории, в assign должно указываться ecif.def, а не ecif.test. Результат, полученный для ecif.test в WithExplicitModportSpecification.png. Для assign ecif.def.chclk = i_ChClk; получаем Error (10231): Verilog HDL error at EngineControllerFull.sv(67): value cannot be assigned to input "chclk"...... :maniac:
  13. Может, вопрос не в тему, но чем пользоваться для синтеза? Пытаюсь синтезировать конструкцию в Quartus II 6.1: interface EngineControllerOutput_if (input logic clk); logic chclk; logic reset; logic direction; logic halfstep; logic [1:0] sens; // 3 2 1 0 // A B C D logic [3:0] phases; logic [1:0] inhibit_n; modport def( input clk, chclk, reset, direction, halfstep, sens, output phases, inhibit_n ); modport test ( output chclk, reset, direction, halfstep, sens, input clk, phases, inhibit_n ); endinterface module EngineControllerOutput (EngineControllerOutput_if.def ecif); // бла-бла endmodule module EngineController_AvalonSlave_Full #( parameter MSB = 31 ) ( input bit i_Clk, input bit i_Reset_n, input bit i_Clk2, input bit i_ChClk, input bit i_ChipSelect, input bit [1:0] i_Address, input bit i_Write, input bit [MSB:0] i_WriteData, input bit i_Read, input bit i_LeftLimit, input bit i_RightLimit, input bit [1:0] i_Sens, output bit [MSB:0] o_ReadData, output bit o_Irq, output bit [3:0] o_Phases, output bit [1:0] o_Inhibit_n ); bit o_Clk; bit o_Reset; bit o_Half; bit o_CW; EngineControllerOutput_if ecif (o_Clk); EngineControllerOutput eng1 (ecif); // вот здесь выдает: Error (10828): SystemVerilog error at EngineControllerFull.v(35): expression has 10 elements; expected EngineController_AvalonSlave #(.MSB(MSB)) avslv1 (i_Clk, i_Reset_n, i_Clk2, i_ChipSelect, i_Address, i_Write, i_WriteData, i_Read, i_LeftLimit, i_RightLimit, o_ReadData, o_Irq, o_Clk, o_Reset, o_Half, o_CW); assign o_Phases = ecif.phases; assign o_Inhibit_n = ecif.inhibit_n; assign ecif.test.chclk = i_ChClk; assign ecif.test.sens = i_Sens; assign ecif.test.reset = o_Reset; assign ecif.test.direction = o_CW; assign ecif.test.halfstep = o_Half; endmodule // EngineController_AvalonSlave_Full Если там поставить ecif.def, то варнинг исчезает, но появляется сообщение про несколько источников сигнала на одном входе. Если в assign ниже добавить test (как в исходнике) - то собирается, однако при просмотре в RTL Viewer видим какую-то чушь: блок ecif интерфейса, у него есть входы ecif.test, выходы ecif.def и двунаправленные выходы ecif.... бред. Я не пойму как писать. В ModelSim компилируется без проблем. :angry2:
  14. Извиняюсь, запостил сначала сюда, а потом сделал топик http://electronix.ru/forum/index.php?showtopic=29609
  15. Doka: а можно еще залить куда-нибудь упомянутый в самом начале "SystemVerilog For Design: A guide to using SystemVerilog for HW design and Modeling. Stuard Sutherland, Simon Davidmann // Kluwer Academic Publishers"?
  16. Про winelib: h**p://www.winehq.org/site/docs/winelib-guide/winelib-introduction#WINELIB-WHATIS Кратко - SDK, позволяющий собирать вин-приложения под линукс. Про LD_ASSUME_KERNEL и QUARTUS_MWWM - где можно почитать, что дают эти переменные?
  17. Добрый день. Поставил себе, довольный, Quartus 6.1 под Linux. Linux Gentoo 2006.0, что еще сообщить - не знаю ) С удивлением выяснил, что квартус не совсем кроссплатформенный оказывается, поскольку под данной осью работает при помощи winelibs. Все бы ничего, но он вылетает периодически по General Protection Fault с дампом стека при выполнении совершенно разных действий. :unsure: Сам он никаким образом не изменялся (без таблеток - был включен evaluation mode). Кто-нибудь сталкивался с подобной проблемой? Куда копать?
  18. что же в вашем понимании минимальная конфигурация?И почему в полностью конфигурируемом Леоне вы не смогли её достигнуть? Минимальная - так чтобы влазило в мой кристалл А если серьезно, то в данный момент nios II 5.1 с необходимой мне периферией спокойно помещается в ep1c6, а leon 3 - нет. Понятно из-за чего это, но такой результат не устраивает. складывается ощущение, что grlib выложили специально, чтобы юзвери сидели и мучались. :angry2: config.vhd+ исходники- собирайте любую систему и выбирайте для себя ньюансы. Нет, не так... Просто ее не столько, сколько хотелось бы для безболезненного написания своей системы, а не переделыванию существующих примеров. Конкретный пример: в techmap.clocks.clkgen - реализация для альтеры: clkgen_altera, путем просмотра примеров и исходников выяснил, что внешний clk надо подавать на cgi.pllref, а не на clkin, как предполагалось. Да и описание компонента вообще напрочь отсутствует в документации. Что касается config.vhd - согласитесь, что так конфигурировать можно только уже написанную систему :) А если требуется заменить некоторые компоненты на другие? Ручками. Тогда я не вижу другого смысла в конфигурации, кроме как настройка параметров, указываемых в generics, да и то - не всех. Да, для этого случая - подойдет. почитайте про конфигурацию устройств. Особенно раздел AHB plug&play configuration.Все он там собирает без проблем.О чем и радостно сообщит вам, если вы заведёте моделирование. Как я понял, этот этап вы пропустили.А зря.Там есть такая прикольная фича- в консоль выводятся выполняемые процом адреса и операнды.Незаменимая вещь на первых парах. Я знаю про плюгавость. Но я говорил про другое. Адреса за вас никто назначать не будет. Никто даже не проверит, перекрываются ли они. Только при сборке возможны ошибки. зато закрытых.... :) . :) согласен Я же студент :) Такое в голову не пришло. Или платы не нашлись. Я думал, все и в плисине будет хорошо. В настоящий момент, после перехода на квартус шестой версии, вернулся обратно на ниос, поскольку пропали проблемы, из-за которых не мог собрать проект со своей custom периферией. SPARC - это, конечно, хорошо... Но заставить работать леон я так и не смог. Под эмулем - все нормально, выбирает командочки, выполняет. Все работает. В железе - я не понял, где проблемы. GRMON отказывается находить флешку, похоже, проблемы с контроллером памяти, видимо, что-то не так настроил. Altera JTAG AHB - переписал немного, но не протестировал. В ep1c6 так и не поместилось. Если только без таймеров... но смысла тогда нет совершенно.
  19. Проект - станок с гуи, поскольку опыта в серьезных разработках нет, то в процессе поиска остановился на ПЛИС. Два варианта: Nios II + eCos + Nano X Window System и Leon 3 + eCos (RTEMS) + NXWS. Ни с чем вышеперечисленным ни разу не встречался ранее. Приобрели дешевую платку TrexC1. В нее хорошо влезал Nios II 5.1 в "s" конфигурации с 4Кб кеша команд JTAG Debug Module lvl 1, контроллер SDRAM, CF, Flash, jtag_uart, uart, sysid, epcs_controller, timer. В общей сложности выходило менее 4500 ячеек. На частоте 75 MHz проц выдавал порядка 15 DMIPS. Далее возникли проблемы 1) с лицензией 2) с созданием собственного компонента для SOPC Builder - стандартный мастер компонент создавал, однако в последствие квартус вылетал при фиттинге. Поэтому вернулся к леону. Основной недостаток - невозможность создания минимальной конфигурации, подобной ниосу. Сейчас: Leon 3 (-mmu, -dcache, -icache) + dsu + ahbctrl + ahbuart + mctrl со включенным sdctrl (ESA) + apbctrl + apbuart + irqmp. Все это собралось (без оптимизаций): Device : EP1C6Q240C8 Timing Models : Final Total logic elements : 5,106 / 5,980 ( 85 % ) Total pins : 78 / 185 ( 42 % ) Total virtual pins : 0 Total memory bits : 16,384 / 92,160 ( 18 % ) Total PLLs : 1 / 2 ( 50 % ) Частота 50 MHz. В железе не заработала (хотелось побыстрее поковырять): при подключении по uart grmon не может установить соединение. Сейчас проверяю в modelsim - подозреваю ошибку в mctrl при работе с флешкой с шиной 8 бит - выполняется только одно чтение, вместо 4х (32 бита). Общее впечатление следующее: 1) Документация скудная - есть только описание базовых компонентов grlib и их параметров, различные нюансы конфигурирования старательно опущены. 2) Красивая конфигурация при помощи xconfig, да и даже просто config, на деле мне не пригодилась, поскольку все эти if CFG_SOMEDIFNE = 1 generate.... только загромождают код, в результате, из-за небольшой ошибки в конфиге получаем трудоновылавливаемые ошибки при сборке. 3) Конфигурация системы как в SOPC Builder отсутствует - если в случае с ниосом систему за вас строит билдер, назначая все адреса устройств на шине, осуществляя подключение и отключение, то здесь этого нет. 4) Поскольку Leon - SPARC v8 процессор, то можно использовать все инструменты, доступные для спарка (gcc etc). В частности, одна из причин, по которой перестал пользовать ниосом - это странные ошибки при работе компилятора nios2-elf-gcc (при сборке модуля для ucLinux, он прописывал в поле архитектуры ELF не ALTERA_NIOSII, а странное значение 0xFF). 5) Количество открытых корок для AMBA очень мало (если сравнивать с Wishbone, конечно). P.S.: Видел сравнение Leon 2 + Nios II (не помню версию), когда ниос был маленький (минимальные конфигурации обоих систем), леон выигрывал. В полной конфигурации они были наравне. Для Leon 3 такого сравнения не встречал.
  20. Ну путем ковыряния внутренностей и правки techmap/tap/tap_altera_gen.vhd удалось хотя бы собрать. Пока еще не запускал в железе, поскольку обнаружились проблемы еще при симуляции в modelsim. Просто сейчас пытаюсь запихать в Cyclone EP1C6 базовую комплектацию с минимумом периферии, чтоб заработало, пока не придет платка с Cyclone II EP2C20. grmon-eval работает с JTAG, только срок годности - до конца июня. Мне хватит (надеюсь). Плохо то, что большинство вещей делаю на основании примеров - крайне скудная документация по внутренностям :(. Как починю jtag - напишу.
  21. А что, реализация обычных стандартных алгоритмов деления с ускорением третьего порядка - тоже долго считает?
  22. Доброе время суток. Для проекта взял Leon 3, тот что лежит на сайте gaisler. Последняя версия: 1.0.13.b1905. При попытке собрать под Altera Cyclone в Quartus II 5.1 в конфигурации с использованием AHB JTAG получаю ошибки в процессе маппинга: Error: Port "node_state_e2dr" does not exist in macrofunction "u0" File: d:/home/src/grlib-gpl-1.0.13-b1905/li b/techmap/tap/tap_altera_gen.vhd Line: 104 Error: Port "node_state_pdr" does not exist in macrofunction "u0" File: d:/home/src/grlib-gpl-1.0.13-b1905/lib /techmap/tap/tap_altera_gen.vhd Line: 104 Посмотрев описание в altera\quartus51\libraries\megafunctions\sld_virtual_jtag.v обнаружил, что там в самом деле отсутствуют эти порты (node_state_e2dr и node_state_pdr), зато есть node_state_sir, // output Signals that the node is in the Shift_IR state (shared) node_state_e1ir, // output Signals that the node is in the Exit1_IR state (shared) которые отсутствуют в описании в tap_altera_gen.vhd. Вопрос, это связано с версией Quartus? Т.е. в 6.0 версии описание sld_virtual_jtag изменилось? Каким образом переподключить sld_virtual_jtag, чтобы оно заработало?
  23. По сути buildroot - это система для сборки корня, окружающей среды. Ядро, в принципе, сюда не входит. Мне помог следующий метод: берем ucLinux-dist-test, правим в настройках Makefile пути к romfs, отключаем построение в нем собственного образа корня (т.е. фактически убираем компиляцию программ из директории user). Затем собирам корень (buildroot), и потом - ядро. Правила, используемые в Makefile ядра собирают также образ для прошивки. Вроде работало. ucLinux-dist-test от 2006.05.11 + патч на ниос2. Buildroot какой-то сентябрьский. Здесь еще многое зависит от самого процессора. Если он не поддерживает MMU, то, насколько я понимаю, не будет поддержки разделяемых объектов (*.so). Сейчас еще попляшу с файлами сборки, чтобы все одной командой собирать, но, вроде это несложно. Сильно не бейте :)) Только учусь.
×
×
  • Создать...