Про Modelsim, советы и рекомендации.

 

 

    В данной статье будут публиковаться рекомендации по работе, советы, подсказки.

 

Оглавление.

  1. Создание и моделирование проекта на verilog.
  2. XILINX ISE запуск симуляции ModemSim(QuestaSim) Error: can't read "env(XILINX)": no such variable.
  3. Компиляция библиотек Xilinx(ISE 14.7) для ModemSim (QuestaSim).
  4. Компиляция библиотек Lattice для ModelSim.
  5. Компиляция библиотек Altera/Intel.

 

 

 


Создание и моделирование проекта на verilog.

 

    Рассмотрим как промоделировать проект на основе исходных файлов verilog в среде Modelsim.

Запуск моделирования будет осуществляться при помощи скрипта, DO файла.

 

Для моделирования необходимо создать следующие файлы:

1. Исходный файл(ы) проекта на языке verilog.

2. Исходный файл test-bench - тестовых воздействий на языке verilog.

3. Файл скрипта, DO - файл, с командами для запуска моделирования в Modelsim.

 

Тестовый проект с примерами файлов находится здесь, zip архив.

 

Пример файла скрипта, DO - файл (из архива).

# Печать в консоль запускаемых команд.
transcript on

# Удаление директории и библиотеки, если существует.
if {[file exists rtl_work]} { 
	vdel -lib rtl_work -all
}

# Создание библиотеки
vlib rtl_work

# Привязка библиотеки к work.
vmap work rtl_work

# Компиляция исходника счетчика.
vlog -vlog01compat -work work +incdir+C:/test_counter {C:/test_counter/counter.v}

# Компиляция тестового файла.
vlog -vlog01compat -work work +incdir+C:/test_counter {C:/test_counter/tb.vt}

# Запуск симуляции с аппаратно зависимыми компонентами семейства (для примера).
#vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L cycloneii_ver -L rtl_work -L work -voptargs="+acc"  tb

# Запуск симуляции, tb - имя модкля теста.
vsim -t 1ps -L rtl_work -L work -voptargs="+acc"  tb

# Добавить временную диаграму для входного сигнала i_clk.
add wave /tb/i_clk

# Добавить временную диаграму для выходного сигнала o_count, при этом сигнал отображается в формате UNSIGNED !
add wave -radix UNSIGNED /tb/o_count

# Шкала времени в ns.
configure wave -timelineunits ns

# Добавить все сигналы тестбенсча в окно временных диаграм (здесь не используется, оставлено для примера).
#add wave *

# Просмотр структуры проекта
view structure

# Просмотр сигналов проекта
view signals

# Запуск 
run -all

# Показать временные диаграмы по всей длинне окна. 
# wave zoom full

 

Запуск моделирования.

 

1. Необходимо запустить modelsim.

 

2. Затем в командной строке (modelsim-a) перейти в директорию проекта.

Пример: проект находится в директории C:\test_counter

cd /

cd test_counter 

 

3. Запустить скрипт на выполнение.

do run_test.do


 

XILINX ISE запуск симуляции ModemSim(QuestaSim) Error: can't read "env(XILINX)": no such variable.

 

При запуске симуляции ModelSim(QuestSim) выдает ошибку:

# ** Error: can't read "env(XILINX)": no such variable

 

Решение 1.

 

Запустить ModelSim из Xilinx консоли.

Запуск консоли (в Windows7):

Меню ПУСК -

- Все программы

- Xilinx Design Tools

- ISE Design Suite 14.7

- Accessories

- ISE Design Suite 32 Bit Command Prompt

 

Затем в окне консоли набрать:

C:\questasim64_10.4\win64\vsim.exe -do sim.do 

где:

-do sim.do       - команда ModelSim загрузить и запустить DO скрипт, симуляции проекта.

 

 

Решение 2.

 

Прописать значение переменной XILINX=C:\Xilinx\14.7\ISE_DS\ISE в файле cmd(bat) перед запуском ModelSim.

