Catalin
Moderator
 Inregistrat: acum 18 ani
Postari: 19
|
|
//Problema cu bistabilD numai ca mai apare si reset
module bistabild(d,clk,rst,q,nq); //declar iesiri finale apoi intrari input d,rst,clk; //declaratia intrarilor output q,nq; //declaratia iesirilor wire w1,w2,q,nq; //w1,w2 fire de legatura, nq-variabila asociata lui q negat assign nq=~q; //asignam variabilei nq simbolul ~q-adica q negat la nivel de bit pt a sti ca variabila nq reprezinta q negat always @(posedge clk or posedge rst) if(rst) q<=0; else q<=d; endmodule
module numarsincron(q0,q1,q2,q3,carry,enable,clk); input enable,clk; output q0,q1,q2,q3; wire w1,w2,w3,w4,w5,w6,w7; and(w1,enable,q0);//se trece intai iesirea din poarta logica si apoi intrarile and(w2,w1,q1); and(w3,w2,q2); and(carry,w3,q3); xor(w4,q0,enable); xor(w5,q1,w1); xor(w6,q2,w2); xor(w7,q3,w3); bistabild a1(w4,clk,q0,nq0); //apelez de 4 ori modulul bistabild deoarece avem un numarator sincron pe 4biti bistabild a2(w5,clk,q1,nq1); bistabild a3(w6,clk,q2,nq2); bistabild a4(w7,clk,q3,nq3); endmodule
module simulous; reg enable,clk; //declar registrii adica intrarile wire w1,w2,w3,w4,w5,w6,w7; //de tip wire sunt iesirile initial begin d=0;clk=0; end always #5 clk=~clk; //directiva neaga semnalul de ceas #45 $finish; //9semiperioade, $finish-directiva de terminare, initial-initializare valori begin #3 d=1'b1;#11 d=1'b0;#21 d=1'b1; #27 d=1'b0;#32 d=1'b1;#34 d=~d;#37 d=~d; end initial $monitor($time," input clk=%b data=%b -->> output Q=%b",clk,d,q); //afisare cu directiva $monitor endmodule
|
|