Facultatea Calculatoare, Informatica si Microelectronica Catedra Microelectronica si Ingineria Biomedicala
Raport
Lucrarea de laborator nr.2
La Disciplina: Proiectarea sistemelor digitale
Tema: Automate functionale
A efectuat: st. gr. MN-111 Magariu Nicolae
A verificat: lect.super., Bragarenco Andrei
Chisinau 2014 Obiective : Studiul structurii si functionalitatii unui automat functional Implementarea in Verilog a automatului MULE_S si testarea lui
Problema : Sa se proiecteze un automat functional , sistem de ordinul SO2. Mai concret, realizarea unui inmultitor pe 4 biti, avind interfata din semnalul de clock, reset, load si ready (semnal de generare), si intrarile A si B, iesirea va fi P (produsul).
parameter WIDTH=4; // marimea pentru numerele de intrare si iesire
input ck, rst, LD; //semnale de clock, reset si load input [WIDTH-1:0] A_in, B_in; //termenii de intrare la inmultire
output [2*WIDTH-1:0] P; //produsul de dimensiune de 2 ori mai amre ca termenii de intrare output ready;//semnal de generare
reg [WIDTH-1:0] A, B; //registri pentru valorile de intrare reg [2*WIDTH-1:0] P; //registri pentru datele de iesire R f<<
f
R f>> R
assign ready=((A==0)||(B==0)); //generarea atunci cand macar un registru e 0 always@ (negedge ck or posedge rst) //front negativ pentru ck si pozitiv pentru reset
if(rst) //inititalizarea registrilor interni begin A<=0; B<=0; P<=0; end else if(ready) //daca e generat semnalul de ready begin if(LD) //daca este semnalul de LD begin if(A_in>B_in) //daca numarul A e mai mare ca numarul B begin A<=A_in; //in registru A se transmite valoarea A_in B<=B_in; //in registru B se transmite valoarea B_in end else begin A<=B_in; // schimbarea acestor doua numere cu locurile B<=A_in; // pentru micsorarea nr. de tacturi end end end else begin if(B[0]==1) //daca primul bit al numarului este 1 P<=P+A; //produsului i se atribuie valoarea P + numarul A else P<=P+0; // Produsului i se atribuie valoarea P A=A<<1; //deplasarea A cu un bit la stinga B=B>>1; //deplasarea lui B cu un bit la dreapta, de fapt eliminarea ultimului bit, cu care deacum am inmultit end endmodule
module MUL_tb ();
parameter WIDTH=4; //marimea numerilor
//date de intrare le pun ca registru reg [WIDTH-1:0]A_in,B_in; //datele de intrare reg ck,rst; //semnalul de reset si de ck reg [WIDTH-1:0]OP1,OP2; reg [2*WIDTH-1:0]rez; //produsul de marime de 2 ori mai mare reg LD; //semnalul de incarcare
//datele de iesire le pun ca wire
wire [2*WIDTH-1:0]P; //datele de iesire,produsul wire ready; //semnalul
//datele initiale de la care porneste initial begin A_in=0; B_in=0; ck=0; //LD pune in 1, cu intirziuere de 20 unitati de timp #20 LD=1; end
initial begin rst=1; #10 rst=0; //schimbarea nivelui rst cu intirziere #20 rst=1; end always ck=!ck; //alternarea semnalului de ck
initial begin repeat(10) begin A_in=$random; B_in=$random; MUL_task (OP1,OP2,rez); if(rez!=OP1*OP2) //daca rez nu este egal cu produsul op1 si op2 begin //afisam la ecran eroare $display("Error"); $stop ; end else //afisam la display ultima iteratie , rezultatul final. $display("-------------> result:ck=%b, rst=%b,A_in=%d,B_in=%d,P=%d,LD=%b,ready=%b",ck,rst,A_in,B_in,P,LD,ready);
end end
task MUL_task;
input[WIDTH-1:0]OP1,OP2; //valorile de intrare de 4 biti
output[2*WIDTH-1:0]rez; //valoarea de iesire de 8 biti
begin while(!ready) //atita timp kit nu este gata @(posedge ck) //la frontul pozitiv ck A_in=OP1; //A se atribuie la OP1 B_in=OP2; //B se atribuie la OP2 @(posedge ck); //frontul negativ ck LD=1; @(posedge ck); LD=0; while(!ready) //atita timp kit nu este gata @(posedge ck) rez=P; //rez se atribui la Produs end endtask
endmodule
Simularea in Leonardo:
Concluzie: In urma efectuarii acestei lucrari de laborator am implementat un automat functional de inmultire a doua numere de 4 biti in limbajul Verilog, astfel folosind si intarind cunostintele teoretice in practica. Am avut nevoie si de un program de simulare cum este Leonardo pentru a simula programul propriuzis si a vedea marimea circuitelor. In acest program am gasit niste erori pe care nu le-a gasit calculatorul de asemenea am obtinut si circuitul electric principial al schemei noastre.In final avind un rezultat pe care lam asteptat.