Waarom ik niet kan krijgen van de juiste teller?

S

staraimm

Guest
Hoi,

Ik schreef de code als de volgende, en ik samengesteld met behulp van qu (at) rtus II.

module edgectrl (CLK, CLR, nl, outnum);
input CLK, CLR, en;
output [7:0] outnum;
reg [7:0] outnum;

altijd @ (posedge CLK of negedge CLR)
beginnen
if (~ CLR)
beginnen
if (~ en)
outnum <= 0;
anders
outnum <= outnum 8'h1;
eindigen
anders
outnum <= 0;
eindigen
endmodule

Maar ik kan niet krijgen corrct teller, is het resultaat in de bijlage.Kan iemand mij vertellen waarom?
Sorry, maar je moet inloggen om deze gehechtheid

 
Probeer dit:

Code:module edgectrl (CLK, CLR, nl, outnum);

input CLK, CLR, en;

output [7:0] outnum;

reg [7:0] outnum;altijd @ (posedge CLK of negedge clr of nl)

beginnen

if (CLR == 1'b0)

outnum = 0;

anders

if (nl == 1'b1)

outnum = outnum 8'h1;

eindigen

endmodule
 
Ik denk dat de uitdrukking "altijd @ (posedge CLK of negedge clr of nl)" is niet toegestaan.

 
Wat compiler gebruik je?Ik gebruik de qu (at) rtus II en hij rapporteert fout:
Fout (10122): Verilog HDL Event Control fout bij edgectrl.v (6): gemengde single-en double-edge uitdrukkingen worden niet ondersteund.

 
Ahh, ok.
Verwijder vervolgens "of en" ik heb om dit te simulatie sneller te maken.

 
Hi staraimm, polariteit uw oorspronkelijke 'clr' en 'en' logica zijn enigszins verward.Probeer dit:
Code:

module top (CLK, CLR, en, outnum);

input CLK, CLR, en;

output reg [7:0] outnum;altijd @ (posedge CLK of posedge CLR) beginnen

if (CLR)

outnum <= 0;

anders

outnum <= outnum nl;

eindigen

endmodule
 
vermenging van rand trigerred en niveau trigerred niet toegestaan.niet synthesisable

 
Ik wil realiseren de teller drived door de CLK-signaal en goedgekeurd door de CLR signaal.

De golfvorm is iets als volgt.
Sorry, maar je moet inloggen om deze gehechtheid

 
Hi staraimm, uw jpeg diagrammen niet duidelijk laten zien hoe u wilt dat de teller te gedragen.Ze tonen niet de gewenste output signalen.Toen ik keek result.jpg, veronderstelde ik dat "clr" is een actieve hoge asynchrone reset, en 'nl' is een synchroon telling mogelijk te maken, maar samplewave.jpg suggereert iets anders.

 
De golfvorm in de samplewave.jpg uitdrukt wat ik echt wil.Aan de positieve kant van de CLR-signaal, wordt de teller gewist op 0.En op de rand van elk positief signaal moet de CLK, de teller worden toegevoegd door 1.

De code als volgt kan niet werken, omdat alle gebeurtenissen gebeuren wanneer de CLR signaal is hoog.

altijd @ (posedge CLK of posedge CLR)
beginnen
....
eindigen

hi, Echo47, kunt u mij vertellen hoe dit te realiseren?

 
als je een asynchrone reset / synchroon mogelijk teller
altijd s (posedeg CLK of posedge CLR)

beginnen

if (CLR)

counter <= 0;

else if (nl)

counter <= counter 1'b1;

eindigenAls u wilt synchrone reset / synchroon mogelijk teller
altijd S (posedge clk)

beginnen

if (CLR)

counter <= 0;

else if (nl)

counter <= counter 1'b1;

eindigen
 
Hi staraimm,

U wilt uw teller duidelijk over de positieve rand van de CLR en de toename aan de positieve kant van de klok.Right?.Na de positieve kant van clr u niet resetten "CLR" en het is altijd hoog.Binnen je je altijd blok zijn de goedkeuring van de teller bij de CLR is hoog en het heeft de hoogste prioriteit.Dus als je altijd blok wordt ingeroepen uitgang van de teller zal altijd nul.Je moet je clr signaal zetten naar laag zodra de teller gereset wordt.Uw teller zal prima werken.

Cheers :)

 
Als je echt wilt dat een stijgende-edge-triggered duidelijk (en niet alleen een actieve hoge duidelijk of synchrone duidelijk), dan u misschien in de problemen omdat de thans beschikbare FPGA's niet zijn ontworpen om tellers te voeren met meerdere klokken.Ik veronderstel dat je kon bouwen een asynchrone one-shot dat de stijgende flank van CLR omzet in een smalle asynchrone duidelijk pols, maar dat zou slecht ontwerp praktijk.Een betere oplossing is het gebruik van een actief-high duidelijk, of beter nog nadenken over uw algehele ontwerp om alles synchroon om de klok te maken.

 
Hi Echo,
zoals u zei, "Bouw een asynchrone one-shot dat de stijgende flank van CLR omzet in een smalle asynchrone duidelijk pols, maar dat zou slecht ontwerp praktijk."

Kunt u me uitleggen hoe te bouwen asynchrone one-shot en waarom het een slecht ontwerp praktijk?

Bedankt,

 
Hallo, iedereen.Blij om al je antwoord krijgt.

Maar de CLR en en signalen niet kunnen worden gecontroleerd door mijn ontwerp en ik kan ze gebruiken.

Met het oog op de teller realiseren, gebruik ik de code als volgt.

draad tmpclk = clr & (~ en);

altijd @ (posedge CLK of posedge tmpclk)
beginnen
if (tmpclk)
count <= 0;
anders
count <= count - 1;
eindigen

Maar zo ja, gebruik ik de gated tmpclk en ik heb geleerd dat het niet perfect om de gated CLK gebruik.

 
Hi staraimm, indien dit was mijn project, zou ik proberen om een volledig synchrone ontwerpen te bouwen, wellicht met behulp van een hogere frequentie klok.Toch heb ik niet genoeg weet over de inbreng van uw project-output timing eisen een bevredigende oplossing te suggereren.Probeer het surfen op het Altera papieren die ik heb hieronder verbonden - misschien zullen ze voor u een goede oplossing.

Hi xstal, er zijn verschillende manieren om een one-shot (smalle puls generator) te bouwen, maar al deze methoden zijn asynchrone en vertrouwen op de verspreiding van het apparaat vertragingen, en worden daarom niet aanbevolen voor FPGA ontwerp.

Bad methode # 1: gebruik een AND-poort met een langzame omvormer.Input en output = Delayed_Inverted_Input.De productie zal puls hoog heel kort, afhankelijk van de verspreiding van de omvormer vertraging plus de netto vertraging.(Denk eraan, dit is niet aanbevolen.)

Bad methode # 2: gebruik een langzame D-flop die reset zichzelf.Sluit de klok Input voor de flop's.Tie haar D-ingang hoog.Sluit Q om asynchrone reset de flop's.De Q-uitgang zal een hoge polsslag heel kort, afhankelijk van de propagatie de flop van vertraging, vermeerderd met de netto-reset vertraging.(Denk eraan, dit is niet aanbevolen.)

We hebben het over een Altera project, dus voor meer uitleg van goed versus slecht ontwerp praktijken te verwijzen naar dit @ ltera papier: "Ontwerp Richtsnoeren voor optimale resultaten in de FPGA's"
http://www.altera.com/literature/cp/fpgas-optimal-results-396.pdf
of dit een van de qu (at) rtus handboek: "Design Aanbevelingen voor @ ltera Devices"
http://www.altera.com/literature/hb/qts/qts_qii51006.pdf

 
Hi there,
Ik ben begonnen met het verkennen van de "prachtige"

<img src="http://www.edaboard.com/images/smiles/icon_rolleyes.gif" alt="Rolling Eyes" border="0" />

wereld van HDLs, dus ik ben geen expert.
Misschien is dat een oplossing voor uw probleem:
Code:

module edgectrl (CLK, CLR, nl, outnum);

input CLK, CLR, en;

output [7:0] outnum;

reg [7:0] outnum;

reg clr_next, clr_next_clr, clr_next_clr_dly;altijd @ (negedge clk)

clr_next_clr = clr_next_clr_dly;altijd @ (posedge clk)

beginnen

clr_next_clr_dly = clr_next;

if (clr_next)

outnum = 0;

anders

if (nl)

outnum = outnum 1;

eindigenaltijd @ (posedge clr of posedge clr_next_clr)

if (clr_next_clr) clr_next = 0;

anders clr_next = 1;endmodule
 

Welcome to EDABoard.com

Sponsor

Back
Top