Bra FPGA/CPLD-böcker för nybörjare?
Bra FPGA/CPLD-böcker för nybörjare?
Jag är otroligt nyfiken på FPGA och CPLD kretsar. Jag har läst Digitalteknik på KTH och kan det där med grindar osv så sånt behöver jag inte läsa igen känns det som. Men hur som helst så är jag ute efter nybörjarböcker som tar upp 'synthesis' och beskriver hur man går tillväga. Några tips?
Dessutom, vilket språk ska man använda? Jag har läst lite VHDL men det verkar som att Verilog, SystemVerilog, SystemC är bättre om man gillar/kan C.
Vilket rekommenderar ni och varför?
Dessutom, vilket språk ska man använda? Jag har läst lite VHDL men det verkar som att Verilog, SystemVerilog, SystemC är bättre om man gillar/kan C.
Vilket rekommenderar ni och varför?
En fundering vad slags utbildning går/gick du ..? (ingenjör/civil ingenjör/inriktning?)
VHDL ger nog bäst möjlighet att skriva uttryck för det man önskar.
Verilog är mycket praktiskt och snabbt, speciellt om man programmerat C innan.
Ett problem är att man måste tänka i parallelism, och inte sekventiellt utförande. Imperativa språk kan ses som "Micro management" av hur processor resurserna skall jobba. I ett HDL språk händer allt på en gång.
Funktionellla språk är också intressanta i ett parallism hänseende. Och skulle egentligen utgöra bättre kandidater i detta sammanhang än Imperativa språk som t.ex. C.
Känns lite dumt att C inspirerat så många HDL språk då dess struktur är implicit sekventiell. Vilket HDL miljön knappast är.
Funkar iaf såhär:
Verilog/VHDL källkod -> Synthes/Place/Route -> Bitström -> Överföring till fpga/cpld chip
VHDL ger nog bäst möjlighet att skriva uttryck för det man önskar.
Verilog är mycket praktiskt och snabbt, speciellt om man programmerat C innan.
Ett problem är att man måste tänka i parallelism, och inte sekventiellt utförande. Imperativa språk kan ses som "Micro management" av hur processor resurserna skall jobba. I ett HDL språk händer allt på en gång.
Funktionellla språk är också intressanta i ett parallism hänseende. Och skulle egentligen utgöra bättre kandidater i detta sammanhang än Imperativa språk som t.ex. C.
Känns lite dumt att C inspirerat så många HDL språk då dess struktur är implicit sekventiell. Vilket HDL miljön knappast är.
Funkar iaf såhär:
Verilog/VHDL källkod -> Synthes/Place/Route -> Bitström -> Överföring till fpga/cpld chip
Kan rekommendera boken "VHDL för konstruktion" (ISBN 91-44-02471-1) som börjar på en lagom nivå för att sedan gå igenom det mesta som man behöver veta om VHDL. Den går inte så djupt in på hur FPGA och CPLD fungerar men lagom för att få ett humm om vad det är för att sedan gå rakt på hur man använder VHDL. Jag hade den som kursbok i kursen digital konstruktion.
Vad jag hört så är det i USA som Verliog är populärt och nästan bara där det används, annars är det VHDL som gäller. Men vad vet jag...
Vad jag hört så är det i USA som Verliog är populärt och nästan bara där det används, annars är det VHDL som gäller. Men vad vet jag...
>>>Kan rekommendera boken "VHDL för konstruktion"
Jag hade också den boken som kurslitteratur. Dock tycker jag inte att den är något vidare som nybörjarbok. Jag tyckte den var komplicerad att förstå.
Däremot så är den mycket bra att ha nu när man kan VHDL som referens.
För övrigt tycker jag VHDL inte är något vidare praktiskt för just syntes eftersom det är så vansinnigt hårt typat språk. Verlilog är väl något bättre på den punkten, men jag har inte använt det så mycket eftersom Xilinx verktyg inte stödjer mixad VHDL och verilog.
Jag hade också den boken som kurslitteratur. Dock tycker jag inte att den är något vidare som nybörjarbok. Jag tyckte den var komplicerad att förstå.
Däremot så är den mycket bra att ha nu när man kan VHDL som referens.
För övrigt tycker jag VHDL inte är något vidare praktiskt för just syntes eftersom det är så vansinnigt hårt typat språk. Verlilog är väl något bättre på den punkten, men jag har inte använt det så mycket eftersom Xilinx verktyg inte stödjer mixad VHDL och verilog.
Fast just att VHDL är hårt typat brukar också anges som en styrka hos VHDL. Förut gällde VHDL i Europa och Verilog i USA, men numera är det nog mera utsmetat. "VHDL" för konstruktion tycker jag är lättläst och ger bra tips om vad som t.ex är syntetiserbart. Ibland kändes den lite kortfattad och den version jag läste var om VHDL87.
En bok jag inte rekommenderar dig att skaffa om du vill ha något lättläst är VHDL: Analysis and Modeling of Digital Systems. Den är pratig och omständig till förbannelse och det går inte att slå upp information från ett register. Även om den innehåller mycket skulle nog Sverker kasta den i papperskorgen.
En bok jag inte rekommenderar dig att skaffa om du vill ha något lättläst är VHDL: Analysis and Modeling of Digital Systems. Den är pratig och omständig till förbannelse och det går inte att slå upp information från ett register. Även om den innehåller mycket skulle nog Sverker kasta den i papperskorgen.
rehnmaak skrev: För övrigt tycker jag VHDL inte är något vidare praktiskt för just syntes eftersom det är så vansinnigt hårt typat språk. Verlilog är väl något bättre på den punkten, men jag har inte använt det så mycket eftersom Xilinx verktyg inte stödjer mixad VHDL och verilog.
VHDL inte praktiskt för syntes?? nu hänger jag inte med

