Dobbelt kant counter i VHDL?

M

Mehdi1357

Guest
Hej everbody Hvordan kan skrive en proces i VHDL for dobbelt kant tæller (counter øger sin værdi, hver gang en stigende eller faldende flanke forekommer)? tak
 
Du bliver nødt til at have 2 tællere, en, der arbejder på Ive kant, og de andre, der arbejder på + Ive kant. Hver Tælleren øg tælle med 2. Man vil starte med 0 de andre starter med 1. Du kan derefter multiplx o / p-værdi som ønsket. kr, Avi
 
Hej Jeg sætter pris på din answer.is der en mere enkel løsning til behandling af begge kanter af et input-signal i en proces block.please Skriv VHDL kode. venlig hilsen.
 
Nej der er ingen enkle svar eller en metode til at gøre dette i et enkelt retsplejelov, som vil blive synthesizeable Kr., Avi
 
Dit spørgsmål er meget enkelt. Hvis det signal, du vil tælle, er et ur ganske enkelt din kode vil være noget som dette: proces (reset, CLK). påbegyndes, hvis reset = '1 'og derefter counter '0'); elsif clk'event så counter
 
Ja, men denne kode er IKKE synthesisable. Der er ingen hardware FF, der understøtter dette.
 
Værktøjet vil fortælle dette er impoosible at deltage i et FF i design og resultere i fejl
 
[Quote = mmarco76] Dit spørgsmål er meget enkelt. Hvis det signal, du vil tælle, er et ur ganske enkelt din kode vil være noget som dette: proces (reset, CLK). påbegyndes, hvis reset = '1 'og derefter counter '0'); elsif clk'event så counter
 
[Quote = Mehdi1357] Hej everbody Hvordan kan skrive en proces i VHDL for dobbelt kant tæller (counter øger sin værdi, hver gang en stigende eller faldende flanke forekommer)? tak [/quote] det er ikke den synthesizer, det er målet kig på denne enkle kode: (undskyld, jeg er en Verilog fyr) altid @ (posedge CLK eller negedge CLK) x = x + 1; Det er synthesizable og det gør arbejde i nogle CPLD er ligesom XC2Sxx (Texas) Målet du peger på synthesizer skal have dobbelt-kant support.
 
Hej Dette er og gamle tråd, men denne opdatering kan hjælpe nogen. Jeg har brugt kun en tæller, der stiger med 2 på faldende kanten af ​​CLK. Når uret = 1 outputtet er modværdien eller 1, hvis ikke så outputtet er tælleren værdi. Jeg formoder, at det er drevet af et 0-1-0-1-0 ur, hvis ikke du kan også tjekke for ur = 0.
Code:
 bibliotek IEEE, brug IEEE.STD_LOGIC_1164.ALL, brug IEEE.STD_LOGIC_ARITH.ALL, brug IEEE.STD_LOGIC_UNSIGNED.ALL; enhed dual_edge_counter er port (CLK: i std_logic; output: ud std_logic_vector (7 downto 0)); ende dual_edge_counter ; arkitektur Strukturelle af dual_edge_counter er signal tæller: std_logic_vector (7 downto 0): = (andre => '0 '); begynde processen (CLK) begynder if (clk'event og CLK = '0'), så tæller
 
Hej. Jeg brugte et flag: variabel ClkFlag: std_logic: = '0 '; min proces omfatter kun uret i sin følsomhed listen: proces (CLK) derefter hver gang processen kører flaget skiftes: ClkFlag: = ikke ClkFlag; Koden for stigende og faldende er vælges i henhold til flag, hvis ClkFlag = '0 'så ClkFlag: = ikke ClkFlag; .... ellers ClkFlag: = ikke ClkFlag; ..... end if;
 
"Dual kanten counter" lyder rart og selvfølgelig ser det fint i funktionel simulering. Praktisk, din bare supplere uret signal som LSB til en binær tæller. Men tællerudgang er samlet asynkront, er tælleren bits forsinkede relateret til clock-signal. Uden prøvetagning resultatet på det rigtige tidspunkt vil det ikke være gyldig. Så der kan være tvivl, hvis løsningen rent faktisk tjener et formål.
 

Welcome to EDABoard.com

Sponsor

Back
Top