Xilinx ML405 Evaluation platform
Xilinx ML405 Evaluation platform
Jag är fullständig nybörjare på VHDL. Vill lära mig och har fått tag på ett Xilinx ML405 evalueringskort med en Virtex4 XC4VFX20 på.
http://www.xilinx.com/products/devkits/ ... -UNI-G.htm
Har fått igång och kört de olika demo som finns på från början och skulle nu vilja skriva något eget för att se att jag fattat något. Har installerat Xilinx ISE 10.1 WebPack.
Det stora problemet nu är att det är väldigt mycket lullull mellan min kod och exempelvis en LED på kortet. Hur sjutton går jag tillväga för att t ex få en LED att blinka? Har skrivit kod och fått ok på syntax och har även simulerat med stimuli m.m. och det funkar fint. Hur får jag ut det till kortet?
Jag har även en Xilinx Platform Cable USB, ska jag använda den?
Mycket tacksam för hjälp!
http://www.xilinx.com/products/devkits/ ... -UNI-G.htm
Har fått igång och kört de olika demo som finns på från början och skulle nu vilja skriva något eget för att se att jag fattat något. Har installerat Xilinx ISE 10.1 WebPack.
Det stora problemet nu är att det är väldigt mycket lullull mellan min kod och exempelvis en LED på kortet. Hur sjutton går jag tillväga för att t ex få en LED att blinka? Har skrivit kod och fått ok på syntax och har även simulerat med stimuli m.m. och det funkar fint. Hur får jag ut det till kortet?
Jag har även en Xilinx Platform Cable USB, ska jag använda den?
Mycket tacksam för hjälp!
Man definierar funktion. (ej programmerar mao!)
Så för en blinkande led definierar en ingång (input) för oscillator och en utgång (output) för lysdioden.
Definiera (always) en klockdelare med delningsfaktor (count=count+1) t.ex. 25000000 för en 50 MHz klocka.
Därefter sätter man oscillatorns utgång och en registerbit som argument (clock_div(osc_out,led_bit)) till klockdelaren.
Till sist kopplar man (wire) lysdioden till registerbiten.
En helt annan paradigm att tänka i mao
VHDL för hardcore.. och Verilog för dom som är vana med C.
Verilog har vissa begränsningar, bl.a. i samband med effektiv initialisering av datastrukturer.
Du kan använda USB kabeln om du får "impact" att prata med ditt kort genom den. Annars blir det parallell-ports JTAG.
Så för en blinkande led definierar en ingång (input) för oscillator och en utgång (output) för lysdioden.
Definiera (always) en klockdelare med delningsfaktor (count=count+1) t.ex. 25000000 för en 50 MHz klocka.
Därefter sätter man oscillatorns utgång och en registerbit som argument (clock_div(osc_out,led_bit)) till klockdelaren.
Till sist kopplar man (wire) lysdioden till registerbiten.
En helt annan paradigm att tänka i mao

VHDL för hardcore.. och Verilog för dom som är vana med C.
Verilog har vissa begränsningar, bl.a. i samband med effektiv initialisering av datastrukturer.
Du kan använda USB kabeln om du får "impact" att prata med ditt kort genom den. Annars blir det parallell-ports JTAG.
Med en A/D kan du bygga ett mycket exakt instrument för mätning, tex FFT, oscilloskop, multimeter och annat.
Du kan se mer om denna FPGA på www.national.com genom att leta dig vidare till "the analog by design show"
Du kan se mer om denna FPGA på www.national.com genom att leta dig vidare till "the analog by design show"
Kabeln är din anslutning till kortet. Programmeringen kan köras via ISE ( i alla fall den fristående komersiella produkten).
I ISE kan du koppla ihop en port i din entity med en lämplig pinne på kretsen samt definiera vilken typ av ut/ingång du ska använda. Personligen tycker jag att dokumentation till utvecklingskortet är viktig så att jag vet var klockan går in mm. (Har ett Memec-kort på skrivbordet på jobbet).
Börja med att skapa din funktion och simulera denna, funkar det är det dags att syntetisera, ansluta in- och utgångar samt köra place and route mm tills din konstruktion kan laddas ner på FPGA;n.
VHDL är roligt, men kanske inte alltid den mest effektiva vägen till alla konstruktioner. (Det finns en del verktyg på en betydligt högre abstraktionsnivå)
Lycka till.
I ISE kan du koppla ihop en port i din entity med en lämplig pinne på kretsen samt definiera vilken typ av ut/ingång du ska använda. Personligen tycker jag att dokumentation till utvecklingskortet är viktig så att jag vet var klockan går in mm. (Har ett Memec-kort på skrivbordet på jobbet).
Börja med att skapa din funktion och simulera denna, funkar det är det dags att syntetisera, ansluta in- och utgångar samt köra place and route mm tills din konstruktion kan laddas ner på FPGA;n.
VHDL är roligt, men kanske inte alltid den mest effektiva vägen till alla konstruktioner. (Det finns en del verktyg på en betydligt högre abstraktionsnivå)
Lycka till.
ganska schysst att du kör med en Virtex 4:a och är nybörjare 
Om du markerar top-level koden och trycker på "Configure Target Device" i process fönstret så startar iMPACT upp det är ISE:s program för att skicka över implementeringen till FPGA:n den kommer köra en JTAG Boundary Scan och fråga dig efter bit filer till kretsen. När du valt dessa så kör den automatiskt igång "programmering".
EDIT: Tekko, varför kom A/D in här? Det är en bit mellan att bygga Blink-a-LED och FFT maskiner...

