Синтез Xilinx FPGA в пакетном режиме

Разработчики FPGA обычно пользуются графическими оболочками типа Xilinx ISE или Aldec Active-HDL. Но существует также возможность запуска транслятора в пакетном режиме, что имеет определённые преимущества. Например, при длительном сопровождении проекта возникает необходимость пересборки системы из исходных текстов на другом компьютере или на другой версии синтезатора. При диалоговом режиме возникают проблемы с восстановлением нужных режимов синтезатора (а их сотни).

Второе преимущество - возможность отслеживания изменений в конфигурации синтезатора. При пакетном запуске все настройки режимов синтезатора хранятся в текстовом виде, что даёт возможность сравнения версий в SVN. Диалоговые оболочки обычно хранят настройки в бинарном виде, и сравнение версий не работает.

Синтез для Xilinx

Подробно процесс синтеза описан в статье Валерия Зотова.

xst

Синтезатор XST (расшифровывается как Xilinx Synthesis Technology) преоразует исходное описание на языке высокого уровня в список логических цепей (netlist). Документация на сайте Xilinx.

На входе нужно создать файл параметров синтеза и файл-список модулей на языке Verilog.

Файл параметров синтеза “project.xst”:

run
-top		regfile
-p		xc3s500e-fg320-5
-opt_mode	Speed
-opt_level	1
-ifn		project.src
-ifmt		mixed
-ofn		project.ngc
-ofmt		NGC

Файл со списком модулей исходного Verilog-кода “project.src”:

verilog work regs.v
verilog work alu.v
verilog work bus.v
verilog work uart.v

Запуск синтезатора:

xst -ifn project.xst -ofn project.log -intstyle silent

В результате порождаются следующие файлы:

  • project.ngc — список логических цепей проекта
  • project.log — отчет о результатах процесса синтеза

ngdbuild

Утилита NGDBuild преобразует файл NGC в файл формата NGD, описывающий схему в виде элементарных логических элементов (И, ИЛИ, декодеры, триггеры и память). Документация на сайте Xilinx.

Кроме файла NGC, требуется также файл топологических ограничений UCF. В частности, в нем задается привязка сигналов к ножкам микросхемы, например файл “pins.ucf”:

NET "clk"       LOC = "A10";
NET "reg_wr"    LOC = "A3";
NET "reg_a[0]"  LOC = "A4";
NET "reg_a[1]"  LOC = "A5";
NET "reg_a[2]"  LOC = "A6";
(и т. д.)

При запуске необходимо указать также тип микросхемы:

ngdbuild -p xc3s500e-fg320-5 project.ngc -uc pins.ucf

В результате порождаются следующие файлы:

  • project.ngd — описание проекта на низком логическом уровне
  • project.bld — отчет о результатах процесса

map

Утилита MAP отображает схему из файла NGD, представленную в виде элементарных логических элементов, на компоненты заданной конкретной микросхемы программируемой логики. Результат записывается в файл NCD (Native Circuit Description) — физическое представление проекта в компонентах данного чипа Xilinx FPGA. Документация на сайте Xilinx.

При запуске необходимо указать тип микросхемы. Флаг “-pr b” разрешает размещать триггеры как в i-, так и в o-регистрах:

map -pr b -p xc3s500e-fg320-5 project

В результате порождаются следующие файлы:

  • project.nсd — физическое представление схемы в компонентах конкретного чипа
  • project.mrp — отчет о результатах процесса
  • project.pcf — ограничения схемы для трассировщика PAR
  • project.ngm
  • project_usage.xml

par

Трассировщик PAR читает файл NСD, производит размещение компонентов и трассировку соединений. Также используется файл ограничений PCF, порожденный утилитой MAP. Результат записывается в другой файл в вормате NCD (Native Circuit Description). Документация на сайте Xilinx.

При запуске флаг “-w” разрешает перезаписывать существующие файлы:

par -w project project_r.ncd

В результате порождаются следующие файлы:

  • project_r.ncd — схема с размещением и трассировкой
  • project_r.par — отчет о результатах процесса
  • project_r.unroutes — список неоттрассированных путей
  • project_r.pad — информация о ножках ввода-вывода
  • project_r_pad.csv — то же в формате CVS
  • project_r_pad.txt — то же в текстовом формате

trce

Утилита TRCE (Timing Reporter and Circuit Evaluator) производит временной анализ синтезированной схемы. Документация на сайте Xilinx.

Вызов:

trce -v 25 project_r.ncd project.pcf

Порождается файл:

  • project_r.twr — отчет анализа временных ограничений

bitgen

Утилита BITGEN читает файл NCD и выдает файл прошивки для загрузки в чип FPGA. Документация на сайте Xilinx.

При запуске флаг “-w” разрешает перезаписывать существующие файлы, флаг “-l” включает создание файла “project_r.ll”:

bitgen project_r.ncd -l -w ФЛАГИ

Флаги задают конфигурацию микросхемы, например:

-g TdoPin:PULLNONE \
-g DonePin:PULLUP \
-g CRC:enable \
-g StartUpClk:CCLK

Порождается файл:

  • project_r.bit — прошивка в бинарном виде
  • project_r.bgn — отчет о результатах процесса
  • project_r.ll — описание размещения отдельных логических элементов в битовом потоке прошивки

Обобщающий Makefile

Все эти этапы синтеза можно объединить в одном файле Makefile.

DESIGN		= regfile
SRC		= regfile.v
DEVICE		= xc3s500e-fg320-5
BGFLAGS		= -g TdoPin:PULLNONE -g DonePin:PULLUP \
		  -g CRC:enable -g StartUpClk:CCLK

all:		$(DESIGN).bit

clean:
		rm -f *~

cleanall:	clean
		rm -rf build $(DESIGN).bit

build/project.src:
		@[ -d build ] || mkdir build
		@rm -f $@
		for i in $(SRC); do echo verilog work ../$$i >> $@; done

build/project.xst: build/project.src
		echo "run" > $@
		echo "-top $(DESIGN)" >> $@
		echo "-p $(DEVICE)" >> $@
		echo "-opt_mode Speed" >> $@
		echo "-opt_level 1" >> $@
		echo "-ifn project.src" >> $@
		echo "-ifmt mixed" >> $@
		echo "-ofn project.ngc" >> $@
		echo "-ofmt NGC" >> $@

build/project.ngc: build/project.xst $(SRC)
		cd build && xst -ifn project.xst -ofn project.log -intstyle silent

build/project.ngd: build/project.ngc pins.ucf
		cd build && ngdbuild -p $(DEVICE) project.ngc -uc ../pins.ucf

build/project.ncd: build/project.ngd
		cd build && map -pr b -p $(DEVICE) project

build/project_r.ncd: build/project.ncd
		cd build && par -w project project_r.ncd

build/project_r.twr: build/project_r.ncd
		cd build && trce -v 25 project_r.ncd project.pcf

$(DESIGN).bit:	build/project_r.ncd build/project_r.twr
		cd build && bitgen project_r.ncd -l -w $(BGFLAGS)
		@mv -f build/project_r.bit $@
 
proj/verilog/linux.txt · Последние изменения: 2008/11/10 05:35 vak
 
Copyright (C) 1996-2013 Serge Vakulenko
serge@vak.ru