Några få rader Lava skapar en krets som är omöjlig att beskriva i VHDL. Men det finns ett aber: Lava är ett funktionellt språk.Det kräver ett tänkande som är ovant för många ingenjörer.
Fem rader Lava räcker för att definiera alla tänkbara butterfly-mönster VHDL har två problem som Lava löser. Layout är krånglig att specificera i VHDL. Och VHDL kan inte beskriva komplicerade rekursiva kretsstrukturer, som till exempel de som används i en sorterarkrets. Lava är en variant av det funktionella språket Haskell. Kretsar representeras av funktioner. Funktioner är så kallade första rangens objekt. Enkelt uttryckt betyder det att man har en stor frihet att bolla runt med funktioner i Lava. Funktioner kan på både enkla och intrikata sätt kombineras med varandra och bilda nya funktioner. Att koppla utgångarna från kretsen f till ingångarna på kretsen g är så enkelt som att skriva "f ->- g". Lava kan på några få kodrader bygga komplexa kretsar som är närmast omöjliga att skapa i VHDL. Lavaprogrammeraren bygger inte en sorterare för fyra 8-bitarsvektorer. Det är lika enkelt att bygga en abstrakt sorterare som klarar ett godtyckligt antal värden av godtycklig typ. Och som kan sortera både uppåt och neråt beroende på vilken krets som används som jämförare. Sorteraren lämnar luckor i sin definition. Genom att fylla luckorna med olika kretsar bildas olika sorterare som bara har gemensamt det mönster som kopplar kretsarna till varandra. VHDL kan på sin höjd lägga upp ett antal likadana komponenter i en rad. Lava är inte det enda funktionella kretsbeskrivningsspråket. Andra exempel är Jazz och Hawk. Lavas unika egenskap bland de funktionella språken är att det också kan specificera layout. När man kopplar f till g kan man samtidigt tala om hur kretsarna sitter relativt varandra, vilken som är till höger eller vänster, överst eller underst. Automatisk layout fungerar ofta dåligt för komplexa kretsar, som FFT:er eller DSP:er. Det är möjligheten att specificera layout som gör att Lava ofta kan leverera en effektiv kretslösning där VHDL misslyckas. Man behöver inte byta verktyg för att verifiera eller analysera kretsarna man byggt. Funktioner som verifierar och simulerar kretsar är inbyggda och i vissa fall implementerade direkt i Lava. |
- Det har hänt här ett antal gånger, säger Satnam Singh, ansvarig för Lavalaboratoriet på Xilinx.
Xilinx använder Lava till att konstruera och verifiera kärnor optimerade för Xilinx FPGA:er.
- Det är många företag som skulle tjäna på att använda Lava för strukturell design. Det är jag helt övertygad om, säger Koen Claessen, doktor på Chalmers i Göteborg.
Men ingenjörerna har svårt att ta Lava till sitt hjärta. Det är nämligen ett funktionellt språk. Standardspråken i sammanhanget - VHDL och Verilog - är imperativa.
- Lava är för esoteriskt för ingenjörer. Folk är tränade att tänka imperativt. Det är en kulturell skillnad, suckar Satnam Singh.
I Lava är en krets en funktion från indata till utdata. Kretskonstruktören kan utnyttja den flexibilitet som funktioner har i funktionella språk. Det gör det möjligt att kortfattat specificera komplexa kretsar för till exempel sortering, FFT-transformationer eller filtrering.
VHDL-kretsar - å andra sidan - definieras en gång för alla och är sedan statiska. Det går inte att ge en VHDL-krets en annan krets som parameter.
Kan exporteras till VHDL
Samtidigt med strukturdefinitionen kan Lavaprogrammeraren ange layout. Det är en viktig förklaring till kraftfullheten.
- Vissa kretsar är närmast omöjliga att beskriva layouten på i VHDL. Folk bryr sig inte och ger upp. Och betalar ett pris i minskade prestanda, säger Satnam Singh.
Lava är inte ett komplett språk för hårdvarudesign. Språket kan inte göra algoritmiska beteendebeskrivningar. Men det går att använda Lava tillsammans med andra verktyg. Lavakoden kan exporteras som VHDL, Verilog, Edif och SystemC. Och Lava kan importera Edif- och VHDL-kod som svarta lådor.
Lava härstammar från språken muFP och Ruby, designade av Mary Sheeran, professor på Chalmers. Mary Sheeran, Koen Claessen och Satnam Singh är de som idag arbetar med utvecklingen av språket.
- De trodde jag var helt galen när jag började med detta för 20 år sedan, berättar Mary Sheeran.
- Det var på den tiden man fortfarande ritade kretsscheman. Idag blir det alltmer uppenbart att layout måste in i kretsdesignen mycket tidigt. Det är därför Intel ger oss pengar, säger Mary Sheeran.
Också Compaq och Ericsson är intresserade av Chalmers Lava.
Kommer från Chalmers
Chalmers och Xilinx Lava skiljer sig åt. Chalmersversionen används i undervisningen för att lära ut formell verifiering. Chalmers Lava kan bara hantera synkrona kretsar.
Xilinx Lava klarar alla strukturella beskrivningar som kan göras i VHDL, inklusive asynkrona kretsar. Å andra sidan hanterar Xilinx Lava inte simuleringar. Syftet är främst att generera effektiva kretsar. Möjligheten att specificera layout används flitigt.
Satnam Singh hoppas kunna släppa en fri betaversion av Xilinx Lava inom de närmast två månaderna. Till dess avvaktar också Koen Claessen med att lägga upp Chalmers Lava för nedladdning.
- Jag jobbar med våra advokater för att få till en bra licens som skyddar Xilinx intellektuella egendom, säger Satnam Singh.
Ett kommande projekt är att smälta samman Chalmers och Xilinx Lava till en enda version.
- Det kanske största problemet med Lava idag är att det inte finns ett kommersiellt stöd, att det inte finns något företag som kan ge support, säger Koen Claessen.
Koen Claessen hoppas studenterna ska sprida kunskapen om Lava.
Satnam Singh tycks ha gett upp försöken att lära gamla ingenjörer tänka i funktioner. Istället försöker han överföra egenskaperna i Lava till SystemC, ett designspråk som bygger på C++
Jan Tångring