can anyone tell me, kas šiuo Verilog kodas?

A

angjohn

Guest
šis kodas yra parašytas naudojant Verilog:

/ / CU
modulis Controlunit (Z, atstatyti, CMP, kodas operacijos, CLK);

išvesties [14:0] Z;
viela [14:0] Z;
sąnaudų iš naujo;
įvesties SS;
įvedimo [7:0] kodas operacijos;
įvesties CLK;/ / vidaus FMV valstybės pareiškimus, PS = Dabartinė būklė, N = šalia valstybės
reg [4:0] PS;
viela [4:0] N;/ / Valstybės kodavimas
parametras S0 = 5'b00000;
parametras S1 = 5'b00001;
parametras S2 = 5'b00010;
parametras P3 = 5'b00011;
parametras P4 = 5'b00100;
parametras P5 = 5'b00101;
parametras S6 = 5'b00110;
parametras S7 = 5'b00111;
parametras P8 = 5'b01000;
parametras P9 = 5'b01001;
parametras P10 = 5'b01010;
parametras S11 = 5'b01011;
parametras S12 = 5'b01100;
parametras S13 = 5'b01101;
parametras S14 = 5'b01110;
parametras S15 = 5'b01111;
parametras S16 = 5'b10000;
parametras S17 = 5'b10001;
parametras S18 = 5'b10010;
parametras S19 = 5'b10011;

viela [1:0] a;
viela [1:0] B;
viela c;
viela d;
viela [3:0] e;

priskirti = kodas operacijos [7:6];
priskirti b = kodas operacijos [5:4];
priskirti c = kodas operacijos [3];
skirti d = kodas operacijos [2];
priskirti e = kodas operacijos [7:4];/ / įvairių logika

funkcija [19:0] FMV;
įvedimo [1:0] fsm_a;
įvedimo [1:0] fsm_b;
įvesties fsm_c;
įvesties fsm_d;
įvedimo [3:0] fsm_e;
įvedimo [4:0] fsm_PS;
įvesties fsm_CMP;

reg [14:0] fsm_Z;
reg [4:0] fsm_NS;

