Języki Opisu Sprzętu

Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D-10 222, tel. w. 28-72, e-mail: [email protected] Wykład 1 2019 ❑Komputer, CPU 2 październik 2019 ❑Architektury obliczeniowe

❑Poziomy abstrakcji

❑Sprzęt a program

❑Historia języków opisu sprzętu na tle rozwoju elektroniki

❑Porównanie języków HDL

❑Wprowadzenie do Veriloga

http://www.fis.agh.edu.pl/~skoczen/hdl AGH WFiIS Informatyka Stosowana Języki Opisu Sprzętu 1 Komputer

Magistrala Danych

CPU ROM RAM I/O

µP lub µC

Magistrala Adresowa

Magistrala Sterująca

Nie będziemy się tym zajmować

AGH, WFiIS, HDL 2 Jednostka Centralna CPU

Magistrala Danych

R1 AC R... Rn

PC Magistrala Adresowa IR ALU SP Flags

Układ Sterowania Magistrala Sterujaca (dekoder komend) Nie będziemy się tym zajmować

AGH, WFiIS, HDL 3 Lista rozkazów

Podstawowe grupy rozkazów to: ❑Arytmetyczne ❑Logiczne ❑Przesunięcia ❑Przesłania wewnętrzne ❑Przesłania do i z pamięci lub urządzeń wejścia-wyjścia ❑Sterowanie programem ❑Obsługa stosu ❑Obsługa przerwań

Nie będziemy się tym zajmować

AGH, WFiIS, HDL 4 Architektura obliczeniowa

Architektura obliczeniowa Acs składa się z: Elementów (components) funkcjonalnych – Ci Połączeń (links) komunikacyjnych między elementami – Lij Procedur funkcjonalnych związanych z elementami i połączeniami – Pk

Acs = {Ci, Lij, Pk} gdzie: i, j = 1, 2, …, N k = 1, 2, …, M N – liczba elementów, M – liczba procedur w systemie.

AGH, WFiIS, HDL 5 Systemy obliczeniowe Nazwa Architektura Implementacja

CSPP Computing Systems with Programmable ACSPP = {Ci, Lij, P~} µP Procedure

RCS Reconfigurable Computing Systems ARCS = {C~, L~, P~} FPGA

ASP Application-Specific Processors AASP = {Ci, Lij, Pij} ASIC

CSPP RCS ASP Elastyczność Średnia Najwyższa Ograniczona Szybkość działania Ograniczona Wysoka Najwyższa Wydajność mocy Niska Wysoka Najwyższa Koszt produkcji masowej Względnie niski Względnie wysoki Względnie niski Czas projektowania systemu Względnie krótki Średni Względnie długi Najkorzystniejszy obszar Algorytmiczne Obliczeniowe Obliczeniowe zastosowań

AGH, WFiIS, HDL 6 Blok wejściowo- Pionowy kanał wyjściowy łączeniowy (I/O Block – IOB) (Vertical Routing Channel)

Konfigurowalny Element kluczujący blok logiczny (Switch Box - SB) (Configurable Logic Block – CLB)

Element łączący (Connection Box - CB)

Poziomy kanał łączeniowy (Horizontal Routing Channel)

Matryca (fabric) układu FPGA

AGH, WFiIS, HDL 7 Ogólna architektura RCS

Zasoby konfigurowalne

Magistrala Magistrala danych danych wejściowych wyjściowych

Pamięć konfiguracyjna

Nośnik z plikiem Sterownik konfiguracyjnym konfiguracji zasobów strumień bitowy

AGH, WFiIS, HDL 8 Przebieg Model RTL w HDL konfiguracji

Synteza logiczna

Mapowanie technologii

Klastrowanie

Rozmieszczanie

Wyznaczania tras połączeń

Generacja strumienia bitowego

strumień bitowy 9

AGH, WFiIS, HDL Poziomy abstrakcji Jest w użyciu pięć poziomów abstrakcji gdy myślimy o zagadnieniu modelowania systemów cyfrowych:

❑CzasuContinuous ciągłego Time

0 10 20 30 40 50 60 time (ns)

events Discrete event_1 event_3 event_4 event_7 ❑Zdarzeń (event-drivenEvent ) event_2 event_5

event_6

cycle-1 cycle-2 clock cycles Cycle (event_1) (event_4) ❑Cyklu zegara (cycleAccurate-based) (event_2) (event_5) (event_3) (event_6) (event_7)

instructions Instruction mov r0,#5 ldr r1,[r0] add r2,r1,#3 mov r3,#0 ❑InstrukcjiAccurate (cycle_1) (cycle_2) (cycle_4) (cycle_5) (cycle_2) (cycle_3) (cycle_5) (cycle_6) (cycle_4) (cycle_6)

this book

transactions Transaction load_mem write_mem ❑TransakcjiAccurate ldr r1,[r0] str r3,[r2] add r2,r1,#3 cmp r1,r3 mov r3,#0 ble 0x500 nop AGH, WFiIS, HDL 10 Poziomy abstrakcji - 0

Model fizyki elementów elektronicznych i procesu technologicznego: Polega na rozwiązywaniu układu równań różniczkowych opisującego rozkład pól elektromagnetycznych i nośników ładunku w półprzewodniku (prawa Maxwella, równanie ciągłości). Podejście to nie ma zastosowania do modelowania obwodów elektrycznych analogowych, a tym bardziej systemów cyfrowych. Jest konieczne do projektowania i analizy elementów elektronicznych i technologii elektronicznej.

AGH, WFiIS, HDL 11 Poziomy abstrakcji - 1

Continuous Time Model czasu ciągłego: Najniższy poziom modelowania polegający na rozwiązywaniu układu równań różniczkowych opisującego prądy i napięcia w obwodzie elektrycznym. Elementy elektroniczne są modelowane analitycznie z wykorzystaniem ogólnie przyjętych modeli (BSIM, EKV). Podejście to jest stosowane do analizy efektów analogowych i zawiera mnóstwo informacji niepotrzebnych z punktu widzenia projektu urządzenia cyfrowego.

SPICE - Simulation Program with Integrated Circuit Emphasis jest otwartym (open source) symulatorem analogowych obwodów elektronicznych ogólnego przeznczenia. W 1972 na Wydziale Inżynierii Elektrycznej i Nauk Komputerowych na Uniwersytecie Kalifornijskim w Berkeley opracowano pierwszą wersję programu SPICE1. Poziomy abstrakcji - 2 Discrete-event Model zdarzeniowy: Register Transfer Level – RTL (, VHDL) Na tym poziomie modelowania aktywność układu jest skoncentrowana w dyskretnych punktach czasu. Zachowanie się systemu można rozłożyć na zbiór odrębnych chwil czasowych, w których zachodzą zdarzenia. Te chwile nazywamy zdarzeniami (event), a to co się wydarza to zmiany stanu (state change). Jest to podejście analogiczne do procesu próbkowania sygnału ciągłego. Symulacja zdarzeniowa jest szeroko stosowana do modelowania sprzętu cyfrowego na niskim poziomie abstrakcji. Metoda ta nie wymaga rozwiązywania równań różniczkowych, a mimo to zachowuje całą informację o aktywności pomiędzy zboczami zegara (fałszywe impulsy, opóźnienia i in.). Poziomy abstrakcji - 3

Cycle-accurate Model na poziomie okresu zegara: Ten rodzaj modelu nie ujmuje żadnych wydarzeń zachodzących pomiędzy zboczami przebiegu zegarowego: opóźnienia, propagacje, fałszywe impulsy (glitch). Jest to nieistotne gdy układ jest w pełni synchroniczny czyli wszystko co ma znaczenie wydarza się w chwilach wyznaczonych zboczami sygnału zegarowego. W takim modelu układy kombinacyjne działają natychmiastowo, a układy sekwencyjne po całkowitej liczbie okresów zegara. Dla badania związków między sprzętem a oprogramowaniem jest to wystarczająca dokładność. Poziomy abstrakcji - 4

