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

LordVader

Участник
  • Постов

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

  • Посещение

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


  1. Дано: modelsim 10.0b

     

    Из кода на верилоге (тестбенч) пытаюсь сделать что-то вроде

        initial
        begin
            force tb.q75.u0.RC <= 16'd0;
        end

    q75.u0.RC -- это signal в VHDLном модуле.

     

    Получаю:

    # ** Error: (vsim-8220) tb_top.v(570): This or another usage of 'tb.q75.u0.RC' inconsistent with 'VHDL SIGNAL' object.

     

    Есть очевидный метод, заключающийся в переписывании VHDL-кода с целью введения нужного функционала.

     

    Но что же получается, из вериложного бенча нельзя форсить сигналы в глубине VHDLного кода? Или можно, но я просто не знаю как? Если так, то как надо?

  2. Сабж вообще бывает? Гуглёж дал намёки, что раньше выпускались диммы с такими.

     

    Очень хочется, потому что allwinner A13 умеет только DDR2, хотя сам в QFP.

     

    Частоты устроят и минимальные, за ними не гонимся.

  3. В опциях avr-objcopy надо указать целевую архитектуру (avr:51), но навскидку не скажу как именно, какими ключами это сделать.

    "-O elf32-avr" -- разве не указание архитектуры?

     

     

    Прочёл ман и дошло...

    Сергей, спасибо за подсказку.

    добавил в avr-objcopy "-B avr:51" и всё слинковалось.

     

  4. стоят avr-gcc, avr-binutils и libc-avr.

    Делаю из бинарника объектный файл с целью влинковать его:

     

    >avr-objcopy -I binary -O elf32-avr --rename-section .data=.progmem.data,contents,alloc,load,readonly,data --redefine-sym _binary_top_mlz_start=fpga --redefine-sym _binary_top_mlz_end=fpga_end top.mlz top.o

    тут всё ок.

     

    далее линкую:

    >avr-gcc -mmcu=atmega128 -Wl,-Map=core.map zx.o interrupts.o main.o ps2.o spi.o depacker_dirty.o rs232.o rtc.o atx.o joystick.o version.o tape.o kbmap.o top.o   -o core.elf
    /usr/lib/gcc/avr/4.5.3/../../../avr/bin/ld: avr architecture of input file `top.o' is incompatible with avr:51 output
    collect2: ld returned 1 exit status

     

    Версии:

    >avr-gcc --version
    avr-gcc (GCC) 4.5.3
    >avr-objcopy --version
    GNU objcopy (GNU Binutils) 2.20.1.20100303

     

    ЧСХ, те же версии тулзов в mint 11 64bit линкуют всё на ура.

     

    Я неправ в опциях avr-objcopy или это баг в тулзах?

    И (риторическое) что делать? :)

     

  5. Граждане, а насколько хорошо Quartus версий 9-10-11 дружит с Windows XP 64bit? Особенно интересует при наличии в системе 4+ Gb памяти.

    Про XP не знаю, с vin7 64 сабж дружит замечательно. Правда с проектами, требующими более гига, пока не сталкивался.

    64битная версия процентов на 5-10 быстрее 32битной (сравнивал на одном проекте, общее время порядка получаса).

    Также интересует "восприимчивость" Квартусов к многоядерным процам - насколько наличие дополнительных ядер влияет на скорость работы?

    На том же проекте: маппер вообще не использует более 1 ядра, фиттер говорит, что использует одно ядро 100% времени, остальные - 35-40% времени. Причём по этапам фиттинга использование ядер разнится - иногда все 4 пашут под 100% каждое, иногда все 4, но загружены не полностью, иногда в одно ядро.

    Еще много ядер использует timequest и впараллель с ним работает assembler, но у меня по времени это совсем незаметный минимум на фоне первых двух тасков.

     

  6. Ещё при моделировании могут вылезти баги. Старайтесь в верилоге не использовать pull1, pull0. При передаче таких сигналов в ВХДЛ они превратятся не в 1 и 0, а в Z, и моделирование сломается. modelsim 6.2k

  7. Просто память, например такую:

        always @(posedge clk)
        begin
            if( rd_ena ) rd_data <= mem[rd_addr];
            if( wr_stb ) mem[wr_addr] <= wr_data;
        end

     

    квартус замечательно кладёт в блок памяти на кристалле.

     

     

    Но если нужна память с byte enable'ами по записи, то анчинаются чудеса. Или память полностью в LE оказывается. Или таки в блоке памяти, но дублируется в LE. Или же вметсо 1 блока памяти берутся два и используются наполовину каждый.

     

    Вот так вот - дублируются логикой все биты памяти.

        always @(posedge clk)
        begin
            if( rd_ena ) rd_data <= mem[rd_addr];
    
            if( wr_stb ) mem[wr_addr][15:8] <= wr_bmask[1] ? wr_data[15:8] : mem[wr_addr][15:8];
            if( wr_stb ) mem[wr_addr][ 7:0] <= wr_bmask[0] ? wr_data[ 7:0] : mem[wr_addr][ 7:0];
        end

     

    Вот так вот - 2 блока по половинке в каждом и 2 LE вдобавок.

        always @(posedge clk)
        begin
            if( rd_ena ) rd_data <= mem[rd_addr];
    
            if( wr_stb && wr_bmask[1] ) mem[wr_addr][15:8] <= wr_data[15:8];
            if( wr_stb && wr_bmask[0] ) mem[wr_addr][ 7:0] <= wr_data[ 7:0];
        end

     

    verilog, quartus 9.1, stratix 2, блоки M512

     

     

    Подскажите, если кто знает рецепт, можно ли написать так, чтоб квартус правильно заинферил?

     

     

    Про мегафункции в курсе, но хочется сделать красиво.

  8. Хороша у Вас машинка. НО!

    http://en.wikipedia.org/wiki/Physical_Addr...crosoft_Windows

     

    Моежт я ошибаюсь, но мне кажется что будь даже 32 гига памяти, и поддержка такой памяти осёй, 32битные проги всё равно не осилят более 4 гигов заюзать. Надо ставить 64-битную ось и 64-битные прилаги, независимо от выбора виндос-линух.

  9. И не путайте LOAD-STORE архитектуру и RISC - это две не пересекающиеся вещи. RISC не обязан быть LOAD-STORE, и наоборот, LOAD-STORE не обязан быть RISC.

    Я вправе иметь своё мнение. И моё мнение таково, что RISC я не понимаю как дословную аббревиатуру. И знакомство с некоторым кол-вом процессоров заставляет думать, что риск - это не кол-во команд, а прежде всего их простота. и в том числе load-store. И почему-то так считают некоторые умные люди, которые пишут книги.

     

    Что касается переменной длины инструкций у MSP - это кажущаяся с первого поверхностного взгляда вещь. Обман зрения. На самом деле длина инструкции у него всегда 16 бит, а все эти якобы удлинения - это автоинкрементная адресация с регистром R7 - просто выборка операнда из памяти.

    Автоинкрементация она, когда проц не конвееризированный, как 430ый в оригинале или как топиковый. Посмотрите, как извращаются в современных x86-процах на этапе "fetch opcode".

     

    И только он вправе корректно определять архитектуру своего детища, если ее не открывает в виде схем и/или исходных текстов.

    Да ради бога. А я вправе определять архитектуру его детища, как мне удобно :)

  10. Ну можно конечно посчитать кол-во команд, и сказать что риск (ага, меньше чем у пика).

    А можно подумать вот как:

    каждлая команда в 430 имеет длину от 1 до 3 слов. При этом она может инициировать от 0 до 3 аксессов в память, выполняя вычисления с выбранными и записываемыми данными.

    А теперь сравним с настоящими рисками: mips, sparc, power, arm: длина команды фиксированная, операции или внутри регистров, или запись-чтение регистров из памяти без операций над данными.

  11. MSP, который голимый RISC вплоть аж до того, что счетчик команд и указатель стека в РОНах, вследствие чего декодера инструкций, можно сказать, почти нет, все сигналы идут проводами прямо на исполнительные блоки, да и самих команд (классов команд по формату опкода) раз, два и обчелся.

     

    Я конечно извиняюсь, но какой же мсп430 риск? Он вообще без регистров работать может (ну кроме пц, сп, константных), держа все переменные в памяти. И в пределах 1 команды делать 2 раза чтения и 1 раз запись в память модифицированного значения. Что-то как-то других рисков ТАКИХ я не видел :)

  12. И что-то мне не нра как квартус его компилирует, особенно когда представляет не 2073 16-битных регистра, а 2073*16 1-битных регистров... :07:

     

    Ну в FPGA всё равно все триггеры - 1битные, потому какая разница? ;-)

    А зато вот можно вместо сдвигового регистра использовать память, сразу 16-битными словами.

  13. периферия своя. Если чего нет- додумаем. главное чтоб ядро было не кривое. Я давненько искал нечто подобное. Наконец-то появилось ).

    На какой тактовой работать может? 50 МГц?

     

    Ну как и любое не оптимированное под ФПГА ядро, да ещё и цыск (что бы там не писали в ТИ), оно жрёт много, а работает медленно. Чуть-чуть до 40мгц не дотягивало, но это был ква 6.1 (для циклона 2).

     

    PS: Я автору кинул фикс под ДЕ1, он обещал выложить как только, так сразу (у него ребятёнок родился).

  14. Ограничение вроде одно - из ОЗУ выполняться не может. А я озу ставил и до 32 кило (с сотвествтуеющей правкой линкер-скрипта, ессно). И даже внешнее на ДЕ1 подключал ОЗУ. В целом, ядро хорошее, относительно мелкое (без дебага - в районе 1600 LE), а вот попытки сэмулировать периферию реальных чипов имхо нафиг не нужны.

     

    Да,и ещё у автора там некий бардак с инклудами (он и сам признаёт). Я эту тему, впрочем, уже тут поднимал...

  15. создаем к примеру массив из 512 элементов std_logic_vector(0 to 15)

    в Cyclone-2 он отжирает кучу вентилей, поэтому в простые не лезет. = 5200 LE

    в асех 1к - оно делается в RAM + 700 LE

     

    Это вы что ли асинхронную память делаете? Так в ацексах блоки памяти могут быть асинхронными, а в цыцлонах - уже нет. Сделайте синхронную и всё ляжет в блоки памяти цыклонов.

  16. А мне кажется, что и acex1k тоже не стоит использовать без серьёзных на то оснований. Медленноватое, оч. мало LE, дорогое. Имеет смысл только если много 5в сигналов.

     

    Стабилизаторы - да любые. LM1117 вон.

  17. Замечал такое же для acex1k, от 6ого к 7ому или 8ому (не помню точно). Кол-во LE увеличивалось. При том, что тайминги оставались с точностью до сотых долей наносекунды такими же. Оптимизации ставились те же самые.

  18. Если есть специалисты кто такие веши моделировал помогите пожалуйста!! Заранее благодарен!! :smile3046:

     

    module tb;
    ...
    wire [7:0] data;
    ...
    device dut( .data(data) ...
    ...
    assign data = give_data_to_device  ? data_for_device : 8'hZZ;
    ...
    endmodule
    
    
    module device (
       inout wire [7:0] data,
    ...
    );
    ...
    тут data должна назначаться так же, как и выше
    ...
    endmodule

     

    и всё работает. Конфликты на такой шине приводят к иксам. Если нету источников - будут Z-ы (всё видно на картинках в моделсиме). Можно сделать tri1 иди tri0 вместо вайра - будет вместо Z-ов подтяжка к 1 или к 0.

  19. Уважаемые коллеги подскажите!!!

    1) Возник такой вопрос, как обозначать двунаправленый порт ввода-вывода в языке Verelog пр написании testbench для modelsim!!

    inout ?

    2) В проекте Quartus на нижней иерархии создал с помощью мугафункций Altera двухпортовую RAM память. Про модуляции в modelsim, я вижу что выход двухпортовую RAM находится в третьем состоянии. У меня возникла мысль, что это из-за того что непроинициализирована память! У меня возник вопрос как проинициализировать память в нижней иерархие проекта!!??

     

    integer i;
    
    initial
    for(i=0;i<размер_памяти;i=i+1)
      tb.memory.array[i]=0;

     

    tb - имя модуля тестбенча, в котором вы этот initial пишете, memory - имя памяти, как она инстанциирована в tb, а array - имя в ней массива, который непосредственно и есть память. Или то же самое напишите в модуле памяти, без иерархических имён только, сразу array=0;

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