Пример:

set XILINX=C:\Xilinx\14.7\ISE_DS\ISE
C:\questasim64_10.4\win64\vsim.exe -do sim.do

 

 


Компиляция библиотек Xilinx(ISE) для ModemSim(QuestaSim).

 

 

Все действия производятся в Xilinx ISE 14.7 под Windows(7).

Среда моделирования QuestaSim(ModelSim), устанавливается отдельно.

 

Для того чтобы QuestaSim(ModelSim) могла моделировать FPGA от Xilinx необходимо произвести два действия:

1. Произвести компиляцию библиотек.

2. Подключить библиотеки к QuestaSim(ModelSim).

 

 

 

1. Произвести компиляцию библиотек. 

 

Запустить компилятор библиотек (ISE 14.7): C:\Xilinx\14.7\ISE_DS\ISE\bin\nt64\compxlib.exe

 

Затем по шагам как на картинках:

 

 

 

 

 

 

 

 

2. Подключить библиотеки к QuestaSim(ModelSim).

 

Готовые библиотеки будут находится (C:\Xilinx\14.7\ISE_DS\ISE\<language>\<simulator>\<version>\<platform>)  тут:

C:\Xilinx\14.7\ISE_DS\ISE\verilog\questasim\10.4\nt64\

Там же находится файл modelsim.ini, в секции [Library] находятся пути к только что созданным библиотекам:

 

secureip = C:\Xilinx\14.7\ISE_DS\ISE\verilog\questasim\10.4\nt64/secureip

unisims_ver = C:\Xilinx\14.7\ISE_DS\ISE\verilog\questasim\10.4\nt64/unisims_ver

unimacro_ver = C:\Xilinx\14.7\ISE_DS\ISE\verilog\questasim\10.4\nt64/unimacro_ver

simprims_ver = C:\Xilinx\14.7\ISE_DS\ISE\verilog\questasim\10.4\nt64/simprims_ver

xilinxcorelib_ver = C:\Xilinx\14.7\ISE_DS\ISE\verilog\questasim\10.4\nt64/xilinxcorelib_ver

uni9000_ver = C:\Xilinx\14.7\ISE_DS\ISE\verilog\questasim\10.4\nt64/uni9000_ver

cpld_ver = C:\Xilinx\14.7\ISE_DS\ISE\verilog\questasim\10.4\nt64/cpld_ver

 

Прописываем данные пути в QuestaSim в файл C:\questasim64_10.4\modelsim.ini

 

Запускаем QuestaSim и наблюдаем подключенные библиотеки в окне Library.

 

 

Готово !


 Компиляция библиотек Lattice.

 

Запускаем ModelSim.

Создаем библиотеку.

В меню File -> New -> Library.

 и вводим имя библиотеки (например по названию семейства lattice):

 

Производим компиляцию исходников.

В меню Compile -> Compile...

 

В выпадающем меню (с верху) Library выбираем созданную нами библиотеку:





Выбираем файлы исходников для компиляции, для этого переходим в папку: 

C:\lscc\diamond\3.5_x64\cae_library\simulation\verilog\

и затем заходим в папку с нужным семейством.

Выделяем все файлы в папке и нажимает кнопку Compile.


Ждем окончания компиляции и затем нажимаем на кнопку Done.

Готово ! Библиотеки откомпилированы.

 

Прописываем библиотеки в ModelSim:

Открываем файл в корневой директории ModelSim: modelsim.ini в текстовом редакторе.

и добавляем строку:

xp2 = C:/questasim64_10.4/examples/xp

 

Внимание: 

Необходимо добавить в TestBench следующие строки:

GSR GSR_INST(.GSR(1'b1));
PUR PUR_INST(.PUR(1'b1));

Это нужно для некоторых IP блоков (FIFO, и других...) иначе ModelSim будет ругаться что IP блоки не находят глобальные сигналы.