Please help .... metode til at forbinde et output i en VHDL modul

L

LF_LF

Guest
Hey, alle sammen. Jeg konstruere en VHDL kode for clock divider og specifikation af 2 ben. Jeg har brug for at udløse 2 ben ved hjælp af DE2 bord for 1 taktcyklus (auto aftrækkeren ned selv efter 1 taktcyklus). Men jeg har ingen idé om, hvordan man konverterer, at produktionen af ​​mit ur divider for uret i min pin specifikation. Kan nogen venligst hjælpe mig? Mit ur divider konvertere 27 MHz til 500 kHz og jeg har brug for at udløse disse 2 pins (knapper fra DE2 board) ved hjælp af 500 kHz. Min kode for PIN-specifikationen er: proces (clkin) --- Jeg tror mit problem er her! påbegyndes, hvis A0 = '1 'og (rising_edge (clkin)) så A0_out
 
hvor du ønsker at bruge uret??? Hvis du bruger en FPGA anvende DCM (xillinx) eller PLL (andet) til denne form for opdeling, vil klar kerne være der for opdeling ..... fordi du ikke kommer til at få nøjagtige 500k ved division.
 
Jeg har brug for at synkroniserer uret i min DE2 bord (Altera) fra 27MHz til min ADC (ADS7861 - 500 kHz). Som jeg har brug for at kontrollere ADC, derfor jeg er blevet bedt om at bygget et VHDL kode i DE2 bord og opretter forbindelse til ADC til test. Ifølge databladet for ADC, har brug for to indgange til at udløse for 1 taktcyklus kun, derfor prøvede jeg at konstruere kode til at gøre det udløse tilbage efter 1 taktcyklus selv. Da det er min første gang bruger DE2 bord, jeg har ingen idé om hvilken funktion det har for det pågældende board (selvfølgelig kender jeg chips og deres funktioner i henhold til brugervejledning). Jeg har ingen idé om PLL og DCM.Can nogen kort forklare de procedurer, eller kan nogen vise mig et link eller dokumentation?
 
Problemet er meget uklar. Du behøver ikke sige, hvor ADC input uret kommer fra, hvorfor du vil bruge 27 MHz FPGA-ur, og som ADC signal du wan at synkronisere. Jeg tror, ​​problemet er at læse ADC serielle data, det skal udføres på 8 MHz bit ur. For at skrive VHDL kode, henvises til grundlæggende struktur regler i litteratur eller f.eks Altera Q.uartus VHDL skabeloner. Indlejrede rising_edge () udtryk sikkert ikke vil resultere i, hvad du forsøger at opnå.
 
Nå, er min ADC input clock kommer fra Altera DE2 bord. Den Altera DE2 Bestyrelsen har 3 ur input, som er 27MHz, 50MHz og SMA eksterne clock input. Derfor har jeg brug 27MHz. (Godt jeg ikke vælge ekstern clock input skyldes kompleksiteten af ​​bygningens anden clock generator) ADC er angivet til at have 500 kHz i henhold til datablad. Derfor har jeg forsøgt at synkronisere eller konvertere 27 MHz til 500 kHz. Nå, om de 8MHz du nævnt om, erklærede det er det eksterne clock, Valgfri 8MHz men ifølge pin beskrivelse, staten det dette ur pin styre samplingfrekvens ved ligning Clock = 16 * f (prøve ).... Nå, jeg gisiske de 16 * (500 kHz) = 8MHz. Så er, at jeg misforstået, at jeg skal levere 8 Mhz til ADC på uret pin i stedet for 500 kHz? Undskyld, jeg er lidt forvirret. Om koden, tror jeg, at jeg nødt til at referere tilbage som jeg bare en newbie til dette sprog programmering.
 
Hvis du ønsker at opnå 500 KS / s hastighed, er du nødt til at levere 8 MHz til ADC. Det er mest let at køre ADC data receiption på 8 MHz eller et multiplum af det (fx 16 eller 32 MHz), afhænger af, hvor uret bruges i dit FPGA-design. For at generere præcis denne frekvens, er du nødt til at bruge en PLL MegaFunction.
 
Tak for FVM. For uret. Jeg ved, hvordan de kan videregive output af taktcyklus til næste proces i forvejen. (jeg læser MegaFubction PLL og jeg vil prøve det senere) Men jeg står på aftrækkeren problemet. Jeg forsøgte at bruge tælleren til at udløse det 0 efter 1 Clock-cyklus, men det virker ikke (selv jeg kan stimulere det med succes for VHDL kode, men det viser konstant til 1 uden at udløse tilbage til 0 i bølgeform stimulation) Min kode er: + + + ovenfor, er uret divider koder, som er i samme arkitektur processen (CLK) påbegyndes, hvis reset = '1 'og derefter A0_out
 