Instruction-accurate simulators

Model na poziomie rozkazów: Ten rodzaj modelu wyraża aktywność systemu w krokach odpowiadających jednemu rozkazowi mikroprocesora. Każdy rozkaz to kilka okresów zegara pracy procesora. Symulatory na poziomie rozkazów stosowane są do weryfikacji dużych systemów programowych jak systemy operacyjne. Symulatory takie mierzą czas w liczbie instrukcji, a nie okresów zegara. Poziomy abstrakcji - 5

Model transakcyjny: Transaction Level Modeling – TLM (SystemC) W tym rodzaju modelu zachowanie układu jest wyrażone w terminach interakcji (zwanych transakcjami) pomiędzy składnikami systemu. Modelowanie aplikacji, w której wielokrotnie występują odwołania do pamięci można znacząco uprościć i skoncentrować się na aktywności występującej pomiędzy tymi odwołaniami. W tym celu należy wszystkie instrukcje wykonywane w konkretnym odwołaniu do pamięci zgrupować w jedno wywołanie funkcji tzn. transakcję. Model transakcyjny jest ważny na wstępnym etapie projektu kiedy projektant jest zainteresowany w określeniu ogólnej charakterystyki projektu bez wchodzenia w wysiłek budowy szczegółów modelu. EDA – Electronic Design Automation

CAE – Computer Aided Engineering Narzędzia programowe stosowane do początkowych etapów projektu: ❑ symulacja za pomocą HDL, ❑ synteza logiczna i analiza czasowa, ❑ weryfikacja.

CAD – Computer Aided Design Narzędzia programowe stosowane do końcowych etapów projektu: ❑ rozmieszczanie i wyznaczanie tras połączeń (P&R - Place and Route), ❑ generacja topografii układu scalonego (layout generation).

AGH, WFiIS, HDL 17 Sprzęt W pierwszym przybliżeniu będziemy mieli na myśli: Układ cyfrowy, synchroniczny, z jednym zegarem, zbudowany z logiki kombinacyjnej i przerzutników.

module count (input clk, rst, output reg [7:0] q); always @(posedge clk) if(rst) q <= 8’b0; else q <= q + 1’b1; endmodule

