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

_ANDREW

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

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

  • Посещение

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


  1. Здравствуйте. У меня возникла проблема при освоении PCIe ядра для Virtex6 ML605.

    Я изучил документацию xapp1052.pdf, xapp1022.pdf, ug517.pdf, ug379.pdf. Скачал xapp1052.zip, xapp1022.zip и программу PciTree.exe.

    Прогрузил флеш на плате проектом примером с PIO-после перезагрузки плата не определилась системой. потом попробовал прогрузить примером который был в xapp1052.zip (пример с BMD). увидел плату с помощью PCITree. затем установил драйвер pcie_demo.sys из xapp1052.zip запустил соответсвующее приложение PCIe_Perf.exe. Оно показало что транзакции чтения и записи совершаются, показало скорость транзакций. Но я не понял что дальше мне делать с этим BMD. Мне нужно осуществлять передачу данных через шину в ПЛИС, их там обрабатывать, и отправлять обратно по шине. Поковырял с Chipscope различные шины в BMD во время транзакций записи и чтения, но куда подключится для получения данных так и не нашёл.

    Далее я попытался установить драйвер xilinx_pcie_block.sys из xapp1022.zip согласно документации xapp1022.pdf. Система WindowsXP SP3 перестала загружаться. Загрузка стала возможна только в безопасном режиме, в котором с помощью программы MET.exe из xapp1022.zip я смог записать и прочитать регистры как описано в xapp1022.pdf.

     

    Если кто то сталкивался с похожими проблемами помогите пожалуйста их решить.

    И если можно ответьте пожалуйста на несколько вопросов:

    1. В чём принципиальное различие между BMD и PIO.

    2. возможно ли с помощью драйвера в xapp1052.zip полноценно использовать ядро в режиме DMA(чтение и запись по адресам) система Windows.если кто то знает где можно найти драйвер(Windows) для работы с PCIe с описанием буду ОЧЕНЬ благодарен.

    Заранее огромное спасибо!

  2. Большое спасибо всем за ответ. То есть, если я правильно понял, даже при отсутствии black box в проекте на этапе синтеза невозможно узнать сколько % будет занимать проект.

    jojo, подскажите пожалуйста, как именно в % выделить слайсы. в файле cgd.pdf нашёл информацию по использованию констант AREA_GROUP, RANGE, но не совсем понятно.

  3. здравствуйте!

    вопрос следующий: после синтеза проекта XST он занимает 58% , а после имплементации 74, почему?

    отчёт по синтезу

    Selected Device : 6vlx240tff1156-2

     

     

    Slice Logic Utilization:

    Number of Slice Registers: 99196 out of 301440 32%

    Number of Slice LUTs: 87661 out of 150720 58%

    Number used as Logic: 87644 out of 150720 58%

    Number used as Memory: 17 out of 58400 0%

    Number used as SRL: 17

     

    Slice Logic Distribution:

    Number of LUT Flip Flop pairs used: 108451

    Number with an unused Flip Flop: 9255 out of 108451 8%

    Number with an unused LUT: 20790 out of 108451 19%

    Number of fully used LUT-FF pairs: 78406 out of 108451 72%

    Number of unique control sets: 3868

     

    IO Utilization:

    Number of IOs: 151

    Number of bonded IOBs: 151 out of 600 25%

     

    Specific Feature Utilization:

    Number of Block RAM/FIFO: 157 out of 416 37%

    Number using Block RAM only: 157

    Number of BUFG/BUFGCTRLs: 3 out of 32 9%

     

    отчёт по имплементации

     

     

    Device Utilization Summary:

     

    Slice Logic Utilization:

    Number of Slice Registers: 99,196 out of 301,440 32%

    Number used as Flip Flops: 99,196

    Number used as Latches: 0

    Number used as Latch-thrus: 0

    Number used as AND/OR logics: 0

    Number of Slice LUTs: 76,802 out of 150,720 50%

    Number used as logic: 74,551 out of 150,720 49%

    Number using O6 output only: 56,764

    Number using O5 output only: 71

    Number using O5 and O6: 17,716

    Number used as ROM: 0

    Number used as Memory: 17 out of 58,400 1%

    Number used as Dual Port RAM: 0

    Number used as Single Port RAM: 0

    Number used as Shift Register: 17

    Number using O6 output only: 17

    Number using O5 output only: 0

    Number using O5 and O6: 0

    Number used exclusively as route-thrus: 2,234

    Number with same-slice register load: 2,224

    Number with same-slice carry load: 10

    Number with other load: 0

     

    Slice Logic Distribution:

    Number of occupied Slices: 28,140 out of 37,680 74%

    Number of LUT Flip Flop pairs used: 93,406

    Number with an unused Flip Flop: 8,206 out of 93,406 8%

    Number with an unused LUT: 16,604 out of 93,406 17%

    Number of fully used LUT-FF pairs: 68,596 out of 93,406 73%

    Number of slice register sites lost

    to control set restrictions: 0 out of 301,440 0%

     

    подскажите, может можно с помощью настроек уменьшить объём проекта... спасибо..

  4. здравствуйте.

    хотелось бы создать закрытое ядро из vhdl файла. слышал что можно использовать ngc файл или encripted ngc.

    среда разработки-xilinx ise 12.3.

    заранее спасибо.

  5. Muscat

    Сравните то что в документе на стр. 78 и то что привел _ANDREW описание на VHDL правда для XILINX.

     

    на 78 странице память подключена как примитив, а вот на стр 76, внизу (Register-Based Dual-Port SRAM) подключение памяти как синтезируемого компонента... и практически тоже самое что и в моём коде (только я прописал ROM с инициализированными значениями). Честно говоря, думаю что отличия в архитектуре у разных компаний не велики..

    и я обычно не подключаю блоки как примитивы, лучше писать на чистом языке, с настройкой синтеза атрибутами, чем лепить примитивы, и каждый раз переделывать проект под разные микросхемы.

  6. _ANDREW, я тоже уже склоняюсь к тому, чтобы попробовать положить все на блочную память.

    Как это лучше сделать в HDL коде?

    1) Внутри архитектуры сигнала объявить сигнал типа массив с предварительным заданием значений

    2) Внутри процесса объявить переменную, с предварительным заданием

    3) Оставить все, как есть у меня сейчас - массив входных данных объявлен константой в упаковке

     

    Я всегда делаю 1. вот небольшой пример

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    
    entity ROM is
    port (CLK : in std_logic;
         EN : in std_logic;
         ADDR : in std_logic_vector(15 downto 0);
         DATA : out std_logic_vector(31 downto 0));
    end ROM;
    
    architecture syn of ROM is
    
    
    
    
    
       type rom_type is array (0 to 1007) of std_logic_vector (31 downto 0);                 
       signal ROM : rom_type:= (
    
    
    X"00000000",   X"00040050",   X"000d00c0",   X"00cc01f0",   X"00ea0180",   X"01bb0080",   X"01aa0090",   X"01720120",
    X"014d0100",   X"011001f1",   X"010a00c1",   X"00000010",   X"00110160",   X"00710200",   X"00810110",   X"008901a0",
    X"008d0111",   X"00b801e0",   X"00c10112",   X"01cb0230",   X"016c0091",   X"015a0150",   X"00000020",   X"00130181",
    X"004d0210",   X"006800c2",   X"006c0140",   X"00cc0092",   X"01e401d0",   X"01c00130",   X"01a201e1",   X"01630093",
    X"01200141",   X"00000030",   X"001200d0",   X"001901c0",   X"00620231",   X"00680211",   X"007800a0",   X"009d0142",
    X"00ad00f0",   X"01d401c1",   X"01b30220",   X"01740190",   X"00000040",   X"00120212",   X"00310131",   X"00550170",
    X"009b0221",   X"00bd00d1",   X"00e300a1",   X"01400232",   X"012b0041",   X"012d0070",   X"01220171",   X"00000051"
    
    -- и так далее	
    
    );                        
    attribute ROM_STYLE : string;   ---атрибуты для того чтобы при синтезе распределение было в блоковую память
    attribute ROM_STYLE of ROM: signal is "block";
    
    begin
    
    
    
       process (CLK)
       begin
           if (CLK'event and CLK = '1') then
               if (EN = '1') then
    		DATA <= ROM(conv_integer(ADDR));
               end if;
           end if;
       end process;
    
    end syn;

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

  7. Muscat, я не тестировал декодер Витерби, и с Actel не работал, но имеется небольшой опыт тестирования других декодеров на Virtex5...

    Честно, я не вникал в архитектуру Actel, но в Virtex есть блочная память, думаю она есть и у Actel. так вот, я всегда использовал для теста эту самую память...

    Организую её как ROM и либо файлом, либо из vhd файла определяю начальные значения ячеек, а потом просто счётчиком по порядку перебираю ячейки...

    но всё это получится если длина кодового слова у Вас вместится в неиспользуемую память...

    И, если не секрет, для каких кодов Витерби делаете?? А то у меня тоже этот тип в дальнейшем, похоже, намечается...

  8. Прошу пардону. У меня более ранняя версия ISE, в которой он поддерживался.

     

    Однако Xilinx предлагает замену:

    XST now supports Partitions in place of Incremental Synthesis. For more information on

    Partitions, see the ISE® Design Suite Help.

     

    К сожалению обнаружил "ERROR:TclTasksC:partition_031: Partitions are no longer supported in 12.1 Project Navigator and Xilinx Tcl." Так что пока не ясно как избежать повторного синтеза... :wacko:

  9. По поводу Incremental Synthesis нашёл в XST.pdf нашёл следующее: The incremental_synthesis and resynthesize constraints are no longer supported. Так что пока вопрос остаётся открытым...

  10. Здравствуйте.

    Пишу проект в ISE12.3 который состоит из файла top.vhd и нескольких вложенных файлов in_buf.vhd, fifo.vhd и out.buf. Был произведён синтез top.vhd, соответственно все 3 вложенных файла прошли синтез. Имеется ли такая возможность при изменении файла in_buf.vhd и повторном синтезе top.vhd не синтезировать fifo.vhd и out.buf, т.е. те которые прошли синтез и не изменялись?

    А то тратится очень много времени.

    Заранее спасибо.

  11. Всем спасибо за помощь!!

    Сегодня поковырял снова эту проблему, и выяснил, что моделсим не видит 'ifdef, а весь файл ddr3_model_parameters.vh написан под несколько микросхем памяти а конкретная выбирается с помощью условий ifdef

    `ifdef QUAD_RANK

    `define DUAL_RANK // also define DUAL_RANK

    parameter CS_BITS = 4; // Number of Chip Select Bits

    parameter RANKS = 4; // Number of Chip Selects

    `else `ifdef DUAL_RANK

    parameter CS_BITS = 2; // Number of Chip Select Bits

    parameter RANKS = 2; // Number of Chip Selects

    `else

    parameter CS_BITS = 2; // Number of Chip Select Bits

    parameter RANKS = 1; // Number of Chip Selects

    `endif `endif

     

    я убрал эту универсальность, всё сделал под конкретную микруху без ifdef и всё заработало... но это не порядок.. надо разбираться...

    на следующей неделе встречаюсь с гуру моделсима... у меня к нему масса вопросов... так что разберусь - отпишусь!!!

  12. Вы имеете ввиду ГОСТ 28147-89? я его начинал делать, ради эксперимента, и не на такие скорости.. но потом эта задача отпала. но работу в режиме простой замены почти доделал.

    я бы посоветовал применить VIRTEX6, хотя думаю и Spartan6 с лихвой хватит и думаю что внешняя память будет не нужна, т.к. нет в алгоритме таких больших массивов данных которые не уместятся в BlockRAM плиски...

  13. я в верилоге тоже не очень, но все эти файлы создаёт COREGENERATOR, так что не с путями проблема. но что бы перепробовать всё, я ему полный путь прописывал, всё равно ругается.. :(

  14. Здравствуйте.

    Подскажите пожалуйста, я сгенерировал в MIG контроллер DDR3, сделал ВСЁ по мануалу (ug406) топом сделал testbanch из папки design_example/sim и попытался всё это дело просимулировать в modelsim6.5. Результаты весьма омрачающие...

    1) модель памяти MIG генерирует ТОЛЬКО на верилоге. Я в верилоге не пишу, и поэтому так и не понял, почему modelsim пишет что 2001 редакция верилога не понимает глобальное объявление parametеr? и не понимает вставки 'include. A MIG всё делает с глобальным объявлением параметров.

    Пример (102,103,104,,,,,126,127,128 - номер строк)

    файл ddr3.v

    ............

     

    102 `include "ddr3_model_parameters.vh"

    103

    104 parameter check_strict_mrbits = 1;

    parameter check_strict_timing = 1;

    parameter feature_pasr = 1;

    parameter feature_truebl4 = 0;

     

    // text macros

    `define DQ_PER_DQS DQ_BITS/DQS_BITS

    `define BANKS (1<<BA_BITS)

    `define MAX_BITS (BA_BITS+ROW_BITS+COL_BITS-BL_BITS)

    `define MAX_SIZE (1<<(BA_BITS+ROW_BITS+COL_BITS-BL_BITS))

    `define MEM_SIZE (1<<MEM_BITS)

    `define MAX_PIPE 4*CL_MAX

     

    // Declare Ports

    input rst_n;

    input ck;

    input ck_n;

    input cke;

    input cs_n;

    input ras_n;

    input cas_n;

    input we_n;

    126 inout [DM_BITS-1:0] dm_tdqs;

    127 input [bA_BITS-1:0] ba;

    128 input [ADDR_BITS-1:0] addr;

    129 inout [DQ_BITS-1:0] dq;

    inout [DQS_BITS-1:0] dqs;

    inout [DQS_BITS-1:0] dqs_n;

    output [DQS_BITS-1:0] tdqs_n;

    input odt;

    ...... и т.д.

     

    файл ddr3_model_parameters.vh содержит такие строки

     

    parameter DM_BITS = 1; // Set this parameter to control how many Data Mask bits are used

    parameter ADDR_BITS = 14; // MAX Address Bits

    parameter ROW_BITS = 14; // Set this parameter to control how many Address bits are used

    parameter COL_BITS = 11; // Set this parameter to control how many Column bits are used

    parameter DQ_BITS = 4; // Set this parameter to control how many Data bits are used **Same as part bit width**

    parameter DQS_BITS = 1; // Set this parameter to control how many Dqs bits are used

     

     

    при этом моделсим пишет

     

    # ** Error: F:/PROJECTS/MMIG/ipcore_dir/ddr3/example_design/sim/ddr3_model.v(102): Cannot open `include file "ddr3_model_parameters.vh".

    # ** Error: F:/PROJECTS/MMIG/ipcore_dir/ddr3/example_design/sim/ddr3_model.v(126): Undefined variable: DM_BITS.

    # ** Error: F:/PROJECTS/MMIG/ipcore_dir/ddr3/example_design/sim/ddr3_model.v(127): Undefined variable: BA_BITS.

    # ** Error: F:/PROJECTS/MMIG/ipcore_dir/ddr3/example_design/sim/ddr3_model.v(128): Undefined variable: ADDR_BITS.

    # ** Error: F:/PROJECTS/MMIG/ipcore_dir/ddr3/example_design/sim/ddr3_model.v(129): Undefined variable: DQ_BITS.

    # ** Error: F:/PROJECTS/MMIG/ipcore_dir/ddr3/example_design/sim/ddr3_model.v(130): Undefined variable: DQS_BITS.

    # ** Error: F:/PROJECTS/MMIG/ipcore_dir/ddr3/example_design/sim/ddr3_model.v(137): Undefined variable: TDLLK.

    # ** Error: F:/PROJECTS/MMIG/ipcore_dir/ddr3/example_design/sim/ddr3_model.v(166): Undefined variable: BL_BITS.

     

    короче не видит 'include

     

    Кто нибудь знает почему, и как выкрутиться??

    Заранее спасибо

     

  15. MIG, кроме контроллера памяти, создает тестбенч + добавляет в проект модель памяти ( смотри директорию sim).

    Спасибо, сегодня уже это обнаружил... но если я правильно понимаю, то для обмена с памятью достаточно memc_ui_top со всеми его компонентами, а всё остальное нужно лишь для отладки??

    Просто раньше я не работал с динамической памятью, а лишь со статической... Так что пока симулирую...

  16. попробуйте по сайту поискать по словам "память", "модели", чё-нить ещё (можете доп. фильтр по моему нику поставить, хотя не только я об этом писал - естественно, что подобный вашим вопр. задают периодически). если уж не найдёте самостоятельно - так и быть напрягу извилины.

    удачи

    нашёл несколько Ваших постов...

    http://electronix.ru/forum/index.php?showt...%8F%D1%82%D1%8C

    http://electronix.ru/forum/index.php?showt...%E0%EC%FF%F2%FC

    наверное их имели ввиду...

    спасибо, очень поучительно... теперь нужно разобраться с MIG и дожать сгенерённый им контроллер DDR3... а то там тоже неясности всплывают...

  17. Огромное Вам CaPpuCcino спасибо!!! Очень помогли... :biggrin:

    но я облазил почти весь сайт микрона, но нашёл несколько моделей на верилоге, и ни одной на vhdl, кругом только spice и IBIS, если не секрет, где Вы взяли прикрепленный файл??

    и ещё раз спасибо! буду моделировать!

  18. Как кто-то говорил на форуме...

     

    Xilinx делает очень много для продвижения языкового описания аппаратуры. В основном - ужасный редактор схем. В общем, хорошо бы его забросить и переходить на чистый VHDL.

     

     

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

  19. Здравствуйте.

    Имеется следующая задача: написан блок на VHDL для Virtex6 который через ядро контроллера памяти должен общаться с DDR3 SDRAM SODIMM MT4JSF6464H – 512MB(стандартная планка памяти ноутбука). контроллер памяти планируется сгенерировать в coregenerator с помощью MIG. Платы с железом пока нет, но проект нужно отлаживать... Подскажите, каким образом можно просимулировать процесс чтения/записи памяти без железа, в симуляторе Modelsim SE PLUS 6.5??? Я отлично представляю каким образом процесс чтения/записи симулируется с блоковой памятью которая на борту чипа, но вот как симулировать внешнюю память не понятно... может быть есть библиотеки микросхем памяти для modelsim, которые можно откомпилировать в симуляторе и подключив, проводить симуляцию... кто знает как симулировать внешние элементы помогите пожалуйста!!!!

  20. здравствуйте.

    искал,но не нашёл как на vhdlнаписать модуль памяти с разной разрядностью входной и выходной шины данных. не понятно каким образом объявлять сигнал, если писать в него данные одной разрядности(допустим 8), а читать из него данные другой разрядности(допустим 1). знаю что можно сгенерировать такой модуль в coregenerator, но меня это не устраивает. надо на языке написать. зараннее спасибо.

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