kan du ge oss ett exempel?
Mja kanske praktiskt inte var rätt ord. Det jag menade var helt enkelt att det är lite för hårt typat vilket gör det extra jobbigt att skriva "koden".
Man kan tex inte likställa integers med std_logic_vector utan att konvertera fram och tillbaka. Det har väl iofs luckrats upp lite på senare tid.
Ett annat är att tilldela en vektor en annan vektor av olika längd. Då måste man tala om explicit vilka bitar man vill ha istället för att bara ta de x minst signifikanta bitarna som standard.
Samma sak om vektorn som ska tilldelas är längre än den andra, då måste man fylla på med nollor själv.
Man kan tex inte likställa integers med std_logic_vector utan att konvertera fram och tillbaka. Det har väl iofs luckrats upp lite på senare tid.
Ett annat är att tilldela en vektor en annan vektor av olika längd. Då måste man tala om explicit vilka bitar man vill ha istället för att bara ta de x minst signifikanta bitarna som standard.
Samma sak om vektorn som ska tilldelas är längre än den andra, då måste man fylla på med nollor själv.
> Mja kanske praktiskt inte var rätt ord. Det jag menade var helt enkelt att det är lite för hårt typat vilket gör det extra jobbigt att skriva "koden".
En ASIC vända kostar $1-2M, det ska inte vara "lätt" eller "bekväm" att koda!
Varför tror du folk köper dyra lint verktyg till Verilog så att dom kan få samma "jobbiga" felmeddelanden som VHDL verktygen ger??
>Man kan tex inte likställa integers med std_logic_vector utan att konvertera fram och tillbaka. Det har väl iofs luckrats upp lite på senare tid.
Ta en titt på unsigned i IEEE.std_numeric.
>Ett annat är att tilldela en vektor en annan vektor av olika längd. Då måste man tala om explicit vilka bitar man vill ha istället för att bara ta de x minst signifikanta bitarna som standard.
>
>Samma sak om vektorn som ska tilldelas är längre än den andra, då måste man fylla på med nollor själv.
Jag tycker VHDL gör 100% rätt i det här fallet. Det du vill ha finns tyvärr i Verilog/SV och har lett till många dyra ASIC buggar genom åren. Här är ett SV exempel jag fick av Don Mills (ASIC designer på Microchip):
Du får själv kulra ut varför c blir -2 och inte 0....
edit: ändrarde "b" till "c"
En ASIC vända kostar $1-2M, det ska inte vara "lätt" eller "bekväm" att koda!
Varför tror du folk köper dyra lint verktyg till Verilog så att dom kan få samma "jobbiga" felmeddelanden som VHDL verktygen ger??
>Man kan tex inte likställa integers med std_logic_vector utan att konvertera fram och tillbaka. Det har väl iofs luckrats upp lite på senare tid.
Ta en titt på unsigned i IEEE.std_numeric.
>Ett annat är att tilldela en vektor en annan vektor av olika längd. Då måste man tala om explicit vilka bitar man vill ha istället för att bara ta de x minst signifikanta bitarna som standard.
>
>Samma sak om vektorn som ska tilldelas är längre än den andra, då måste man fylla på med nollor själv.
Jag tycker VHDL gör 100% rätt i det här fallet. Det du vill ha finns tyvärr i Verilog/SV och har lett till många dyra ASIC buggar genom åren. Här är ett SV exempel jag fick av Don Mills (ASIC designer på Microchip):
Kod: Markera allt
logic signed [3:0] a;
logic signed [4:0] c;
a = -1;
c = a + 1b'1;
edit: ändrarde "b" till "c"