pradėti
atveju (fsm_PS)
S0:
pradėti
fsm_NS = s1;
fsm_Z = 15'b010000000000000;
pabaiga
S1:
pradėti
fsm_NS = S2;
fsm_Z = 15'b000000000000000;
pabaiga
S2:
pradėti
fsm_Z = 15'b101000000000000;
jei (fsm_a == 2'b00 | fsm_a == 2'b01)
pradėti
fsm_NS = P3;
pabaiga
else if (fsm_a == 2'b10)
pradėti
fsm_NS = P10;
pabaiga
else if (fsm_a == 2'b11)
pradėti
fsm_NS = S19;
pabaiga
pabaiga
S3:
pradėti
fsm_Z = 15'b000000000000000;
atveju (fsm_e)
4'b0000:
pradėti
fsm_NS = S4;
pabaiga
4'b0001:
pradėti
fsm_NS = P5;
pabaiga
4'b0010:
pradėti
fsm_NS = P6;
pabaiga
4'b0011:
pradėti
fsm_NS = S7;
pabaiga
4'b0100:
pradėti
fsm_NS = P8;
pabaiga
Numatyta:
pradėti
fsm_NS = P9;
pabaiga
endcase
pabaiga
S4:
pradėti
fsm_NS = s1;
jei (fsm_c == 1'b0)
pradėti
fsm_Z = 15'b000000010001000;
pabaiga
kitas
pradėti
fsm_Z = 15'b000000001001000;
pabaiga
pabaiga
S5:
pradėti
fsm_NS = s1;
jei (fsm_c == 1'b0)
pradėti
fsm_Z = 15'b000000010001001;
pabaiga
kitas
pradėti
fsm_Z = 15'b000000001100001;
pabaiga
pabaiga
P6:
pradėti
fsm_NS = s1;
jei (fsm_c == 1'b0)
pradėti
fsm_Z = 15'b000000010001010;
pabaiga
kitas
pradėti
fsm_Z = 15'b000000001001010;
pabaiga
pabaiga
P7:
pradėti
fsm_NS = s1;
jei (fsm_c == 1'b0)
pradėti
fsm_Z = 15'b000000010001011;
pabaiga
kitas
pradėti
fsm_Z = 15'b000000001001011;
pabaiga
pabaiga
P8:
pradėti
fsm_NS = s1;
jei (fsm_c == 1'b0)
pradėti
fsm_Z = 15'b000000010000100;
pabaiga
kitas
pradėti
fsm_Z = 15'b000000001100100;
pabaiga
pabaiga
P9:
pradėti
fsm_NS = s1;
jei (fsm_c == 1'b0)
pradėti
fsm_Z = 15'b000000010000101;
pabaiga
kitas
pradėti
fsm_Z = 15'b000000001100101;
pabaiga
pabaiga
P10:
pradėti
fsm_Z = 15'b000000000000110;
fsm_NS = S11;
pabaiga
S11:
pradėti
fsm_Z = 15'b001000100000110;
atveju (fsm_b)
2'b00:
pradėti
fsm_NS = S12;
pabaiga
2'b01:
pradėti
fsm_NS = S15;
pabaiga
2'b10:
pradėti
fsm_NS = S17;
pabaiga
Numatyta:
pradėti
fsm_NS = S18;
pabaiga
endcase
pabaiga
S12:
pradėti
jei (fsm_d == 1'b0)
pradėti
fsm_NS = S14;
fsm_Z = 15'b000000000000110;
pabaiga
kitas
pradėti
fsm_Z = 15'b000010000000110;
fsm_NS = S13;
pabaiga
pabaiga
S13:
pradėti
fsm_NS = S14;
fsm_Z = 15'b000010100000110;
pabaiga
S14:
pradėti
fsm_NS = s1;
jei (fsm_c == 1'b0)
pradėti
fsm_Z = 15'b000000010010110;
pabaiga
kitas
pradėti
fsm_Z = 15'b000000001010110;
pabaiga
pabaiga
S15:
pradėti
fsm_NS = S16;
jei (fsm_c == 1'b0)
pradėti
fsm_Z = 15'b000011000000110;
pabaiga
kitas
pradėti
fsm_Z = 15'b000011000100110;
pabaiga
pabaiga
S16:
pradėti
fsm_NS = s1;
fsm_Z = 15'b000010000000110;
pabaiga
S17:
pradėti
fsm_NS = s1;
fsm_Z = 15'b000100000010110;
pabaiga
S18:
pradėti
fsm_NS = s1;
jei (fsm_CMP == 1'b1)
pradėti
fsm_Z = 15'b000100000010110;
pabaiga
kitas
pradėti
fsm_Z = 15'b000000000000000;
pabaiga
pabaiga
S19:
pradėti
fsm_NS = s1;
fsm_Z = 15'b000000000000000;
pabaiga
endcase

FMV = (fsm_Z, fsm_NS);
pabaiga
endfunction/ / reevaluate įvairių logika kai kodas operacijos arba Dabartinė būklė pakeitimai
priskirti (Z, NS) = FMV (a, b, c, d, e, PS, SS);/ / clock valstybės flip flop
visada @ (negedge CLK)
pradėti
jei (naujo == 1'b1)
PS = S0;
kitas
PS = N;
pabaiga

endmoduleačiū už pagalbą!

 
(1) atveju pareiškimai turėtų būti baigti, o tai reiškia, jums turėtų apimti visas įmanomas galimybes; arba galite būti Numatytasis priskyrimus vietoj, per kurį N = PS; kitais kintamaisiais rodikliais "assignemnts nuo realių sąlygų.

(2) nenaudoti priskirti pareiškimai savavališkai nes VCS ir Verilog-XL šių pareiškimų vykdymo mechanizmas skiriasi nuo visada tvarką, todėl prašome naudotis visada procedūras įmanoma.Tai labiausiai veikia jūsų modeliavimo rezultatus naudojant skirtingų simuliatoriai.

 
Jei po kodo šiame forume, prašome naudotis "kodas" mygtuką, kad galėtume peržiūrėti savo wcięć.

 
Čia yra ištaisyti kodą!
Tai, kas mento p. Tamson ..
Aš ją šiek tiek skaitymo pašalinant nepageidaujamus pradėti baigiasiKodas:

/ / CU

modulis Controlunit (Z, atstatyti, CMP, kodas operacijos, CLK);išvesties [14:0] Z;

reg [14:0] Z;

sąnaudų iš naujo;

įvesties SS;

įvedimo [7:0] kodas operacijos;

įvesties CLK;/ / vidaus FMV valstybės pareiškimus, PS = Dabartinė būklė, N = šalia valstybės

reg [4:0] PS;

reg [4:0] N;/ / Valstybės kodavimas

parametras S0 = 5'b00000;

parametras S1 = 5'b00001;

parametras S2 = 5'b00010;

parametras P3 = 5'b00011;

parametras P4 = 5'b00100;

parametras P5 = 5'b00101;

parametras S6 = 5'b00110;

parametras S7 = 5'b00111;

parametras P8 = 5'b01000;

parametras P9 = 5'b01001;

parametras P10 = 5'b01010;

parametras S11 = 5'b01011;

parametras S12 = 5'b01100;

parametras S13 = 5'b01101;

parametras S14 = 5'b01110;

parametras S15 = 5'b01111;

parametras S16 = 5'b10000;

parametras S17 = 5'b10001;

parametras S18 = 5'b10010;

parametras S19 = 5'b10011;viela [1:0] a;

viela [1:0] B;

viela c;

viela d;

viela [3:0] e;priskirti = kodas operacijos [7:6];

priskirti b = kodas operacijos [5:4];

priskirti c = kodas operacijos [3];

skirti d = kodas operacijos [2];

priskirti e = kodas operacijos [7:4];/ / įvairių logika

/ / reevaluate įvairių logika kai kodas operacijos arba Dabartinė būklė pakeitimai

visada @ (SS ar PS arba a ar b arba c arba d arba e)

pradėti

N = PS;

Z = 15'b000000000000000;

atveju (AG)

S0:

pradėti

N = s1;

Z = 15'b010000000000000;

pabaiga

S1:

pradėti

N = S2;

Z = 15'b000000000000000;

pabaiga

S2:

pradėti

Z = 15'b101000000000000;

if (a == 2'b00 | a == 2'b01)

N = P3;

else if (a == 2'b10)

N = P10;

else if (a == 2'b11)

N = S19;

pabaiga

S3:

pradėti

Z = 15'b000000000000000;

atveju (e)

4'b0000: N = S4;

4'b0001: N = P5;

4'b0010: N = P6;

4'b0011: N = S7;

4'b0100: N = P8;

Numatyta: N = P9;

endcase

pabaiga

S4:

pradėti

N = s1;

if (c == 1'b0)

Z = 15'b000000010001000;

kitas

Z = 15'b000000001001000;

pabaiga

S5:

pradėti

N = s1;

if (c == 1'b0)

Z = 15'b000000010001001;

kitas

Z = 15'b000000001100001;

pabaiga

P6:

pradėti

N = s1;

if (c == 1'b0)

Z = 15'b000000010001010;

kitas

Z = 15'b000000001001010;

pabaiga

P7:

pradėti

N = s1;

if (c == 1'b0)

Z = 15'b000000010001011;

kitas

Z = 15'b000000001001011;

pabaiga

P8:

pradėti

N = s1;

if (c == 1'b0)

Z = 15'b000000010000100;

kitas

Z = 15'b000000001100100;

pabaiga

P9:

pradėti

N = s1;

if (c == 1'b0)

Z = 15'b000000010000101;

kitas

Z = 15'b000000001100101;

pabaiga

P10:

pradėti

Z = 15'b000000000000110;

N = S11;

pabaiga

S11:

pradėti

Z = 15'b001000100000110;

atveju (b)

2'b00: N = S12;

2'b01: N = S15;

2'b10: N = S17;

Numatyta: N = S18;

endcase

pabaiga

S12:

pradėti

if (d == 1'b0)

pradėti

N = S14;

Z = 15'b000000000000110;

pabaiga

kitas

pradėti

Z = 15'b000010000000110;

N = S13;

pabaiga

pabaiga

S13:

pradėti

N = S14;

Z = 15'b000010100000110;

pabaiga

S14:

pradėti

N = s1;

if (c == 1'b0)

Z = 15'b000000010010110;

kitas

Z = 15'b000000001010110;

pabaiga

S15:

pradėti

N = S16;

if (c == 1'b0)

Z = 15'b000011000000110;

kitas

Z = 15'b000011000100110;

pabaiga

S16:

pradėti

N = s1;

Z = 15'b000010000000110;

pabaiga

S17:

pradėti

N = s1;

Z = 15'b000100000010110;

pabaiga

S18:

pradėti

N = s1;

jei (CMP == 1'b1)

Z = 15'b000100000010110;

kitas

Z = 15'b000000000000000;

pabaiga

S19:

pradėti

N = s1;

Z = 15'b000000000000000;

pabaiga

endcase

end / / visada @ (.../ / clock valstybės flip flop

visada @ (negedge CLK)

pradėti

jei (naujo == 1'b1)

PS <= S0;

kitas

PS <= N;

pabaigaendmodule

 
(3) kita problema galbūt egzistuoja, jeigu jūs ne rūpintis rašyti RTL kodai, kurie yra tai, kad blokuoti užduotis yra geresnė alternatyva yra ne blokuoja tuos nuo ankstesnio willn't sukelti lenktynės (kaip apibrėžta šių perleidimas nėra "nt priklauso nuo jūsų procedūra užsakymą, kad imitavimas).pavyzdžiui, po du iš jų bus atsisakyta lenktynės:
visada @ (posedge laikrodis)
pradėti
a = b;
pabaiga
visada @ (posedge laikrodis)
pradėti
c = a;
pabaiga

rezultatai gali skirtis dėl skirtingų tiekėjų "simuliatoriai; net ir tuo pačiu simuliatoriumi, jei versija skiriasi rezultatai gali būti skirtingi.Kadangi vykdymo siekiant pirmiau nurodytų dviejų visada blokai atsitiktinai priežasties, jei naudojate VCS simuliatorius rezultatus lygus po vieną:
visada @ (posedge laikrodis)
pradėti
a = b;
c = a;
pabaigatodėl, jei įmanoma, naudojant blokavimo užduotys gali sumažinti tokius įrašus skaityti rasių ir tvarka blokų galima nepaisyti.Galite nurodyti keletas užsakymo disscussing tokių klausimų apie tai, kaip išvengti lenktynių metu writting procesą.Parašytas po 21 minučių:(4) Atkreipkite dėmesį į numatytąjį užduočių: N = PS vietoj N = S0 prašom.
Atsižvelgiant į tai, kad nors dirgiklius atsiranda bet tokius dirgiklius nekeičia dabartinės padėties, todėl N = PS yra teisingas.

 
Thanks for all ur atsakyti ir padėti, ačiū!o dabar i dar 1 problema, kuri yra ir buvo parašyta ši programa skaitiklis į VHDL tada i want to modulio būti Verilog bet ir turėjo tam tikrą problemą writting į Verilog, taip yra VHDL kodas ir taip pat Verilog kodą, kad i turėjo parašyti, bet veido problemų su juo.todėl gali visiems suteikti man keletas patarimų, kaip padaryti Verilog kodas panašus į VHDL kodas, PLEASE!

Kodas:VHDL:

- PrgmCounter

biblioteka IEEE;

naudoti IEEE.std_logic_1164.all;

naudoti IEEE.std_logic_arith.all;

naudoti IEEE.std_logic_unsigned.all;subjektas PrgmCounter yra

uostų (

duomenys: STD_LOGIC_VECTOR (7 downto 0);

Q: iš STD_LOGIC_VECTOR (7 downto 0);

clrreg: į STD_LOGIC;

loadreg: į STD_LOGIC;

increg: į STD_LOGIC;

CLK: į STD_LOGIC

);

pabaigos PrgmCounter;Architektūra PrgmCounter_arch iš PrgmCounter yrasignalo temperatūra: STD_LOGIC_VECTOR (7 downto 0);pradėti

procesas (CLK, clrreg, loadreg, increg)

pradėti

jei clrreg = "1", tada temp <= (kiti =>'0 ');

kitas

jei (CLK "renginys ir CLK ='1 '), tada

jei loadreg = "1", tada temp <= duomenys;

kitas

jei increg = "1", tada temp <= temp 1;

dar temp <= temp;

end if;

end if;

end if;

end if;

galutinio proceso;

q <= temp;pabaigos PrgmCounter_arch;Verilog:

/ / PrgmCounter

modulis PrgmCounter (duomenys, q, clrreg, loadreg, increg, CLK);įvedimo [7:0] duomenimis;

išvesties [7:0] q;

viela [7:0] q;

įvesties clrreg;

įvesties loadreg;

įvesties increg;

įvesties CLK;reg [7:0] temp;visada @ (CLK ar clrreg arba loadreg arba increg)

pradėti

jei (clrreg == 1'b1)

pradėti

temperatūra <= (8 (1'b0));

pabaiga

kitas

pradėti

jei (CLK == 1'b1)

pradėti

jei (loadreg == 1'b1)

pradėti

temperatūra <= duomenys;

pabaiga

kitas

pradėti

jei (increg == 1'b1)

pradėti

temperatūra <= temp 1;

pabaiga

kitas

pradėti

temperatūra <= temp;

pabaiga

pabaiga

pabaiga

pabaiga

pabaiga

priskirti q = temp;

endmodule
 
3. kartą bandė atsakyti į šį ..kvailas mandraką ..

anyways ..

taip, kaip jums parašė Jūsų visada blokas tai esmės sintetinti į Kombinatoryczny logika gal su Inferred sklende arba du.I
didn't dėmesį ..Ką jūs į tai kraštas sukėlė laikrodis atveju ..

reg [7:0] nepriklausomai;

; visada @ (posedge CLK); sinchronizavimo naujo sąlyga
visada @ (posedge CLK ar posedge rst_cond); async atkurti būklę ..
jei (rst_cond)
nepriklausomai <= 8'b0000_0000;
kitas
pradėti
jei (ld_cond)
nepriklausomai <= data_in;
kitas
jei (inc_cond)
nepriklausomai <= kokia 1'b1;
pabaiga

kad turi tai daryti ..

Jūs taip pat tikrai nereikia išprotėti dėl prasideda-baigiasi ..tik laiko tai reikalinga yra, jei turite 2 pareiškimai inbetween filialo sąlygų arba jei turite 2 filialo sąlygos pagal kitas ..

pvz ..

kitas
pradėti
jei (inc_cond)
nepriklausomai <= kokia 1'b1;
kitas
jei (dec_cond)
nepriklausomai <= kokia - 1'b1;
pabaigajelydonut

 
Yra keletas patarimų dėl vering / VHDL kodavimo stiliai:
(1) Pagalvokite apie aparatūros o kodavimo dizainas
(2) Kai kurie neatitikimai tikrai egzistuoja tarp Verilog ir VHDL sintaksei.Buvusioji visada naudokite posedge / negedge CLK nurodyti laikrodis įvykis, o pastarasis Ofter naudoti atributą signalą rodo laikrodis įvykių, tokių, kaip clock'event.Jei naujesnės į dvi kalbas, geriau kodą savo dizainą, kai jūs suprantate, kaip poveikis ir sigans "renginių vykdymo procese (VHDL) ar visada (Verilog).
(3) nebus išvadą užraktai, jei naudojate ne blokuoja užduotis.The latches infer often occur during the combinationatory logic generation blocks such as assign and always blocks, during which if the sensitivity list is not complete or the conditions are not complete, then the latches will be infered and the timing analysis will complicate and the difference between RTL modeliavimas ir Netlist modeliavimas gali (ne privalo) atsirasti.

 
Thanks guys for the help!ir dabar susiduria su kita problema, i am naudojant Altera rėmas (LPM_RAM_DQ) ir taip kodas ir raštu, ir jis veikia, bet dėl sintaksė: "defparam" i am naudojant kodą, kai kurie kompiliatorius negali pripažinti, kad sintaksė.Taigi, gali kas nors pasiūlyti man, kaip pakeisti, kad "defparam" sintaksę su daugiau bendrinis sintaksė taip ir gali naudoti kodą, dauguma kompiliatorių, ačiū!taip kodąKodas:modulis RAM (

adresas,

mes,

laikrodis,

duomenis,

q);įvedimo [7:0] adresas;

įvesties mes;

įvesties laikrodis;

įvedimo [7:0] duomenimis;

išvesties [7:0] q;viela [7:0] sub_wire0;

viela [7:0] q = sub_wire0 [7:0];lpm_ram_dq lpm_ram_dq_component (

. adresas (adresas),

. inclock (laikrodis)

. (duomenų),

. mes (mes),

. q (sub_wire0));

defparam

lpm_ram_dq_component.intended_device_family = "FLEX10K"

lpm_ram_dq_component.lpm_width = 8,

lpm_ram_dq_component.lpm_widthad = 8,

lpm_ram_dq_component.lpm_indata = "REGISTRUOTO"

lpm_ram_dq_component.lpm_address_control = "REGISTRUOTO"

lpm_ram_dq_component.lpm_outdata = "neregistruotas"

lpm_ram_dq_component.use_eab = "ON",

lpm_ram_dq_component.lpm_hint = "MAXIMUM_DEPTH = 256",

lpm_ram_dq_component.lpm_type = "LPM_RAM_DQ"

lpm_ram_dq_component.lpm_file = "nabilcpu.mif";endmodule
 
hey guys!ir buvo parašyti taip modulis VHDL ir veikia geraiKodas:

- Vėliavos

biblioteka IEEE;

naudoti IEEE.std_logic_1164.all;

naudoti IEEE.std_logic_arith.all;subjekto vėliava yra

uostų (

FlagIn: į STD_LOGIC_VECTOR (16 downto 0);

ldOut: į STD_LOGIC;

- ldStatus: į STD_LOGIC;

FlagOut: iš STD_LOGIC_VECTOR (15 downto 0);

CLK: į STD_LOGIC

);

pabaigos vėliava;Architektūra Flag_arch vėliavos yra

pradėti

Procesas (CLK)

kintamasis C, Z, N, V: STD_LOGIC;

pradėtijei (CLK "renginys ir CLK ='1 '), tada

jei ldOut = "1", tada

jei FlagIn = "00000000000000000", tada

Z: ='1 ';

kitas

Z: ='0 ';

end if;- Bankas: = FlagIn (11);

N: = FlagIn (15);

C: = FlagIn (16);

V = N xor C;FlagOut <= C & N & V & Z & "000000000000";

end if;- jei ldStatus = "1", tada

- FlagOut <= FlagIn (15 downto 0);

- end if;end if;galutinio proceso;

pabaigos Flag_arch;
 
Sveiki, aš gimęs problema ...
Przetłumaczonym kodas suteikia kompiliavimo klaidų ....
Čia yra ištaisyti kodą ....

Kodas:

/ / Vėliava

modulis Vėliava (FlagIn, ldOut, FlagOut, CLK);įvedimo [16:0] FlagIn;

įvesties ldOut;

išvesties [15:0] FlagOut;

reg [15:0] FlagOut;

įvesties CLK;visada @ (posedge CLK)

prasideda: junk

reg C;

reg Z;

reg šiaurės platumos;

reg V;jei (ldOut == 1'b1)

pradėti

jei (FlagIn == 17'b00000000000000000)

Z = 1'b1;

kitas

Z = 1'b0;N = FlagIn [15];

C = FlagIn [16];

V = N ^ C;

FlagOut <= (C, N, V, Z, 12'b000000000000);

pabaiga

pabaiga

endmodule
 
Labas,
nand_gates "pirmoji dalis kodo yra gera.Tai pageidaujamą kodavimą stiliaus statemachine.Daugiau kodavimo gairės, prašome kreiptis:
h ** p: / / www.sunburst-design.com/papers/tigras

 

Welcome to EDABoard.com

Sponsor

Back
Top