http://vkorehovisback.livejournal.com/ (
vkorehovisback.livejournal.com) wrote in
engineering_ru2014-05-17 02:23 am
Entry tags:
Как сделать 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 проекта в коре не было, все эти опции пришлось искать самостоятельно.


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


Для компиляции проекта нужно выбрать модуль верхнего уровня (cnc_top)
тогда в левом нижнем углу появится Workflow.
Нужно кликнуть на Synthesize => Run, потом на Implement => Run
все должно компилироваться без ошибок, но с предупреждениями, это нормально.
Далее шаг создания файла битстрима для загрузки через Xilinx USB Cable
Важная опция, по умолчанию не выбрана:
оставить выводы в высокоимпендансном состоянии! не подключать к земле! (пока вы отлаживаете и можете сделать ошибку!)

Далее, не выбирайте Program Device в ISE если у вас 64 битный виндовс.
запустите IMPACT 64 битный, %XILINX%\bin\nt64\IMPACT.exe
Импакт довольно простая программа,
она должна сразу определить ваш Jtag chain.
далее на каждом чипе можно кликнуть и выбрать Assign File, а потом program.
но тут есть особенность. для вашего PROM девайса выбрать .bit файл нельзя!
нужно создать MCS файл при помощи PROM File Formatter:




Далее нажать Generate file, и сгенерированный файл можно назначить будет PROM устройству (справа)
Сохраните импакт проект, тогда не нужно будет вводить все это каждый раз и мцс файл можно будет пере генерировать одним щелчком.
Симуляция проекта.
Переключитесь в Behavioral Simulation,
как модуль верхнего уровня появится cnc_tb.v (_tb.v это конвенция!) который является тестбенчем.

Вот там выглядят настройки.

Возможно вам понадобиться еще и указать путь для Modelsim в Preferences самого ISE.
modelsim.do это TCL файл со следующими командами modelsim.
Как видно он использует входной файл cnc_tb.f
который содержит:
Запускаем симулятор.
должны увидеть результат симуляции (wave) можно увеличивать масштаб кнопкой "О"

Тут основной файл stimulus.v
можно поиграться с брейкпоинтами, переменными и посмотреть как будет вести себя кора и т.д.
наверное хватит на один раз...
В Следующий раз расскажу об Отладке/Телеметрии физической карты с использованием ChipScope Pro
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 проекта в коре не было, все эти опции пришлось искать самостоятельно.


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


Для компиляции проекта нужно выбрать модуль верхнего уровня (cnc_top)
тогда в левом нижнем углу появится Workflow.
Нужно кликнуть на Synthesize => Run, потом на Implement => Run
все должно компилироваться без ошибок, но с предупреждениями, это нормально.
Далее шаг создания файла битстрима для загрузки через Xilinx USB Cable
Важная опция, по умолчанию не выбрана:
оставить выводы в высокоимпендансном состоянии! не подключать к земле! (пока вы отлаживаете и можете сделать ошибку!)

Далее, не выбирайте Program Device в ISE если у вас 64 битный виндовс.
запустите IMPACT 64 битный, %XILINX%\bin\nt64\IMPACT.exe
Импакт довольно простая программа,
она должна сразу определить ваш Jtag chain.
далее на каждом чипе можно кликнуть и выбрать Assign File, а потом program.
но тут есть особенность. для вашего PROM девайса выбрать .bit файл нельзя!
нужно создать MCS файл при помощи PROM File Formatter:




Далее нажать Generate file, и сгенерированный файл можно назначить будет PROM устройству (справа)
Сохраните импакт проект, тогда не нужно будет вводить все это каждый раз и мцс файл можно будет пере генерировать одним щелчком.
Симуляция проекта.
Переключитесь в Behavioral Simulation,
как модуль верхнего уровня появится cnc_tb.v (_tb.v это конвенция!) который является тестбенчем.

Вот там выглядят настройки.

Возможно вам понадобиться еще и указать путь для 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) можно увеличивать масштаб кнопкой "О"

Тут основной файл 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
no subject