Jeg er bange, er du nødt til at gå flere skridt tilbage og lære, hvordan VHDL værker. Det er en hardware beskrivelse sprog , forskellig fra en proceduremæssig programmeringssprog som C. Et signal opgave fx bliver effektiv efter den aktuelle ur kant. Det kan være nemmere at tænke på den nødvendige logik som en hardware kredsløb og fremstilles af logiske gates, flip flops, tællere og skift registre.
 
proces (CLK)
Du har en reset-signal. bruge "proces (CLK, reset)" kan være bedre.
elsif (rising_edge (MUX) og A0 = '1 ') og derefter
Den korrekte måde at skrive det: elsif (clk'event og CLK = '1') og derefter, og nogle bits i dit VHDL-program har brug for skal ændres så godt.
 
Tak til alle. Jeg har oprette en gang siden den sidste 1 cant blive brugt Jeg fik bølgeform denne gang. Men med hensyn til counter af convst, jeg står over for et problem. Jeg har brug for at generere pulser hver 16 clock cyklusser, men det viser mig 17 ur cyklusser. Kan nogen hjælpe mig tage et kig til dette. Jeg har prøvet at antallet af clock cyklusser, jeg angav (ved trial and error). Det viser også den forkerte bølgeform BIBLIOTEK IEEE, brug IEEE.std_logic_1164.all, brug IEEE.std_logic_arith.all, brug IEEE.std_logic_unsigned.all, BIBLIOTEK arbejde enhed siggen er port (clkin: i std_logic; reset: I std_logic; convst: ud std_logic; A0: ud std_logic); slutningen siggen, arkitektur FPGA af siggen er signal count1: heltal mellem 0 og 2; signal count2: heltal fra 0 til 15, begynder processen (clkin) påbegyndes, hvis reset = '1 'og derefter convst
 
Du tæller 17 stater, 1 staten for count1 = 0 og 16 stater for count2 = 0 .. 15. Jeg kan ikke se formålet med at bruge to tællere. Blot har en (tælle 0 .. 15), og udnytte alle handlinger fra det værdi. Du ønsker måske at use case konstruerer eller hvis udsagn, som du vil. Som en debugging tip: Du kan vise interne signaler (f.eks counter værdier) i simulatoren. Du kan også bruge Q.uartus SignalTap II til at udføre hardware fejlfinding af dit kredsløb. Særlig interessant, når interfacing en rigtig ADC. PS: Jeg kan se, at du kører den timing simulation ved 100 MHz. Du bør i højere grad bruge 8 MHz som krævet af chippen og også være opmærksom på den nødvendige setup og hold tider. Det anbefales at indstille CONVST på den faldende frem for stigende input-ur kant.
 
Tak FVM. For 100MHz, bare jeg simpelthen brugt til test formål. For 8MHz er det 16 * 500 kHz. Men kredsløbet før ADC (Connection: motor - strømtransduceren - instrumentering amp - ADC - DE2) er 50Hz. Til denne beregning er det jeg har brug for at tage sig af curcuit, før der er 50 Hz (f prøve)? Hvis du bruger 50Hz, det er 800Hz kun. Fra diagno, ses det som convst aftrækkeren på falling_edge selv jeg skrev rising_edge i min kode. Er det på grund af ur forsinkelse? Er det en metode / funktion i Q'tus kan eliminere forsinkelse? Hm, en mere. Kan nogen give mig de skridt til at sammenkoble 2 gader fra forskellige VHDL-fil? Jeg ved, hvordan du opretter en blok efter online-bruger tut, men det gjorde ikke lade mig vide, hvordan kan jeg input den blok, der er gemt i forskellige fil. Jeg prøvede at kopiere blok og indsæt det, men det kan ikke finde filen, når jeg vil åbne koden fra blok. (Jeg forsøgte også at gennemse fra "Indsæt symbol ved at dobbeltklikke på diagrammet, men også kan ikke finde filen) Tak på forhånd.
 
Med hensyn til prøveudtagning satser, hvis indgangssignalet er 50 Hz (mest sandsynligt AC), kan du ønsker at prøve det på et betydeligt højere sats til fx beregne RMS, harmoniske, whatsover. Det er et andet emne ikke er direkte relateret til grundlæggende ADC-FPGA-interface kode, tror jeg. Hvis du kun brug for 50 Hz (eller muligvis 1 kHz) samplingfrekvens, ville du bruge en anden ADC type. Ja, der er en ca 5 ns ur til output forsinkelse med standard FPGA. Men hvis du kilden ADC CLK og CONVST fra FPGA, den relative forsinkelsen er mindre. På et forholdsvis lille clock frekvens på 8 MHz, skal tidspunktet arbejde at udnytte systematisk FPGA adfærd omgående justering. Valg af stigende eller faldende ur kant er mest sandsynligt tilstrækkelig. Arbejde med komponenter og tilfælde er et emne af VHDL lærebøger, der er en masse derude.
 

Welcome to EDABoard.com

Sponsor

Back
Top