Спец курс (Избранные главы 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.