Om du markerar top-level koden och trycker på "Configure Target Device" i process fönstret så startar iMPACT upp det är ISE:s program för att skicka över implementeringen till FPGA:n den kommer köra en JTAG Boundary Scan och fråga dig efter bit filer till kretsen. När du valt dessa så kör den automatiskt igång "programmering".
EDIT: Tekko, varför kom A/D in här? Det är en bit mellan att bygga Blink-a-LED och FFT maskiner...
När du kör Boundary Scan i iMPACT så visar den de enheter som är kopplade via den jtag slingan. En enhet är själva FPGAn och en är kanske ett konfigurationsflash som man kan lägga in en fast fpgakonfigurationsfil i.
Om du vill kan du programmera fpgan direkt och se resultatet så fort programmeringen är klar. Dock försvinner konfigureringen när spänningen slås av. Alternativt kan du programmera konfigurationsflashet och då "bootar" fpgan programmeringen vid spänningspåslag.
Den första metoden används mest vid utveckling, medan man senare fixar en mer permanent lösning med metod två när kodandet är färdigt.
Om du vill kan du programmera fpgan direkt och se resultatet så fort programmeringen är klar. Dock försvinner konfigureringen när spänningen slås av. Alternativt kan du programmera konfigurationsflashet och då "bootar" fpgan programmeringen vid spänningspåslag.
Den första metoden används mest vid utveckling, medan man senare fixar en mer permanent lösning med metod två när kodandet är färdigt.
I ISE används en fil ".ucf" som står för user constraint file. Den definierar bl.a. upp vilka signaler som är kopplade till vilka fysiska pinnar på fpgan.
I ditt fall med lysdioden på ML401 får man titta antigen på ritningen eller i dokumentationen vilken pinne som lysdioden är kopplad mot.
Pinnarna döps typ "AA1" etc. I tutorial-filerna finns säkert med ucf filer som du kan titta i.
En annan viktig sak som oftast görs i ".ucf" filen (som visserligen går att göra inifrån vhdlkoden) är att sätta I/O-typ, dvs om vilken typ av signaler som porten ska använda sig av (LVTTL, LVDS etc)
Fortsätt labba, lovar att det är kul... Jag var helt grön för ett par år sedan men nu gör jag en del ganska fräsiga saker med fpga. (kört med spartan-3, virtex-4 och har fått hem en ML501 med virtex 5 som jag inte hunnit lattja med än)
I ditt fall med lysdioden på ML401 får man titta antigen på ritningen eller i dokumentationen vilken pinne som lysdioden är kopplad mot.
Pinnarna döps typ "AA1" etc. I tutorial-filerna finns säkert med ucf filer som du kan titta i.
En annan viktig sak som oftast görs i ".ucf" filen (som visserligen går att göra inifrån vhdlkoden) är att sätta I/O-typ, dvs om vilken typ av signaler som porten ska använda sig av (LVTTL, LVDS etc)
Fortsätt labba, lovar att det är kul... Jag var helt grön för ett par år sedan men nu gör jag en del ganska fräsiga saker med fpga. (kört med spartan-3, virtex-4 och har fått hem en ML501 med virtex 5 som jag inte hunnit lattja med än)
Om du kör impact direkt mot fpgan så förstör du inte demo-materialet....
När det gäller FX20 så verkar det enl denna sida som om gratisversionen av ISE (Webpack) inte stödjer den.
Det ställer till det en del för dig för då måste du ha ISE foundation (den skarpa versionen) för att kunna generera bit-filen till FX20.
När det gäller FX20 så verkar det enl denna sida som om gratisversionen av ISE (Webpack) inte stödjer den.
Det ställer till det en del för dig för då måste du ha ISE foundation (den skarpa versionen) för att kunna generera bit-filen till FX20.
Jag vill ju inte riktigt köra i 50MHz, skrev ihop den här koden, kommer den funka?
Hur kopplar jag ihop olika funktioner med varandra? Ingång till funktionen ovan är ju den vanliga 50MHz-klockan, men ingången på min blinkare vill jag ju ska vara utgången från funktionen ovan. Hur gör jag det?
Kod: Markera allt
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity c1hz is
port( clk:in bit; clkout:out bit);
end c1hz;
architecture behavior of c1hz is
begin
process(clk)
variable cnt : integer range 0 to 50000000;
begin
if (clk'event and clk='1') then
if (cnt=50000000) then
cnt:=0;
clkout<='1';
else if (cnt=25000000) then
clkout<='0';
else
cnt := cnt+1;
end if;
end if;
end process;
end behavior;