Istnieją inne formy sprzętu, które nie mogą być tak prosto analizowane: układy asynchroniczne, logika dynamiczna, wielofazowe zegary, wiele domen zegarowych, sprzęt na zatrzaskach ... Program W pierwszym przybliżeniu będziemy mieli na myśli: Jedno-wątkowy sekwencyjny program napisany w C lub asemblerze. .text Wynik kompilacji dla procesora ARM int max; findmax: ldr r2, .L10 int findmax(int a[10]) { ldr r3, [r0, #0] unsigned i; str r3, [r2, #0] max = a[0]; mov ip, #1 for (i=1; i<10; i++) .L7: if (a[i] > max) max = a[i]; ldr r1, [r0, ip, asl #2] } ldr r3, [r2, #0] add ip, ip, #1 Rejestr Zawiera (w sensie programu w C) cmp r1, r3 r0 Adres bazowy a[] czyli miejsca przechowywania a[0] strgt r1, [r2, #0] r1 a[i] cmp ip, #9 movhi pc, lr r2 Adres miejsca przechowywania max b .L7 r3 max .L11: ip Licznik i pętli inkrementowany instrukcją add .align 2 ldr - load-register .L10: strgt - store-if-greater (dotyczy flagi ustawionej przez poprzednią instrukcję) .word max

Istnieją inne formy programów, które nie dają się analizować przy założeniu prostego wyobrażenia o mikroprocesorze: wielowątkowość, programowanie obiektowe, funkcjonalne ... Sprzęt module ffd (input clk, rst, d, output reg q); always @(posedge clk) if(rst) q <= 1’b0; else q <= d; endmodule

module ffd ( clk, rst, d, q); Wynik syntezy dla input clk; FPGA Spartan-3AN input rst; input d; output q; wire clk_BUFGP_1; wire d_IBUF_3; wire q_OBUF_5; wire rst_IBUF_7; FDR q_1 ( .C(clk_BUFGP_1), .D(d_IBUF_3), .R(rst_IBUF_7), .Q(q_OBUF_5)); IBUF rst_IBUF ( .I(rst), .O(rst_IBUF_7)); IBUF d_IBUF ( .I(d), .O(d_IBUF_3)); OBUF q_OBUF ( .I(q_OBUF_5), .O(q)); BUFGP clk_BUFGP ( .I(clk), .O(clk_BUFGP_1)); endmodule Historia HDL

1952 – pierwszy HDL skonstruowany przez Reed-a 1970 – powstał język ISP (Rose, Drongowski) 1973 – istnieje już 9 HDL-i i kilkanaście nowych zaproponowano Lata 1980 – pojawiły się Verilog i VHDL i były stosowane do symulacji Lata 1990 – rozwija się idea syntezy z opisu HDL zapoczątkowana w latach 60-tych Firma wprowadziła pierwszy przemysłowo zaakceptowany system do syntezy automatycznej bazujący na RTL Verilog. Pojawiła się potrzeba automatycznego generowania ciągów testowych w celu weryfikacji dużych modeli. Osiągnięto to w językach do weryfikacji poprzez użycie ograniczonych zmiennych losowych (biased random variables).

AGH, WFiIS, HDL 21 Verilog HDL

Stworzony w firmie Gateway Design Automation w 1983 roku przez Phila Moorby jako pionierski symulator na poziomie bramek. Pierwotny język był przeznaczony do współpracy z interpreterem symulatora elektronicznych układów cyfrowych o nazwie Verilog XL. Symulator ten zawierał słynny do dziś szybki algorytm o nazwie XL. Firmę wraz z Verilogiem przejęła firma Cadence w 1989 roku i uczyniła Veriloga otwartym standardem. Efektem prac w Cadence było stworzenie Verilog HDL i Verilog PLI (Programming Language Interface). W roku 1990 powstała otwarta organizacja Open Verilog International (OVI). Na jej łamach Cadence opublikował Verilog 1.0 Reference Manual, który był dokumentacją użytkownika najnowszej wersji Veriloga-XL.

AGH, WFiIS, HDL 22 Verilog HDL

W roku 1993 Cadence opublikował kolejną wersję tzn. Verilog 2.0 Reference Manual, która zawierała tylko drobne udoskonalenia (np. tablice konkretyzacji). OVI podjęła kroki do stworzenia formalnego standardu IEEE. Powstała grupa IEEE do spraw tego standardu, która zdecydowała o przyjęciu istniejącej dokumentacji Verilog-a 2.0 bez żadnych zmian jako standardu IEEE 1364-1995. Było to w roku 1995. W roku 2000 powstała Accellera z połączenia Open Verilog International i VHDL. Na podstawie życzeń użytkowników i sugestii producentów oprogramowania powstał zrewidowany standard IEEE 1364-2001. Od 2002 Accellera rozpoczęła proces gruntownych ulepszeń w Verilog-u. Efektem jest nowy język SystemVerilog, którego standard zatwierdzono w 2005 roku IEEE 1800-2005. Równocześnie zakończono rozwój „zwykłego” Verilog-a publikując nową (i ostatnią) wersje standardu IEEE 1364-2005. Ostatnia standaryzacja SystemVerilog–a to IEEE 1800-2009.

AGH, WFiIS, HDL 23 Standardy IEEE dla Verilog-a

Standard Title Uwagi Licz. str. Verilog® hardware description language Ostatnia wersja w 2005 – nie 862 IEEE 1364-2001 rozwijany dalej Standard for Verilog® Register RTL 109 IEEE 1364.1-2001 Transfer Level Synthesis Standard for SystemVerilog — Unified Nowy język poraz pierwszy 1285 IEEE 1800-2009 Hardware Design, Specification, and standaryzowany w 2005 roku Verification Language

Brak standardów dla Verilog-A i Verilog-AMS

AGH, WFiIS, HDL 24 VHDL Powstał na militarne zamówienie jako element szerszego projektu zastosowania układów scalonych w amerykańskiej armii. Litera V w nazwie pochodzi VHISIC – Very High Speed Integrated Circuit. Następnie projekt rozwijały trzy firmy: Intermetrics (twórca języka ADA), Texas Instrument i IBM. Głównym celem było stworzenie ścisłego i jednoznacznego sposobu dokumentowania sprzętu cyfrowego. Równocześnie z językiem opisowym powstał symulator. Standard powstał w 1987 roku i został zrewidowany w 1993 pod numerem IEEE 1076-1993. Na początku 2009 zatwierdzono nową wersję IEEE Std 1076-2008, popularnie zwaną VHDL 2008. Jest to usprawniona wersja języka, zawierająca rozszerzoną składnię, większy zestaw operatorów, uporządkowane standardowe pakiety biblioteczne, dołączony interfejs proceduralny dla C/C++ (VHPI), podzbiór języka PSL, ...

AGH, WFiIS, HDL 25 VHDL - wady

Bardzo obszerna wielosłowna składnia wywodząca się z języka ADA ale także z nietrafionych decyzji projektowych (podział na entity i architecture). Nadmierna elastyczność zwłaszcza w definiowaniu typów powoduje konieczność wprowadzania dodatkowej standaryzacji pakietów np. IEEE 1164

library ieee; use ieee.std_logic_1164.all;

AGH, WFiIS, HDL 26 Język ADA W latach 70. departament obrony USA stworzył grupę roboczą High Order Language Working Group (HOLWG), która ogłosiła konkurs na stworzenie nowego języka. W 1978 roku wygrała firma CII Honeywell Bull, pod przewodnictwem Jeana Ichbiaha. Nowy język otrzymał nazwę Ada na cześć lady Augusty Ady Lovelace, uważanej za pierwszą programistkę w historii. Zwycięska propozycja czerpała pomysły z języka LIS, który Ichbiah i jego grupa zaprojektowali w latach 70. Pojawienie się Ady wywołało duże zainteresowanie wśród społeczności programistów w pierwszych latach swojego istnienia. Wśród zwolenników pojawiały się opinie, że może ona zostać głównym językiem programowania ogólnego przeznaczenia. Jean Ichbiah publicznie stwierdził, że w przeciągu 10 lat na rynku pozostaną jedynie dwa języki: Ada i Lisp. Język został standardem ANSI w 1983 roku. Nowy standard z 1995 roku Ada 95 sprawił, że język ten stał się pierwszym obiektowo zorientowanym, ustandaryzowanym językiem programowania. US Air Force sfinansowała prace nad kompilatorem GNAT. Obecnie GNAT jest częścią pakietu GNU Compiler Collection. Ostatnia standaryzacja miała miejsce w grudniu 2012.

AGH, WFiIS, HDL 27 Język ADA

Jednym z problemów języka był zaproponowany model wielozadaniowości, który znacząco odbiegał od znanych rozwiązań. Z uwagi na obecność kluczowych mechanizmów bezpieczeństwa, Ada jest obecnie używana w aplikacjach, gdzie błąd programistyczny może mieć kosztowne konsekwencje. Przykłady: kontrola lotów, awionika samolotów, satelity, automatyczne systemy transportowe czy bankowość. W szczególności, oprogramowanie systemu Fly-by-wire w samolocie Boeing 777 zostało w całości napisane w Adzie.

AGH, WFiIS, HDL 28 Standardy IEEE dla VHDL-a

Standard Title Uwagi Licz. str. Standard VHDL Language 640 IEEE 1076- 2008 Reference Manual Standard VHDL Analog and 342 IEEE 1076.1-2007 Mixed-Signal Extensions Standard for VHDL Analog and 34 IEEE 1076.1.1-2011 Mixed-Signal Extensions—Packages for Multiple Energy Domain Support Standard VHDL Mathematical Opis pakietów MATH_REAL i 42 IEEE 1076.2-1996 Packages MATH_COMPLEX Standard VHDL Synthesis Opis pakietów NUMERIC_BIT 49 IEEE 1076.3-1997 Packages i NUMERIC_STD VITAL ASIC VITAL VHDL Initiative 436 IEEE 1076.4-2000 modeling specification Towards ASIC Libraries Standard Multivalue Logic Opis pakietu Std_logic_1164 23 IEEE 1164-1993 System for VHDL Model Interoperability

AGH, WFiIS, HDL 29 Historia FPGA 1987 - Steve Casselman zbudował komputer z 600 000 reprogramowalnych bramek. Casselman od roku 1992 jest właścicielem patentu. Ross Freeman jest uważany za wynalazcę FPGA. Bernard Vonderschmitt wprowadził model biznesowy pozbawiony linii technologicznej. Ross Freeman i Bernard Vonderschmitt współzałożyciele firmy Xilinx. W roku 1985 wprowadzili pierwszy komercyjnie opłacalny układ FPGA o symbolu XC2064. Układ XC2064 posiadał 64 CLB (Configurable Logic Block) z dwoma trójwejściowymi LUT (two three- input LookUp Tables). Rynek FPGA w roku 2010: Intel (Altera) – 31%, Microsemi (Actel) -10%, Xilinx – 36%. Pozostali to: Atmel, Cypress, Lattice Semiconductor, QuickLogic. Wytwarzania bez posiadania technologii (fabless manufacturing) jest projektowaniem i sprzedwaniem sprzętu i układów sclonych podczas gdy samo wytwarzanie produktów zlecane jest do wyspecjalizowanej firmy (semiconductor foundry) posiadającej odpowiednią technologię.

AGH, WFiIS, HDL 30 Semiconductor foundry

TSMC - Taiwan Semiconductor Manufacturing Company tajwańskie przedsiębiorstwo specjalizujące się w produkcji układów scalonych, w tym procesorów. Założone w 1987 roku, uzyskało status największego na świecie niezależnego producenta dedykowanych układów scalonych. Wytwarza m.in. układy dla firm Nvidia, AMD, Xilinx i VIA Technologies. https://www.tsmc.com/english/default.htm

GLOBALFOUNDRIES Amerykańskie przedsiębiorstwo specjalizujące się w produkcji układów scalonych z główną siedzibą w Kaliforni. GlobalFoundries został stworzony przez zbycie części produkcyjnej Advanced Micro Device (AMD) Broadcom, Qualcomm, and STMicroelectronics. Fabryki znajduja się w Niemczech, Simgapurze i USA. https://www.globalfoundries.com/

AGH, WFiIS, HDL 31 Historia FPGA Pierwszy komercyjnie dostępny FPGA to XC2064 w 1985 raku. Zawierał 64 CLB z dwama trójwejściowymi LUT-ami. Rozmiar najbardziej Rozmiar technologi [nm] Rok Rodzina układów zaawansowanego układu 1998 250 Virtex 180 Virtex-E 150 Virtex-II 130 Virtex-II Pro 2003 90 Spartan-3 2004 90 Virtex-4 90 Spartan-3E 1400k SG Spartan-3A 25 344 ELC

Objaśnienia: 2007 65 Virtex-5 51 840 VS SG System Gate 2009 45 Spartan-6 147 443 LC

LC Logic Cell 2010 40 Virtex-6 28 Artix-7, Kinetix-7, ELC Equivqlent Logic Cell 2011 Virtex-7, Zynq-7000 VS Virtex-5 Slices 2014 20 UltraScale 2015 16 UltraScale+ AGH, WFiIS, HDL 32