Hvorfor kan jeg ikke få riktig skranke?

S

staraimm

Guest
Hei,

Jeg skrev koden som følgende, og jeg satt den ved hjelp av qu (at) rtus II.

modul edgectrl (clk, CLR, no, outnum);
input CLK, CLR, no;
output [7:0] outnum;
reg [7:0] outnum;

alltid @ (posedge clk eller negedge CLR)
begynne
if (~ CLR)
begynne
if (~ en)
outnum <= 0;
ellers
outnum <= outnum 8'h1;
slutt
ellers
outnum <= 0;
slutt
endmodule

Men jeg kan ikke få corrct telleren, er resultatet i vedlegget.Kan noen fortelle meg hvorfor?
Beklager, men du må logge inn for å vise dette vedlegget

 
Prøv dette:

Code:modul edgectrl (clk, CLR, no, outnum);

input CLK, CLR, no;

output [7:0] outnum;

reg [7:0] outnum;alltid @ (posedge clk eller negedge CLR eller no)

begynne

hvis CLR (== 1'b0)

outnum = 0;

ellers

if (no 1'b1 ==)

outnum = outnum 8'h1;

slutt

endmodule
 
Jeg tror uttrykket "alltid @ (posedge clk eller negedge CLR eller no) er ikke tillatt.

 
Hvorfor ikke?
Det kjører, og det gjør det du trenger.

 
Hva kompilatoren bruker du?Jeg bruker qu (at) rtus II og den rapporterer feil:
Feil (10122): Verilog HDL Event Control volatilitet ved edgectrl.v (6): blandet enkel-og dobbel-edge uttrykk er ikke støttet.

 
Ahh, ok.
Så fjern "eller en" Jeg har satt denne til å gjøre simuleringen raskere.

 
Hei staraimm, den opprinnelige 'CLR' polaritet og 'no' logikk er noe forvirret.Prøv dette:
Code:

module topp (clk, CLR, no, outnum);

input CLK, CLR, no;

output reg [7:0] outnum;alltid @ (posedge clk eller posedge CLR) begin

if (CLR)

outnum <= 0;

ellers

outnum <= outnum no;

slutt

endmodule
 
blanding av kanten trigerred og nivå trigerred ikke tillatt.ikke synthesisable

 
Jeg ønsker å realisere telleren drived av CLK signalet og ryddet av CLR signalet.

Den bølgeform er noe som følger.
Beklager, men du må logge inn for å vise dette vedlegget

 
Hei staraimm, JPEG diagrammer ikke viser tydelig hvordan du vil at telleren skal oppføre seg.De viser ikke ønsket utgangssignaler.Når jeg så på result.jpg, antok jeg at 'CLR' er en aktiv høy asynkron reset, og 'no' er en synkron teller stand, men samplewave.jpg antyder noe annet.

 
Den bølgeform i samplewave.jpg uttrykker det jeg virkelig vil.På den positive kanten av CLR signalet, telleren ryddet til 0.Og på hver positive kanten av CLK signalet, må telleren være lagt til av 1.

Koden følger som ikke kan arbeide, fordi alle hendelsene skje når CLR signalet er høy.

alltid @ (posedge clk eller posedge CLR)
begynne
....
slutt

hei, Echo47, kan du fortelle meg hvor å realisere den?

 
hvis du ønsker en asynkron reset / synkron aktiverer counter
alltid S (posedeg clk eller posedge CLR)

begynne

if (CLR)

counter <= 0;

else if (no)

counter <= teller 1'b1;

slutthvis du vil synkron tilbakestille / synkron aktiverer counter
alltid s (posedge clk)

begynne

if (CLR)

counter <= 0;

else if (no)

counter <= teller 1'b1;

slutt
 
Hei staraimm,

Du ønsker å tømme teller i positiv kanten av CLR og øke på den positive enden av klokken.Right?.Etter den positive enden av CLR du ikke restarter "CLR" og det er alltid høy.Inside din alltid blokk du fjerne telleren når CLR er høy og den har høyeste prioritet.Så når du alltid blokkere startes produksjon av disken vil alltid være null.Du må sette clr signal til lav når telleren er nullstilt.Din counter vil fungere fint.

Cheers :)

 
Hvis du virkelig ønsker et stigende-kant-utløst tydelig (og ikke bare en aktiv-høy klart eller synkron klart), så du kan være i vanskeligheter fordi tiden tilgjengelige FPGA er ikke designet for å iverksette tellere med flere klokker.Jeg antar at du kan bygge en asynkron ett skudd som konverterer stigende kanten av CLR inn i en trang asynkron klar puls, men det ville være dårlig design praksis.En bedre løsning er å bruke en aktiv høy klart, eller enda bedre revurdere din generelle design å gjøre alt synkron til klokken.

 
Hei Echo,
som du sa, "bygge en asynkron ett skudd som konverterer stigende kanten av CLR inn i en trang asynkron klar puls, men det ville være dårlig design praksis."

Kan du vennligst forklare meg hvordan å bygge asynkrone ett skudd og hvorfor det er en dårlig design praksis?

Takk,

 
Hei, alle sammen.Glad for å få alle svar.

Men CLR og no signaler ikke kan kontrolleres av designen min og jeg bare kan bruke dem.

For å realisere telleren, bruker jeg koden som følger.

wire tmpclk = clr & (~ no);

alltid @ (posedge clk eller posedge tmpclk)
begynne
if (tmpclk)
count <= 0;
ellers
count <= count - 1;
slutt

Men hvis så, bruker jeg gated tmpclk og jeg lærte at det ikke er perfekt å bruke gated clk.

 
Hei staraimm, hvis dette var min prosjektet, vil jeg prøve å bygge en fullstendig synkrone design, kanskje ved hjelp av en høyere frekvens klokke.Men jeg vet ikke nok om prosjektets input-output timing krav til å foreslå en tilfredsstillende løsning.Prøv surfing på Altera papirene at jeg har linket nedenfor - kanskje de vil hjelpe deg å lage en god løsning.

Hei xstal, er det flere måter å bygge ett skudd (smal puls generator), men alle disse metodene er asynkrone og stole på enhetens forplantning forsinkelser, og er derfor ikke anbefalt for FPGA design.

Bad metoden # 1: Bruk en OG-port med en langsom inverter.Output = Input OG Delayed_Inverted_Input.Utdata vil pulsen høy svært kort, avhengig av omformeren's propagation delay pluss netto forsinkelse.(Husk, dette er ikke anbefalt.)

Bad metode # 2: Bruk en langsom D-flopp som nullstiller seg selv.Koble inngang til floppen klokke.Tie sin D-inngang høy.Koble Q til floppen er asynkron reset.Q produksjonen vil pulsen høy svært kort, avhengig floppen's propagation delay pluss tilbakestille netto forsinkelsen.(Husk, dette er ikke anbefalt.)

Vi diskuterer en Altera prosjekt, så for mer forklaring på god versus dårlig design praksis, se denne @ ltera papiret: "Design Retningslinjer for optimale resultater i FPGA"
http://www.altera.com/literature/cp/fpgas-optimal-results-396.pdf
eller denne fra qu (at) rtus håndbok: "Design Anbefalinger for @ ltera Devices"
http://www.altera.com/literature/hb/qts/qts_qii51006.pdf

 
Hei der,
Jeg har nettopp begynt å utforske den "vidunderlige"

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

verden av HDL, så jeg er ingen ekspert.
Kanskje det er en løsning på problemet ditt:
Code:

modul edgectrl (clk, CLR, no, outnum);

input CLK, CLR, no;

output [7:0] outnum;

reg [7:0] outnum;

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

clr_next_clr = clr_next_clr_dly;alltid @ (posedge clk)

begynne

clr_next_clr_dly = clr_next;

if (clr_next)

outnum = 0;

ellers

if (no)

outnum = outnum 1;

sluttalltid @ (posedge clr eller posedge clr_next_clr)

if (clr_next_clr) clr_next = 0;

else clr_next = 1;endmodule
 

Welcome to EDABoard.com

Sponsor

Back
Top