Senast redigerad av ucadv 12 februari 2008, 12:24:05, redigerad totalt 1 gång.
Hur FPGA och CPLD är uppbyggda är jag inte intresserade av. Jag är främst intresserad av mjukvaran. Jag har fått den uppfattningen att man kan i stort sätt göra allt i mjukvaran innan man kör över den till hårdvaran. Men det jag inte blir klok på är vad för program man behöver. Dessutom är det bra om böckerna innehåller många kod-exempel från 'riktiga kretsar' som har en funktion. Inte bara 'här är en d-vippa: kod. här är en AND-grind' osv. Utan mer helheten så man kan se hur allt hänger ihop.
Men tycker ni jag ska fortsätta med VHDL eller ska jag försöka lära mig Verilog nu när jag kan C? Tänker på vad som är vanligast i industrin och program som stöder språken.
Men tycker ni jag ska fortsätta med VHDL eller ska jag försöka lära mig Verilog nu när jag kan C? Tänker på vad som är vanligast i industrin och program som stöder språken.
Men både Verilog och VHDL är hårdvarubeskrivande språk. Självklart måste du bry dig om hur FPGA:n är uppbygd och samt ha koll på digitalteknik i form av grindar, register, minnen, sekvenskretsar som d-vippor ....!!! Om man bara är intresserad av mjukvaran är nog inte FPGA-spåret den rätta vägen, då kanske det är bättre att satsa på DSP-programmering (i vilket det i och för sig också är bra att förstå hårdvaruelement i DSP:n) . Visst, man kan simulera funktionen i mjukvara, men om man inte tänker i hårdvara när man skriver sin kod är det en uppenbar risk att den fungerar bra i simuleringen men sedan får man problem när man ska trycka in den i FPGA:n med begränsade hårdvaryelement och krav på timing (klockfrekvens om man ska dra en parallell till vanlig mjukvara till en processor).
Fast en liten reservation till förra inlägget. Det kan ju vara så att du inte alls är intresserad av att faktiskt syntetisera din kod och implementera dina funktioner i FPGA:ns hårdvara. Det finns ju faktiskt ett användningsområde av t.ex. VHDL av att systematisera lite större system och simulera att det fungerar, utan att alls bry sig om hur en FPGA fungerar. Dock måste man då kanske räkna med att den dagen man faktiskt vill göra en ASIC eller FPGA implementation så måste koden skrivas om i stor utsträckning.