Уже настроенный проект можно найти тут:
https://github.com/vkorehov/cncfpgaModelsim 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