Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Koncepcja refaktoryzacji kodu w języku VHDL
VIII Krajowa Konferencja Naukowa RUC'2005 REPROGRAMOWALNE UKŁADY CYFROWE Koncepcja refaktoryzacji kodu w języku VHDL Przemysław Sołtan
2
Wprowadzenie Koncepcja refaktoryzacji
Przykład prostego przekształcenia Model dokumentu (drzewo AST) Złożona refaktoryzacja kodu Platforma ECLIPSE i projekt VDT (Vhdl Development Toolkit) Kierunki rozwoju projektu Podsumowanie
3
Przebieg procesu projektowego
granica spełnienia zadanej funkcjonalność funkcjonalność Automatyzacja niektórych czynności może wpłynąć na skrócenie czasu modyfikacji kodu czas Obszary czasu przeznaczane na modyfikację kodu bez rozszerzania jego funkcjonalności
4
Koncepcja refaktoryzacji
Termin refaktoryzacja definiuje się jako mechanizm zmiany struktury kodu bez zmiany jego zachowania (funkcjonalności) ułatwienie pielęgnacji kodu projektu (modyfikacje) sprawdzanie integralności zawartych danych i ich zgodności z semantyką języka na poziomie edycji kodu mechanizmy automatycznego generowania dodatkowego kodu
5
Koncepcja refaktoryzacji
Projekt VHDL (przed refaktoryzacją) PARSER (drzewo AST) Biblioteka do refaktoryzacji Projekt VHDL (po refaktoryzacji) Aktualizacja widoku Polecenie refaktoryzacji Widok Użytkownika Edytor Model View Controller Mechanizmy: analiza kodu źródłowego (parser) do budowy modelu (drzewa AST) edytor wraz z widokami do komunikacji z użytkownikiem biblioteka do kontroli procesu refaktoryzacji
6
Refaktoryzacja i język VHDL
Języki obiektowe (Java, C++) operują na podstawowych elementach jak: zmienne, funkcje i klasy. Języki obiektowe (Java, C++) złożone mechanizmy: dziedziczenia, poliformizmu, ... VHDL dużo większa liczba elementarnych typów: zmienne, sygnały, porty, entity, architektury, ... (złożoność mechanizmów modyfikacji nazw) VHDL przekształcenia uwzględniające współbieżność (procesy), operacje na pakietach oraz konfiguracjach kodu (do ustalenia i realizacji).
7
Przykład prostego przekształcenia
entity entityOldName is port(in1 : in bit; out1 : out bit); end entityOldName ; architecture architectureName1 of entityOldName is begin -- code end architectureName1; architecture architectureName2 of entityOldName is end architectureName2; entity entityTestName is end entityTestName; architecture architectureTestName of entityTestName is component entityOldName end component ; comp1: entityOldName port map (in1,out1); -- rest of port map component end architectureTestName; Przykładowy kod VHDL entityNewName ARCHITECTURE PORT MAP ... COMPONENT ENTITY
8
Przykład prostego przekształcenia
Proces zmiany nazwy entity wymusza realizację kilku elementarnych operacji: wskazanie elementu określającego starą nazwę entity (entityOldName) i podania nowej nazwy (entityNewName); sprawdzenie, czy nowa nazwa nie koliduje z już istniejącymi nazwami; wyszukanie bloku danego entity (zmiana nazwy); wyszukanie architektur dla danego entity (zmiana nazwy); wyszukanie w blokach architektur komponentów danego entity (zmiana nazwy); wyszukanie wszystkich mapowań komponentów danego entity (zmiana nazwy). entityNewName ARCHITECTURE PORT MAP ... COMPONENT ENTITY
9
Model dokumentu drzewo AST
(Abstract Syntax Tree) AST E ENTITY (name: entityOldName ) P PORT (name:in1,type:in,type2:bit) P PORT (name:out1,type:out,type2:bit) A ARCHITECTURE (name:architectureName1,entity: entityOldName ) A ARCHITECTURE (name:architectureName2,entity: entityOldName ) E ENTITY (name:entityTestName) P PORT (name:in1,type:in,type2:bit) P PORT (name:out1,type:out,type2:bit) A ARCHITECTURE (name:architectureTestName,entity:entityTestName) C COMPONENT (name: entityOldName ) P PORT (name:in1,type:in,type2:bit) entityNewName P PORT (name:out1,type:out,type2:bit) I INSTANCE (name:comp1, type: entityOldName ) Przy wyszukiwaniu wystarczy analizować tylko określone węzły drzewa M MAP (from:in1, to:in1) M MAP (from:out1, to:out1)
10
Złożona refaktoryzacja kodu
EDYTOR Projekt VHDL PLIK1.vhd MODEL AST BIBLIOTEKI PLIK2.vhd STANDARD PLIK3.vhd IEEE mała Złożoność przekształceń: elementarne metody przeszukiwania drzewa elementarne przekształcenia (rename, move, delete, insert) złożone przekształcenia realizowane na bazie sekwencji prostych przekształceń (transakcje i praca na kopii roboczej) duża
11
Katalog wzorców VHDL?! Przykłady do ewentualnej implementacji:
Podstawowym celem jest selekcja i wybór takich rozwiązań, które zostaną zaimplementowane w aplikacji do refaktoryzacji kody VHDL Opis wzorca powinien zawierać (motywację, mechanizm oraz przykłady) Przykłady do ewentualnej implementacji: Zamiana instrukcji if na case i na odwrót; Wyszukiwanie nieużywanych fragmentów kodu (np. zbędnych sygnałów) Podział komponentu (ekstrakcja części kodu do nowego komponentu) Wstawianie/ modyfikacja portów w blokach entity (automatyczna aktualizacja bloków component i port map) Generacja/aktualizacja testbenchy Wstrzykiwanie kodu asercji i ich automatyczne usuwanie
12
Platforma ECLIPSE ECLIPSE – darmowe narzędzie projektowe IDE
Bogactwo projektów i wtyczek (plug-ins) Darmowe rozwiązanie nawet do zastosowań komercyjnych. Rewelacyjne mechanizmy refaktoryzacji dostępne dla języków obiektowych: Java i C++ Integracja różnego typu technologii w jednym narzędziu: J2EE, XML, PHP, Perl, Python, ... VERILOG VHDL brak??! Potężne wsparcie przemysłu $$$ - projekt jest rozwijany przez etatowych programistów
13
Embedded Development Kit (EDK)
Kto „lubi” ECLIPSE? Embedded Development Kit (EDK) Nios II Embedded Processors
14
VDT - architektura Platforma ECLIPSE modułowa budowa (Plug-ins):
ECLIPSE PLATFORM VDT PROJECT CORE SCANNER PARSER AST MODEL WORKBENCH PDE UI EDITOR OUTLINE Platforma ECLIPSE modułowa budowa (Plug-ins): wtyczki JDT, CDT, PyDEV do refaktoryzacji kodu określonych języków (java, C++, python) VDT – wtyczka do refaktoryzacji kodu VHDL (pakiety CORE oraz UI) licencja CPL -
15
VDT - edytor kodu
16
VDT - rozwój biblioteki
Integracja z biblioteką LTK (Eclipse Language Toolkit) wspierającą mechanizmy refaktoryzacji Opracowanie zestawu testów (przykłady do katalogu wzorców) Generacja dokumentacji (HTML) na podstawie modelu (na wzór JavaDoc) Integracja narzędzia z zewnętrznym symulatorem VHDL (FreeVHDL?!) Wydanie stabilnej wersji projektu – aktualnie jest to wersja eksperymentalna
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.