Catalin
Moderator
 Inregistrat: acum 18 ani
Postari: 19
|
|
//Bistabil T sincron(cu clk adica cu semnal de ceas)
module bistabilT(Q,nQ,CLK,T,RESET); //declar iesiri finale apoi intrari input T,CLK,RESET; //declaratia intrarilor output Q,nQ;reg Q; //declaratia iesirilor 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 RESET) begin if (RESET==1) Q=1'b0; //daca reset=1 atunci lui q ii atribuim valoarea bitului else if (T==1) #2 Q=~Q; //altfel daca T==1 atunci la 2 semiperioade il negam pe q end endmodule
module numbit(Q,CLK,RESET); input CLK,RESET; //declaratia intrarilor output [2:0] Q; //avem practic iesirea Q pe 3 biti; [2:0] un vector cu 3 elemente wire [2:0] nQ; wire w; bistabilT T1(Q[0],nQ[0],CLK,1,RESET); //apelez de 3 ori modulul bistabilT deoarece avem bistabilul pe 3biti bistabilT T2(Q[1],nQ[1],CLK,1,RESET); bistabilT T3(Q[2],nQ[2],CLK,w,RESET); and(w,Q[0],Q[1]); endmodule
module numbit1(Q,CLK,RESET); //avem 2 module numbit deoarece bistabilul T este sincron input CLK,RESET; output [2:0] Q; wire [2:0] nQ; bistabilT T1(Q[0],nQ[0],CLK,1,RESET); bistabilT T2(Q[1],nQ[1],Q[0],1,RESET); bistabilT T3(Q[2],nQ[2],Q[1],1,RESET); endmodule
module simulous; //modul de simulare reg CLK,RESET; //declar registrii adica intrarile wire [2:0] Q1,Q2; //de tip wire sunt iesirile numbit numb(Q1,CLK,RESET); //apelul modulului numbit(practic functia=modul in verilog) numbit1 numb1(Q2,CLK,RESET); //apelul modulului numbit1 initial begin #0 CLK=1'b0; #0 RESET=1'b1; #1 RESET=1'b0; #45 $finish; //9semiperioade, $finish-directiva de terminare, initial-initializare valori end always #3 CLK=~CLK; //negarea semnalului de ceas la nivel de bit initial //afisare cu directiva $monitor $monitor($time," input CLK=%b RESET=%b -->> output1 Q1=%b output2 Q2=%b",CLK,RESET,Q1,Q2); endmodule
|
|