vkorehovisback (vkorehovisback) wrote in engineering_ru,
vkorehovisback
vkorehovisback
engineering_ru

Как сделать PCI карту своими руками, Часть 4 (Настройка проекта)

Оригинал взят у vkorehovisback в Как сделать PCI карту своими руками, Часть 4 (Настройка проекта)
Уже настроенный проект можно найти тут:
https://github.com/vkorehov/cncfpga
Modelsim 10.2c 64 бит
ISE 10.1.3 32бит
ISE 10.1.3 64бит (только IMPACT)
ChipScope 10.1.3 64 бит

Как оказалось с IP Core все не так радужно, имплементация закрытая, исходники есть только на тестбенч (Верилог), что в принципе уже хорошо, потому как со временем закрытую кору можно будет заменить на чистейший верилог, написанный самостоятельно.

Из-за того что кора закрытая, в документации к коре, была особая инструкция как компилировать.
Во первых нужно установить эти переменные окружения(в CP Environment Variables, потому как в ISE это сделать нельзя!)
XIL_GUIDE_CONNECTRPT=1
XIL_MAP_OLD_SAVE=1
XIL_PAR_MAX_PLOAD=100
XVKMA_CORE_LUT_PACK=TRUE
их знамения нигде не объясняются.

Далее, используются нестандартные опции команд синтеза, которые отключают некоторые оптимизации.
GUI проекта в коре не было, все эти опции пришлось искать самостоятельно.
settings 1
settings 2
Кроме того, включена конвертация листинга в Uppercase.

Далее, несколько важных опций маппинга, и плейсроутинга, безотносительно коры, они позволяют добиться меньших задержек!:
settings 3
settings 4

Для компиляции проекта нужно выбрать модуль верхнего уровня (cnc_top)
тогда в левом нижнем углу появится Workflow.
Нужно кликнуть на Synthesize => Run, потом на Implement => Run
все должно компилироваться без ошибок, но с предупреждениями, это нормально.

Далее шаг создания файла битстрима для загрузки через Xilinx USB Cable
Важная опция, по умолчанию не выбрана:
оставить выводы в высокоимпендансном состоянии! не подключать к земле! (пока вы отлаживаете и можете сделать ошибку!)
settings 5

Далее, не выбирайте Program Device в ISE если у вас 64 битный виндовс.
запустите IMPACT 64 битный, %XILINX%\bin\nt64\IMPACT.exe

Импакт довольно простая программа,
она должна сразу определить ваш Jtag chain.
далее на каждом чипе можно кликнуть и выбрать Assign File, а потом program.
но тут есть особенность. для вашего PROM девайса выбрать .bit файл нельзя!
нужно создать MCS файл при помощи PROM File Formatter:
prom1
prom2
prom3
prom4
Далее нажать Generate file, и сгенерированный файл можно назначить будет PROM устройству (справа)
Сохраните импакт проект, тогда не нужно будет вводить все это каждый раз и мцс файл можно будет пере генерировать одним щелчком.

Симуляция проекта.
Переключитесь в Behavioral Simulation,
как модуль верхнего уровня появится cnc_tb.v (_tb.v это конвенция!) который является тестбенчем.
simulation
Вот там выглядят настройки.
modelsim

Возможно вам понадобиться еще и указать путь для Modelsim в Preferences самого ISE.
modelsim.do это TCL файл со следующими командами modelsim.
vlib work
vlog -f cnc_tb.f
# modul vernego urovnja, i biblioteka glbl
vsim -novopt cnc_tb glbl
#tut okna:
view signals structure wave

# tut grafiki signalow:
add wave -logic /CLK
add wave -logic /RST_N
add wave -literal -hex /AD
add wave -literal -hex /CBE
add wave -logic /PAR
add wave -logic /FRAME_N
add wave -logic /IRDY_N
add wave -logic /TRDY_N
add wave -logic /STOP_N
add wave -logic /DEVSEL_N
add wave -logic /REQ_N
add wave -logic /GNT_N
add wave -logic /SERR_N
add wave -logic /PERR_N
add wave -logic /IDSEL
add wave -logic /INTR_A
add wave -label "OPERATION" -radix ascii /cnc_tb/STM/operation

run -all

Как видно он использует входной файл cnc_tb.f
который содержит:
+licq_all+
+access+r
./pci_lc_i.v
./pcim_lc_33_5_s.v
./cfg_cnc.v
./cnc.v
./cnc_top.v
./busrecord.v
./dumb_arbiter.v
./dumb_targ32.v
./stimulus.v
./cnc_tb.v
$XILINX/verilog/src/glbl.v
+libext+.vmd+.v
-y $XILINX/verilog/src/unisims
-y $XILINX/verilog/src/simprims


Запускаем симулятор.
должны увидеть результат симуляции (wave) можно увеличивать масштаб кнопкой "О"
modelsim run
Тут основной файл stimulus.v
можно поиграться с брейкпоинтами, переменными и посмотреть как будет вести себя кора и т.д.
...
    // read device and vendor id
    READ_CONFIG(32'h00000000);

    // write latency timer
    WRITE_CONFIG(32'h0000000c, 32'h0000ff00);
    READ_CONFIG(32'h0000000c);


    // setup io base address register
    WRITE_CONFIG(32'h00000010, 32'h10000000);
    READ_CONFIG(32'h00000010);

    // setup mem32 base address register
    WRITE_CONFIG(32'h00000014, 32'h20000000);
    READ_CONFIG(32'h00000014);

    // setup command register to enable mastering
    WRITE_CONFIG(32'h00000004, 32'hff000147);
    READ_CONFIG(32'h00000004);


    // read io space
    READ32(4'b0010, 32'h10000000);

    // write io space
    WRITE32(4'b0011, 32'h10000000, 32'h20202020);
    READ32(4'b0010, 32'h10000000);
...

наверное хватит на один раз...
В Следующий раз расскажу об Отладке/Телеметрии физической карты с использованием ChipScope Pro

Tags: проектирование & проекты, своими руками, электроника
Subscribe
promo engineering_ru april 14, 2014 13:47 105
Buy for 200 tokens
В 50-х годах Советский Союз вел грандиозные стройки, одной из которых был невиданный по тем временам проект — подземный тоннель на остров Сахалин, получивший рабочее название «Строительство № 506″. В конце 40-х, начале 50-х годов XX века остров Сахалин переживал бурный…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 1 comment