Bakit hindi ko makuha ang tamang counter?

S

staraimm

Guest
Hi,

Ako wrote ang code bilang ang mga sumusunod, at ako naipon ito gamit qu (sa) rtus II.

module edgectrl (clk, clr, en, outnum);
input clk, clr, en;
output [7:0] outnum;
reg [7:0] outnum;

laging @ (posedge clk o negedge clr)
simulan
kung (~ clr)
simulan
kung (~ en)
outnum <= 0;
kung hindi
outnum <= outnum 8'h1;
wakasan
kung hindi
outnum <= 0;
wakasan
endmodule

Pero hindi ko makuha ang corrct counter, ang resulta ay sa attachment.Maaari kahit sino sabihin sa akin kung bakit?
Paumanhin, ngunit kailangan mong mag-login in upang makita ang attachment na ito

 
Subukan na ito:

Code:module edgectrl (clk, clr, en, outnum);

input clk, clr, en;

output [7:0] outnum;

reg [7:0] outnum;laging @ (posedge clk o negedge clr o en)

simulan

kung (clr == 1'b0)

outnum = 0;

kung hindi

kung (en == 1'b1)

outnum = outnum 8'h1;

wakasan

endmodule
 
Sa tingin ko ang mga expression na "palaging @ (posedge clk o negedge clr o en)" ay hindi pinahihintulutan.

 
Bakit hindi?
Ito ay tumatakbo, at ito ay kung ano ang kailangan mo.

 
Ano ang compiler mo gamitin?Gamitin ko ang mga qu (sa) rtus II at mga ulat ng error:
Error (10122): Verilog HDL Kaganapan Control error sa edgectrl.v (6): mixed single-at-double gilid expression ay hindi suportado.

 
Ahh, ok.
Pagkatapos tanggalin "o en" ako ay may ilagay na ito na gumawa ng kunwa mas mabilis.

 
Hi staraimm, polarity ang iyong orihinal na 'clr' at 'en' lohika ay medyo confused.Subukan na ito:
Code:

module itaas (clk, clr, en, outnum);

input clk, clr, en;

output reg [7:0] outnum;laging @ (posedge clk o posedge clr) magsisimula

kung (clr)

outnum <= 0;

kung hindi

outnum <= outnum en;

wakasan

endmodule
 
paghahalo ng mga gilid trigerred at antas trigerred hindi pinahihintulutan.hindi synthesisable

 
Gusto kong napagtanto ang counter drived ng clk signal at nabura ng clr signal.

Waveform ay isang bagay na tulad ng sumusunod.
Paumanhin, ngunit kailangan mong mag-login in upang makita ang attachment na ito

 
Hi staraimm, ang iyong mga jpeg diagram hindi malinaw na nagpapakita kung paano nais mong counter upang kumilos.Hindi nila ipakita ang iyong nais na signal na output.Kapag ako ay tumingin sa result.jpg, ako ay ipinapalagay na ang 'clr' ay isang aktibong mataas asynchronous i-reset, at 'en' ay isang kasabay count paganahin ang, ngunit samplewave.jpg nagmumungkahi ng isang bagay na naiiba.

 
Ang waveform sa samplewave.jpg expresses ko kung ano ang talagang gusto.Sa positibong gilid ng clr signal, counter ay nabura sa 0.At sa bawat positibong gilid ng clk signal, counter ang dapat idagdag sa pamamagitan ng 1.

Ang code ay ang mga sumusunod ay hindi maaaring magtrabaho, dahil ang lahat ng mga kaganapan sa mangyayari kapag ang mga clr signal ay mataas.

laging @ (posedge clk o posedge clr)
simulan
....
wakasan

hi, Echo47, maaari mong sabihin sa akin kung paano napagtanto ito?

 
kung nais mo ang isang asynchronous reset / kasabay paganahin ang counter
lagi s (posedeg clk o posedge clr)

simulan

kung (clr)

counter <= 0;

kung sino pa ang paririto (en)

counter <= counter 1'b1;

wakasankung gusto mong i-reset ang kasabay / kasabay paganahin ang counter
lagi s (posedge clk)

simulan

kung (clr)

counter <= 0;

kung sino pa ang paririto (en)

counter <= counter 1'b1;

wakasan
 
Hi staraimm,

Gusto mong alisin ang iyong mga counter sa positibong gilid ng clr at pagdami sa positibong gilid ng orasan.Right?.Pagkatapos ng positibong gilid ng clr ikaw ay hindi reset "clr" at ito ay laging mataas.Sa loob ng iyong laging block kayo ay lumiliwanag ang counter kapag clr ay mataas na at ito ay may pinakamataas na priority.Kaya tuwing ang iyong laging block ay mahihingi output ng counter ay laging zero.Kailangan mong ilagay ang iyong mga clr signal sa mababang minsan sa counter ay i-reset.Ang iyong counter gagana pagmultahin.

Cheers :)

 
Kung talagang gusto ng isang sumisikat-gilid-na-trigger malinaw (at hindi lamang ng isang aktibong-mataas na malinaw o kasabay malinaw), pagkatapos ikaw ay maaaring maging sa problema dahil magagamit FPGAs ay hindi ginawa upang ipatupad counter na may maramihang clocks.Kunwari ako maaari kang bumuo ng isang asynchronous one-shot na nagpalit ng pagsikat gilid ng clr sa isang makipot na asynchronous malinaw pulso, ngunit na magiging mahirap na disenyo kaugalian.Ang isang mas mahusay na solusyon ay ang paggamit ng isang aktibong-mataas na malinaw, o mas mabuti pa umisip na muli sa iyong pangkalahatang disenyo upang gumawa ng lahat ng kasabay sa orasan.

 
Hi Echo,
tulad ng sinabi mo, "magtayo ng isang asynchronous one-shot na nagpalit ng pagsikat gilid ng clr sa isang makipot na asynchronous malinaw pulso, ngunit na magiging mahirap na disenyo pagsasanay."

Maaari ninyo bang ipaliwanag sa akin kung paano bumuo ng asynchronous isa-shot at kung bakit ito ay isang mahirap na kasanayan na disenyo?

Salamat,

 
Hi, everyone.Natutuwa upang makakuha ng lahat ng iyong mga sagot.

Ngunit ang clr at en signal ay hindi kontrolado ng aking mga disenyo at ako lamang ang maaaring gamitin ang mga ito.

Upang mapagtanto ang counter, gamitin ko ang mga code na tulad ng sumusunod.

kawad tmpclk = & clr (~ en);

laging @ (posedge clk o posedge tmpclk)
simulan
kung (tmpclk)
count <= 0;
kung hindi
count <= count - 1;
wakasan

Subalit kung sa gayon, gamitin ko ang gated tmpclk at ako ay natutunan na ito ay hindi ganap na gamitin ang gated clk.

 
Hi staraimm, kung ito ay ang aking proyekto, nais kong subukan na bumuo ng isang ganap na kasabay disenyo, marahil sa pamamagitan ng paggamit ng isang mas mataas-dalas ng orasan.Subalit hindi ko alam kung sapat na ang tungkol sa iyong input proyekto's-output kinakailangan tiyempo sa iminumungkahi ng isang kasiya-siya solusyon.Subukan ang nagba-browse sa Altera papeles na ko na naka-link sa ibaba - marahil sila ay makatulong sa iyo na lumikha ng isang magandang solusyon.

Hi xstal, may mga ilang mga paraan upang magtayo ng isang one-shot (makitid pulso generator), ngunit ang lahat ng mga pamamaraan ay asynchronous at umaasa lamang sa mga pagkaantala sa pagtatanim ng halaman sa aparato, at sa gayon ay hindi inirerekomenda para sa FPGA disenyo.

Bad paraan # 1: gamitin ang isang AT gate na may mabagal na inverter.Output = Input AT Delayed_Inverted_Input.Output Ang pulso ay masyadong mataas ang madaling sabi, depende sa pagpapalahi antala sa inverter's kasama ang kanyang pagka-antala sa net.(Tandaan, ito ay hindi inirerekomenda.)

Bad paraan # 2: paggamit ng mabagal na D-sumalampak na resets mismo.Ikonekta ang Input sa orasan ang kabiguan's.Itali nito D input ng mataas.Ikonekta ang Q sa asynchronous i-reset ang kabiguan's.Ang Q output ay tumibok mataas na tunay madaling sabi, depende sa pagpapalahi antala sa kabiguan ng plus sa net i-reset ang pagka-antala.(Tandaan, ito ay hindi inirerekomenda.)

Kami ay isang pagtalakay Altera proyekto, kaya para sa karagdagang paliwanag ng magandang laban sa masamang disenyo ng mga gawi, sumangguni sa ito @ papel ltera: "Mga Alituntunin sa Design para sa sulit na mga Resulta sa FPGAs"
http://www.altera.com/literature/cp/fpgas-optimal-results-396.pdf
o ito ng isa mula sa qu (sa) rtus handbook: "Design rekomendasyon para sa @ ltera Devices"
http://www.altera.com/literature/hb/qts/qts_qii51006.pdf

 
Hi diyan,
Ako lang nagsimula exploring ang "kahanga-hangang"

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

mundo ng HDLs, kaya ako walang expert.
Marahil na ang isang solusyon sa iyong problema:
Code:

module edgectrl (clk, clr, en, outnum);

input clk, clr, en;

output [7:0] outnum;

reg [7:0] outnum;

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

clr_next_clr = clr_next_clr_dly;laging @ (posedge clk)

simulan

clr_next_clr_dly = clr_next;

kung (clr_next)

outnum = 0;

kung hindi

kung (en)

outnum = outnum 1;

wakasanlaging @ (posedge clr o posedge clr_next_clr)

kung (clr_next_clr) clr_next = 0;

sino pa ang paririto clr_next = 1;endmodule
 

Welcome to EDABoard.com

Sponsor

Back
Top