Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza Projektowanie układów VLSI-ASIC za pomocą techniki komórek standardowych przy użyciu pakietu Cadence Programowanie, kompilacja i symulacje VHDL i Verilog 1
Narzędzie NC-Launch NC-Launch jest zintegrowanym środowiskiem dla symulacji projektów pisanych w językach VHDL, Verilog HDL i mieszanych. Posiada graficzny interfejs użytkownika, który pozwala na: zarządzanie kilkoma folderami projektowymi zarządzanie plikami źródłowymi kompilowanie, rozwijanie i symulowanie projektów w Verilog, VHDL lub mieszanymi NC-Launch może pracować w dwóch trybach: single step - proste środowisko jedynie dla projektów w Verilogu - kompiluj wszystko i symuluj multistep - bardziej ogólne podejście do projektów w VHDL, Verilog, VHDL&Verilog, bazuje na 3 krokowym podejściu: kompilacja modułów, elaboracja- rozwinięcie (dopracowanie szczegółów) i symulacja projektu Konfiguracja środowiska NC-Launch cds.lib zawiera wyciąg który definiuje biblioteki i łączy nazwy bibliotek logicznych z fizycznymi ścieżkami Nie uruchamiaj NC-Launch w tym samym folderze co inne narzędzia pakietu Cadence!!! Różne narzędzia przechowują INNE dane w plikach konfiguracyjnych, np. CDS.LIB hdl.var definiuje bibliotekę roboczą może zawierać definicje innych zmiennych dla konfiguracji NC-Launch Przebieg projektowania NC-Launch 1. Uruchomienie programu nclaunch skryptem nc_start. 2. Ustawienie bieżącego katalogu projektowego poprzez: - stworzenie i konfigurację nowego katalogu, lub - przełączenie do jednego z wcześniej użytych katalogów 3. Stworzenie/Edycja plików źródłowych. 4. Kompilacja plików źródłowych. 5. Wyszczególnienie modułu nadrzędnego. 6. Uruchomienie symulacji. 2
Uruchamianie NC-Launch Kiedy nclaunch jest uruchamiany po raz pierwszy wyświetlany jest formularz pozwalający użytkownikowi na wybór typu projektu wybierz Multiple Step. NC-Launch tworzenie nowego katalogu projektowego Zgodnie z wcześniejszą wskazówką, przy pierwszym uruchomieniu nclaunch należy utworzyć nowy katalog. Proponowana nazwa to projekt_nc. Użyj File->Create New Directory aby utworzyć nowy katalog projektowy Tu wpisz nazwę nowego katalogu 3
NC-Launch wybór utworzonego wcześniej katalogu projektowego (przy kolejnych uruchomieniach programu dla utworzonego wcześniej projektu) Użyj File->Set Design Directory do wyboru nowego katalogu projektowego. Zostanie wyświetlone okno Set Design Directory Użyj Design Directory do wyboru własnego katalogu projektowego 4
Wybierz wcześniej utworzony przez siebie katalog. NC-Launch konfigurowanie nowego katalogu projektowego (przy tworzeniu nowego projektu) Użyj przycisku Create a cds.lib File do utworzenia pliku cds.lib w zaznaczonym katalogu projektowym Jeżeli używasz VHDL z typem std_logic zaznacz Include default libraries Jeżeli używasz czystego VHDL zaznacz Include IEEE pure libraries Jeżeli używasz jedynie Verilog zaznacz Don t include any libraries 5
NC-Launch wybór istniejącej biblioteki cds.lib (przy kolejnych uruchomieniach programu dla utworzonego wcześniej projektu) Użyj okna Set Design Directory do wyboru katalogu projektowego NC-Launch końcowe ustawienia Jeżeli katalog projektowy jest wybrany i skonfigurowany, naciśnij OK aby rozpocząć pracę z projektem 6
Okno NC-Launch Kompilator VHDL Odświeżanie wyświetlanych plików Kompilator Verilog Elaborator Symulator Analiza kodu HDL Przebiegi logiczne Uruchamianie edytora tekstu Przeglądanie plików File Browser wyświetla foldery i pliki w bieżącym katalogu projektowym Filtr nazw plików Design Area wyświetla bieżącą zawartość pliku cds.lib projektu Console Area pozwala na ręczne wpisywanie komend Opcje NC-Launch Wybierz Edit->Preferences aby wywołać menu umożliwiające modyfikację ustawień (edytor tekstu, itp.) Opcję Editor command ustawić jako: dla UNIX /usr/dt/bin/dtpad dla LINUX jeden z edytorów, np. gedit, nedit, kedit, kwrite 7
NC-Launch tworzenie nowych plików źródłowych Wybierz File->Edit New File aby utworzyć nowy plik. W okienku Edit a New File wpisz nazwę pliku (pamiętaj o rozszerzeniu.v dla Verilog a.vhd lub.vhdl dla VHDL). Naciśnij przycisk Save aby otworzyć edytor tekstu. Można także skopiować gotowe pliki źródłowe do bieżącego katalogu projektowego. 8
Przykładowy kod źródłowy w VHDL Dekoder 1 z 4 Plik 1_of_4_decoder.vhd -- 1 OF 4 DECODER, ACTIVE HIGH OUTPUTS library ieee; use ieee.std_logic_1164.all; ENTITY DECODER IS PORT(EN, SL0, SL1 : IN STD_LOGIC; X0, X1, X2, X3 : OUT STD_LOGIC); END DECODER; architecture COMB of DECODER is begin X0 <= EN AND NOT SL0 AND NOT SL1; X1 <= EN AND SL0 AND NOT SL1; X2 <= EN AND NOT SL0 AND SL1; X3 <= EN AND SL0 AND SL1; end COMB; Plik component_decoder.vhd library ieee; use ieee.std_logic_1164.all; package COMPONENTS is --********************************************************* -- all components used in version with multiplexers --********************************************************* COMPONENT DECODER PORT(EN, SL0, SL1 : IN STD_LOGIC; X0, X1, X2, X3 : OUT STD_LOGIC); END COMPONENT; end COMPONENTS; Plik testbench_decoder.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use WORK.components.all; entity testbenchdecoder is generic(clk_per: time:= 100 ns); end testbenchdecoder; architecture test of testbenchdecoder is signal EN: std_logic; signal SL0: std_logic; signal SL1: std_logic; signal X0: std_logic; signal X1: std_logic; signal X2: std_logic; signal X3: std_logic; signal clk: std_logic; 9
begin under_test: DECODER port map( EN, SL0, SL1, X0,X1,X2,X3); -- input signal generation clk_gen: process begin clk <= '0'; wait for CLK_PER/2; clk <= '1'; wait for CLK_PER/2; end process; EN <= '1', '0' after 42*CLK_PER; SL0 <= '0', '1' after 12*CLK_PER, '0' after 22*CLK_PER, '1' after 32*CLK_PER, '0' after 42*CLK_PER, '1' after 52*CLK_PER, '0' after 62*CLK_PER, '1' after 72*CLK_PER; SL1 <= '0', '1' after 22*CLK_PER, '0' after 42*CLK_PER, '1' after 62*CLK_PER; end test; configuration SIM of testbenchdecoder is for test end for; end SIM; 10
Przykładowy kod źródłowy w Verilog Dekoder 1 z 4 Plik verilog_dec.v //----------------------------------------------------- // Design Name : verilog_decoder_using_case //----------------------------------------------------- module decoder_using_case ( binary_in, // 2 bit binary input decoder_out, // 4-bit out enable // Enable for the decoder ); input [1:0] binary_in ; input enable ; output [3:0] decoder_out ; reg [3:0] decoder_out ; always @ (enable or binary_in) begin decoder_out = 0; if (enable) begin case (binary_in) 2'h0 : decoder_out = 4'h1; 2'h1 : decoder_out = 4'h2; 2'h2 : decoder_out = 4'h4; 2'h3 : decoder_out = 4'h8; endcase end end endmodule //////////////////////////////////////////////////////////////////// module decoder_verilog_tb; reg enable; reg [1:0] binary_in; wire [3:0] decoder_out; decoder_using_case dec_one (.enable (enable),.binary_in (binary_in),.decoder_out (decoder_out) ); initial begin enable = 1; binary_in=0; #1 binary_in=1; #1 binary_in=2; #1 binary_in=3; #1 enable =0; binary_in=0; #1 binary_in=1; #1 binary_in=2; #1 binary_in=3; end 11
initial #10 $finish; //Rest of testbench code after this line endmodule Schemat ideowy - Dekoder 1 z 4 12
NC-Launch kompilowanie plików źródłowych 1. Wybierz plik(i) do kompilacji w File Browser 2. Jeden z przycisków kompilacji VHDL/Verilog będzie aktywny zależnie od typu języka pliku źródłowego. 13
NC-Launch opcje kompilatora VHDL (Menu tools -> VHDL Compiler) Zaznacz opcję Update if needed do automatycznej rekompilacji i reelaboracji pliku źródłowego po wprowadzeniu do niego zmian Zaznacz opcję Enable line debugging aby dodać wsparcie dla korzystania z breakpointów i dla krokowania kodu NC-Launch zaawansowane opcje kompilatora VHDL Zaznacz opcję Print informative messages aby informacje generowane przez kompilator były bardziej szczegółowe 14
NC-Launch opcje kompilatora Verilog (Menu tools -> Verilog Compiler) Zaznacz opcję Update if needed do automatycznej rekompilacji i reelaboracji pliku źródłowego po wprowadzeniu do niego zmian Zaznacz opcję Enable line debugging aby dodać wsparcie dla korzystania z breakpointów i dla krokowania kodu Opcja Define Macro do definiowania makra Verilog Opcja Include Directories dla określenia katalogu dla dyrektywy include NC-Launch zaawansowane opcje kompilatora Verilog Zaznacz opcję Print informative messages aby informacje generowane przez kompilator były bardziej szczegółowe 15
NC-Launch - elaboracja w języku VHDL 1. Po skompilowaniu wszystkich modułów zaznacz architekturę modułu nadrzędnego 2. Przycisk Launch Elaborate stanie się aktywny. Naciśnij go aby dokonać eleaboracji modułu nadrzędnego 3. Po elaboracji powstaje nowy plik snapshot 16
NC-Launch - elaboracja w języku Verilog 1. Po skompilowaniu wszystkich modułów zaznacz architekturę modułu nadrzędnego 2. Przycisk Launch Elaborate stanie się aktywny. Naciśnij go aby dokonać eleaboracji modułu nadrzędnego 3. Po elaboracji powstaje nowy plik snapshot 17
NC-Launch - uruchomienie symulacji 1. Kiedy moduł nadrzędny jest po elaboracji, zaznacz jego plik snapshot 2. Przycisk Launch Simulator stanie się aktywny. Naciśnij go aby uruchomić symulację 18
Sygnały na bieżącym poziomie hierarchii NC-Launch - Nawigator sygnałów Przeglądarka modułów projektowych 19
NC-Launch - wybór obserwowanych sygnałów 1. Wybierz jednostkę projektową 2. Wybierz sygnały do obserwacji 3. Otwórz okno przebiegów i prześlij do niego zaznaczone sygnały 20
NC-Launch - przebiegi sygnałów dla czasu t=0 NC-Launch - rozpoczęcie symulacji Wybierz Simulation->Run lub użyj przycisku na panelu 21
NC-Launch - ustawienia symulacji W celu wyznaczenia granicznego czasu symulacji wybierz: Simulation->Set Breakpoint-> Time Optymalnie jest gdy ustawimy interwał symulacji na 10 s. 22
Wybór jednostki czasu w symulacji, ustawiamy s. Ustawienie granic symulacji. 23
Wybór początkowego i końcowego punktu czasu symulacji. Tworzenie nowych granic symulacji. Wybór wcześniej obranych granic symulacji. 24
NC-Launch - przykładowe przebiegi po symulacji Przebiegi wybranych sygnałów po symulacji w określonych wcześniej granicach czasu. 25
Opracowanie: mgr inż. Adam Gołda oraz: Łukasz Kuchno, Stanisław Czechowski (2007), Marcin Dec (2006) 26