Спец курс (Избранные главы VHDL)/Среда синтеза Leonardo Spectrum
Содержание |
Запуск Программы GUI LS
В линуксе данная программа запускается под эмулятором wine. Поэтому для удобства создаём в файле .bshrc необходимый alias:
alias leonardo="wine /product_2008/mentor/win_xp/leonardo/bin/win32/leonardo.exe"
Теперь можно запускать с консоли используя команду leonardo.
Подключение библиотеки для синтеза
Для синтеза должна быть создана специальная библиотека, как описано в Описание_библиотеки_синтеза_в_LeonardoSpectrum. Библиотека будет состоять из 2х файлов например:
devices.ini dr_lib.syn
Выбираем вкладку Technology:
В окошке выбираем загруженную библиотеку dr_lib и нажимаем Load Library :
В транскрипте будет выведена следующая информация:
Reading library file Z\home\DEN\opt\Exemplar\\lib\dr_lib.syn... Library version = 2.0.1 Info: setting encoding to autoInfo, Command load_library finished successfully
Последовательность действий при синтезе в GUI
Имеется отмоделированное vhdl-описание: counter.vhd. Из него необходимо получить синтезированный файл:
- Нажимаем вкладку Input
- устанавливаем рабочую дерикторию Working Directory:[...\<путь к дерриктории>]
- загружаем файл для синтеза ( counter.vhd)
- устанавливаем тип кодирования автомата (state-machine)
- устанавливаем путь к файлу (counter.vhd)
Файл для синтеза имеет следующий вид:
| Файл: Имя файла |
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity counter is port ( clk1 : in std_logic; rst1 : in std_logic; dd_out : out std_logic_vector(7 downto 0); din_in : in std_logic_vector(7 downto 0); set1 : in std_logic); end counter; architecture beh of counter is signal dd : unsigned(7 downto 0); signal din : unsigned(7 downto 0); begin dd <= (others => '0') when rst1 = '1' else din when rst1 /= '1' and set1 = '1' else dd + 1 when clk1'event and clk1 = '1' else dd; dd_out <= std_logic_vector(dd); din <= unsigned(din_in); end beh; |
После этого нажимаем Read и смотрим транскрипт.
После этого нажимаем нижнюю вкладку Elaborate нажимаем Elaborate и смотрим транскрипт.
Нажимаем верхнюю вкладку Constraints, устанавливаем рабочие частоты и времянки, нажимаем Apply и смотрим транскрипт.
Нажимаем верхнюю вкладку Optimize, устанавливаем необходимые виды оптимизации: по площади или по задержкам, устанавливаем иерархию. нажимаем Optimize и смотрим транскрипт.
Примечаниe Нажимаем верхнюю вкладку Report, указываем путь к файлу *.txt. Нажимаем Report Area и читаем наш созданный файл. Аналогично получаем Report Delay переключив нижнюю вкладку с Report Area на Report Delay.
Файл Report'а имеет следующий вид:
*******************************************************
Cell: counter View: beh Library: work
*******************************************************
Cell Library References Total Area
A2 dr_lib 1 x 440 440 um_2
DFFRS dr_lib 8 x 2696 21568 um_2
IX4 dr_lib 1 x 660 660 um_2
N dr_lib 19 x 220 4183 um_2
NA2 dr_lib 4 x 330 1321 um_2
NA3 dr_lib 2 x 440 881 um_2
NA4 dr_lib 2 x 550 1101 um_2
NAO2 dr_lib 8 x 440 3523 um_2
NO2 dr_lib 8 x 330 2642 um_2
NO3 dr_lib 5 x 440 2202 um_2
NO4 dr_lib 1 x 539 539 um_2
NOA2 dr_lib 4 x 440 1761 um_2
NOA2A2 dr_lib 2 x 550 1101 um_2
XNOR2 dr_lib 1 x 771 771 um_2
XOR2 dr_lib 1 x 771 771 um_2
Number of ports : 19
Number of nets : 78
Number of instances : 67
Number of references to this view : 0
Total accumulated area :
Number of um_2 : 43463
Number of accumulated instances : 67
Затем нажимаем верхнюю вкладку Output. В поле уже набрано имя выходного файла. Выбираем формат файла ( я выбрал *.v (Verilog) поскольку его легко преобразовать в схему в DA_IC). Нажимаем Write.
Фрагмент полученого файла в Формате Verilog имеет следующий вид:
// Verilog description for cell counter, ^M // Fri 24 Aug 2012 02:05:57 PM EEST^M //^M // LeonardoSpectrum Level 3, 2003b.35 ^M //^M ^M ^M module counter ( clk1, rst1, dd_out, din_in, set1 ) ;^M ^M input clk1 ;^M input rst1 ;^M output [7:0]dd_out ;^M input [7:0]din_in ;^M input set1 ;^M ^M wire NOT__178_, nx10, nx14, nx18, nx24, nx34, nx38, nx44, nx50, nx54, nx64, ^M nx124, nx130, nx134, nx138, nx144, nx148, nx184, nx191, nx193, nx249, ^M nx250, nx30, nx251, nx231, nx200, nx252, nx253, nx94, nx176, nx90, ^M nx254, nx255, nx256, nx202, nx257, nx258, nx84, nx58, nx259, nx74, nx70, ^M nx260, nx261, nx262, nx263, nx264, nx265, nx266, nx104, nx267, nx98, ^M nx268, nx269, nx270, nx114, nx178, nx110, nx271;^M ^M ^M ^M DFFRS reg_dd_0_ (.q (dd_out[0]), .c (clk1), .d (NOT__178_), .r (nx10), .s (^M nx14)) ;^M N ix174 (.y (NOT__178_), .d (dd_out[0])) ;^M NAO2 ix11 (.y (nx10), .d0 (din_in[0]), .d1 (nx271), .d2 (nx178)) ;^M NO2 ix15 (.y (nx14), .d0 (nx271), .d1 (nx10)) ;^M DFFRS reg_dd_1_ (.q (dd_out[1]), .c (clk1), .d (nx24), .r (nx30), .s (nx34)^M ) ;^M NOA2 ix25 (.y (nx24), .d0 (NOT__178_), .d1 (nx184), .d2 (nx18)) ;^M N ix185 (.y (nx184), .d (dd_out[1])) ;^M NO2 ix35 (.y (nx34), .d0 (nx271), .d1 (nx251)) ;^M DFFRS reg_dd_2_ (.q (dd_out[2]), .c (clk1), .d (nx44), .r (nx50), .s (nx54)^M ) ;^M NOA2 ix45 (.y (nx44), .d0 (nx191), .d1 (nx193), .d2 (nx38)) ;^M NA2 ix192 (.y (nx191), .d0 (dd_out[1]), .d1 (dd_out[0])) ;^M
Также в LS можно посмотреть как будет выглядеть схема синтезированного блока. Для этого можно нажать на иконки View RTL Schematic и будет выведена схема электрическая.
Синтез с помощью TCL-скрипта
После всей проделанной работы можно сохранить все действия. Для этого нажимаем в меню File->Save Command File и записываем имя tcl- скрипта и нажимаем Save.
Полученный Файл имеет следующий вид:
load_library dr_lib set hdl_input_location Z:/home/DEN/EEPROM/druidpzp/syn/20120824 read -technology "dr_lib" { Z:/home/DEN/EEPROM/druidpzp/syn/20120824/counter.vhd } pre_optimize -common_logic -unused_logic -boundary -xor_comparator_optimize pre_optimize -extract elaborate counter -architecture beh set register2register 1000 set input2register 1000 set register2output 1000 set input2output 2 optimize .work.counter.beh -target dr_lib -macro -area -effort quick -hierarchy auto optimize_timing .work.counter.beh report_area Z:/home/DEN/EEPROM/druidpzp/syn/20120824/report.txt -cell_usage -all_leafs auto_write -format Verilog Z:/home/DEN/EEPROM/druidpzp/syn/20120824/counter.v view_schematic -view view_schematic -rtl -view
Теперь в меню File->Run Script можно запустить данный скрипт и он сделает всё то, что было до этого настроено в GUI.










