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

DukeXar

Свой
  • Постов

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

  • Посещение

Сообщения, опубликованные DukeXar


  1. Предложение то нормальное. Неужели никто не захотел?

    Наверное, все уже сидят по хорошим местам. А с молодежью чего-то не так?

     

    А молодежь еще не доросла :07: ей надо учиться, учиться, и, еще раз, у...читься!

  2. Да, значение Е не может быть отрицательным. Но если Е=0, то число денормализованное, т.е М<1. Не совсем понятна ситуация. Берем два примера (значения в бинарном виде):

    Е=110 М=0,0001…

    Результирующие значения Е=010 М=1,…(нормальное число)

     

    Другая комбинация:

    Е=010 М=0,0001…

    Результирующие значения Е=000 М=0,01…(денормализованное число)

     

    А если вот такая комбинация

    Е=100 М=0,0001…

    Каковы результирующие значения?

     

    Е=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.

  3. Если порядок (E) смещенный, т.е. принимает только положительные значения, то его нулевое значение - минимальное значение, поэтому вполне возможно для использования. Т.е. порядок никак не влияет на то, является ли число нормализованным или денормализованным. Вот если он равен 0, а мантисса все еще не нормализованна, т.е. ее необходимо сдвинуть еще один раз влево (или несколько раз), то порядок уже некуда уменьшать, в результате получится переполнение (не помню как оно правильно называется, underflow), и результат получится равным 0. Вы просто не можете представить такое число в используемой разрядной сетке.

  4. Пришла отладочная плата на второй циклон от терасика. С плис так до сих пор и не познакомился, вот начинаю. Ради интереса запустил проект CII_Starter_NIOS, который шел вместе с платой... не хочет ни запускаться ни компилиться, говорит, нужен файл CII_Starter_NIOS.v И вот отсюда вопрос: надо его где-то искать, или писать самому, или покупать... или надо ставить тот квартус (6.0), что шел с платой ( у меня сейчас поставлен 6.1, вылеченный, или покалеченный). Проект с моргающими светодиодами собирается и прошивается на ура. Просто хотелось с ходу увидеть, какое это хорошее устройство у меня на столе работает, чтобы душа возликовала и принялась за изучение всех сопутствующих вопросов.

     

    Сам пользуюсь этим комплектом. Плата - чудо, особенно после 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\

  5. Для отладки совместно с SignalTapII попробуйте Codelab для отладки лежит в закромах

    или его аналог EDGE IDE от mentor

    edge

    EDGE IDE работает шустрее чем Eclipse, но нет таблетки

     

    Мдя... на Edge цена укусилась. :blink: Тоже, кстати, RCP-based (Eclipse).

    А каким образом она подключается к целевой платформе? Com-порт или что-то еще?

    А про codelab ничего не нагуглил :(

  6. Как думал проверить работоспособность Avalon Slave устройства:

    1) Заливаю прошивку в FPGA по JTAG

    2) Запускаю отладчик из-под Eclipse

    3) Смотрю по Signal Tap II сигнальчики

    И тут пришли они - грабли! Надо сначала отключить терминал, а, соответственно, и отладчик gdb, чтобы иметь возможность пользоваться Signal Tap II. Или я что-то не так делаю? :maniac:

  7. Вы меня прямо огорчили, у меня как-раз Cyclone II.

    А что еще существует для синтеза SystemVerilog и как обстоят дела с этим в квартусе 7? На сайте альтеры никаких толковых упоминаний... как всегда: initial support.

  8. =) Вот, я как раз хотел узнать, в чем же еще можно синтезировать на СВ.

    Я не противник СВ, даже наоборот, просто сейчас не могу его использовать, кроме как для моделирования. ;-)

  9. Понял... смотреть quartus_unix.pdf =)

    А проблема была во включенном SCIM (SKIM). После отключения падений не замечаю... равно как и японский текст вводить тоже не могу.

  10. Продолжаем эпопею с интерфейсами.

     

    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:

     

    Как быть? :help:

    Похоже, я выкину СВ и вернусь обратно на верилог. :wacko:

  11. может не в этом дело, но в модуле EngineController_AvalonSlave_Full вы делаете инстанс интерфейса

    почему вы тогда обращаетесь к нему в этом же модули используя спецификаторы модпортов

    assign ecif.test.chclk = ??

     

    Потому что без спецификатора квартус говорит, следующее:

     

    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:

    post-7038-1175583775_thumb.jpg

  12. Может, вопрос не в тему, но чем пользоваться для синтеза?

    Пытаюсь синтезировать конструкцию в 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:

  13. какие еще winelibs? Там mainwin.

    Про winelib: h**p://www.winehq.org/site/docs/winelib-guide/winelib-introduction#WINELIB-WHATIS

    Кратко - SDK, позволяющий собирать вин-приложения под линукс.

    А что можно пробовать - так это QUARTUS_MWWM=allwm , да и с LD_ASSUME_KERNEL поиграться. У меня под FC4 все арбайтен безукоризненно.

    Про LD_ASSUME_KERNEL и QUARTUS_MWWM - где можно почитать, что дают эти переменные?

  14. Добрый день.

    Поставил себе, довольный, Quartus 6.1 под Linux.

    Linux Gentoo 2006.0, что еще сообщить - не знаю )

    С удивлением выяснил, что квартус не совсем кроссплатформенный оказывается, поскольку под данной осью работает при помощи winelibs.

    Все бы ничего, но он вылетает периодически по General Protection Fault с дампом стека при выполнении совершенно разных действий. :unsure:

    Сам он никаким образом не изменялся (без таблеток - был включен evaluation mode).

    Кто-нибудь сталкивался с подобной проблемой? Куда копать?

  15. Основной недостаток - невозможность создания минимальной конфигурации, подобной ниосу.

    что же в вашем понимании минимальная конфигурация?И почему в полностью конфигурируемом Леоне вы не смогли её достигнуть?

     

    Минимальная - так чтобы влазило в мой кристалл :biggrin:

    А если серьезно, то в данный момент nios II 5.1 с необходимой мне периферией спокойно помещается в ep1c6, а leon 3 - нет. Понятно из-за чего это, но такой результат не устраивает.

     

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

    складывается ощущение, что grlib выложили специально, чтобы юзвери сидели и мучались. :angry2:

    config.vhd+ исходники- собирайте любую систему и выбирайте для себя ньюансы.

     

    Нет, не так... Просто ее не столько, сколько хотелось бы для безболезненного написания своей системы, а не переделыванию существующих примеров.

    Конкретный пример: в techmap.clocks.clkgen - реализация для альтеры: clkgen_altera, путем просмотра примеров и исходников выяснил, что внешний clk надо подавать на cgi.pllref, а не на clkin, как предполагалось. Да и описание компонента вообще напрочь отсутствует в документации.

     

    Что касается config.vhd - согласитесь, что так конфигурировать можно только уже написанную систему :)

    А если требуется заменить некоторые компоненты на другие? Ручками. Тогда я не вижу другого смысла в конфигурации, кроме как настройка параметров, указываемых в generics, да и то - не всех. Да, для этого случая - подойдет.

     

    3) Конфигурация системы как в SOPC Builder отсутствует - если в случае с ниосом систему за вас строит билдер, назначая все адреса устройств на шине, осуществляя подключение и отключение, то здесь этого нет.

     

    почитайте про конфигурацию устройств. Особенно раздел AHB plug&play configuration.Все он там собирает без проблем.О чем и радостно сообщит вам, если вы заведёте моделирование. Как я понял, этот этап вы пропустили.А зря.Там есть такая прикольная фича- в консоль выводятся выполняемые процом адреса и операнды.Незаменимая вещь на первых парах.

     

    Я знаю про плюгавость. Но я говорил про другое. Адреса за вас никто назначать не будет. Никто даже не проверит, перекрываются ли они. Только при сборке возможны ошибки.

     

    5) Количество открытых корок для AMBA очень мало (если сравнивать с Wishbone, конечно)

    зато закрытых.... :) .

     

    :) согласен

     

    И на последок вопросик- А чем вам связка ARM+ПЛИС не устроила? или платы подходящей не было?

     

    Я же студент :)

    Такое в голову не пришло. Или платы не нашлись. Я думал, все и в плисине будет хорошо.

     

    В настоящий момент, после перехода на квартус шестой версии, вернулся обратно на ниос, поскольку пропали проблемы, из-за которых не мог собрать проект со своей custom периферией. SPARC - это, конечно, хорошо... Но заставить работать леон я так и не смог. Под эмулем - все нормально, выбирает командочки, выполняет. Все работает. В железе - я не понял, где проблемы. GRMON отказывается находить флешку, похоже, проблемы с контроллером памяти, видимо, что-то не так настроил.

    Altera JTAG AHB - переписал немного, но не протестировал.

    В ep1c6 так и не поместилось. Если только без таймеров... но смысла тогда нет совершенно.

  16. Проект - станок с гуи, поскольку опыта в серьезных разработках нет, то в процессе поиска остановился на ПЛИС. Два варианта: 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 такого сравнения не встречал.

  17. Ну путем ковыряния внутренностей и правки techmap/tap/tap_altera_gen.vhd удалось хотя бы собрать. Пока еще не запускал в железе, поскольку обнаружились проблемы еще при симуляции в modelsim.

    Просто сейчас пытаюсь запихать в Cyclone EP1C6 базовую комплектацию с минимумом периферии, чтоб заработало, пока не придет платка с Cyclone II EP2C20.

    grmon-eval работает с JTAG, только срок годности - до конца июня. Мне хватит (надеюсь).

    Плохо то, что большинство вещей делаю на основании примеров - крайне скудная документация по внутренностям :(.

    Как починю jtag - напишу.

  18. Доброе время суток.

    Для проекта взял 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, чтобы оно заработало? :help:

  19. По сути buildroot - это система для сборки корня, окружающей среды. Ядро, в принципе, сюда не входит.

    Мне помог следующий метод: берем ucLinux-dist-test, правим в настройках Makefile пути к romfs, отключаем построение в нем собственного образа корня (т.е. фактически убираем компиляцию программ из директории user). Затем собирам корень (buildroot), и потом - ядро. Правила, используемые в Makefile ядра собирают также образ для прошивки.

    Вроде работало. ucLinux-dist-test от 2006.05.11 + патч на ниос2. Buildroot какой-то сентябрьский. Здесь еще многое зависит от самого процессора. Если он не поддерживает MMU, то, насколько я понимаю, не будет поддержки разделяемых объектов (*.so).

    Сейчас еще попляшу с файлами сборки, чтобы все одной командой собирать, но, вроде это несложно.

    Сильно не бейте :)) Только учусь.

×
×
  • Создать...