Proiectarea unui procesor în limbajul Verilog

Embed Size (px)

Citation preview

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    1/12

    Ministerul Educaiei si Tineretului al R. MoldovaUniversitatea Tehnica a Moldovei

    Catedra Materiale i Dispozitive Semiconductoare

    PROIECT de curs

    Sisteme Electronice Programabile

    TEMA: Proiectarea unui procesor n

    limbajul Verilog

    A efectuat: st. Gr. ME-071Banaru Alexandru

    A verificat: Lector superiorBragarenco Andrei

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    2/12

    *Chiinu 2010*

    Cuprins:

    Introducere..............................................................................3

    2 . Date teoretice.....................................................................32.1. Procesorul Elementar......................................................3

    2.2. Modulul CROM..............................................................4

    2.3.Modulul RALU.................................................................53. Proiectare i implementare................................................6

    3.1. Parametrii..................................................................6

    3.2. RALU..........................................................................7

    3.3. CROM........................................................................8

    3.4. Procesorul..................................................................10

    3.5. Modulul de testare....................................................10

    3.6. Prorgamul de test a procesorului............................11

    4. Rezultatele experimentale.................................................12

    Concluzii.................................................................................12

    2

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    3/12

    Introduceren prezent dezvoltarea tehnico-tiinific se bazeaz pe progresele

    electronicii digitale de calcul i procesare a datelor i mai mult dect att, e

    necesar din ce n ce mai mult performan n acest . Elaborarea unui nouprocesor fr unelte performante ar fi foarte anevoioas, din acest motiv, n anul1985, a fost elaborat limbajul descriptiv Verilog, ce permite descriereacomportamentului i/sau arhitecturii unui sistem numeric.

    n acest program urmeaz s proiectm un procesor i s-l simulm.

    2 . Date teoretice

    2.1. Procesorul ElementarDefiniii de baz :

    Un procesor este un SO-3 la care unul din automate este de tip RALU iarcellalt ndeplinete funcia de automat de control.Un procesor elementar, PE, este un procesor al crui automat de control este

    strict iniialVom numi microinstruciuni elementele produsului Y x Q ale unui automat

    de controlUn procesor elementar va fi format, conform definiiilor anterioare, dintr-un

    circuit de tip RALU i un automat de control strict iniial CROM. Acest procesor se vainiializa prin resetare i va executa o singur funcie, cea definit de secvena decomand pentru care a fost proiectat automatul de control. Altfel spus, PE este

    procesorul cu o singur instruciune pe care o interpreteazcontinuu.

    Figura 1 .Procesor ElementarFie PE din figura 1, format din CR0M, n calitate de automat de control, definit deurmtorul format al microinstruciunii pe care o genereaz:::= ::= READ | WRITE | -::= JMP | CJMP | -::= CR | WAITJR. | WAIT.W | -

    ::= i RALU1 definit prin urmtoarea structur a comenzii:

    3

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    4/12

    ::=

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    5/12

    INC : starea urmtoare a CROM se obine prin incrementare

    Figura 4. Structura CROM-uluiJMP : starea urmtoare a CROM este dat de cmpul JUMP prin selectarea intrrii 1

    a MUX de ctre ieire TC

    Figura 5. Tabelul de adevr al circuitului transcodor .CJMP : starea urmtoare depinde de valoarea intrrii selectate, prin codul TEST

    sub denumirea de T, la intrarea TC:

    dac testul nu este ndeplinit, T = 0, atunci tranziia are loc prin incre-mentare pentru c ieirile TC iau valoarea 00 dac testul este ndeplinit, T = 1, atunci tranziia are loc prin saltui la adresadat de cmpul JUMP, selectat prin valoarea 01 de la ieirea TC

    INIT : starea urmtoare este dat de codul de iniializare prezent pe intrarea X1,conec-tat la intrrile 2 i 3 ale MUX.

    2.3.Modulul RALUUna din aplicaiile cele mai spectaculoase ale conceptului de AS3este legat

    de realizarea unui automat funcional utilizat ca o component central a structuriiuzuale de procesor. Arhitectura oricrui procesor este centrat pe o serie de funciiIogico-aritmetice, aplicabile unui set de registre ce formeaz starea intern a

    procesorului n cauz. Pentru a realiza o astfel de arhitectur este necesar o unitatede tip ALU prin care s poat fi prelucrat coninutul registrelor. Este vorba deunitatea RALU (Registers with Arithmetic and Logic Unii).

    5

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    6/12

    Figura 6.O variant simpl de RALURAM : reprezint memoria de registre cu trei porturi:e portul de citire adresat prin cmpul Left, ce furnizeaz operandul stng, LO, alALUportul de citire adresat prin cmpul Right, ce furnizeaz operandul drept,RO, al ALU (i AOUT, adresa de ieire pentru memoria extern)portul de scriere adresat prin cmpul Det, activat de valoarea W a cmpuluiWriteMUX : reprezint n MUXE folosite pentru selectarea operandului L la intrareaALU; permite accesul unor valori din exterior, recepionate pe intrarea DINALU : este unitatea logico-aritmetic comandat de cmpui Func; genereaz pelng rezultatul operaiei, ce se stocheaz temporar n LM, i o serie de indicatori cecar-acterizeaz rezultatul operaiei curente (Ind= {CR, OVFL, SGN, ODD, ZERO})ML : este latch-ul master, transparent pe primul palier al ceasului, cel ce urmeaz

    fron-tului activ.Pe primul palier al ceasului RALU recepioneaz toate cmpurile care-i deter-minfuncionarea, fapt ce-i permite s ofere la intrarea ALU doi operanzi. Rezultatul dela ieirea ALU se nscrie n LM.Pe cel de al doilea palier al impulsului de ceas, ML se nchide memornd rezul-tatuloperaiei din ciclul de ceas curent, iar dac Write ia valoarea Wconinutul latch-uluiLM se va nscrie n memoria de registre la locaia selectat prin Det.Comanda primit de o astfel de unitate de prelucrare poate fi descris prin linii decomanddefinite n funcie de structura intern a memoriei i de operaiile executabile

    n ALU. Vom da o definiie a liniei de comand n cazul particular pe care-l vomfolosi n exemplele ce urmeaz

    3. Proiectare i implementare

    3.1. ParametriiPentru a face proiectul mai clar i mai simplu de neles, am decis s-l proeictez

    pe module aparte, astfel voi avea un modul RALU i un modul CROM, pe care levoi uni ntr-un singur modul PROCESOR. Pentru o flexibilitate mai mare, amparametrizat majoritatea valorilor utilizate, astfel la efectuarea modificrilor

    ulterioare, ansele de a efectua o greeal e mult mai mic. Toi parametrii se coninntr-un fiier aparte, i se includ n modulele RALU i CROM prin comanda`include "parameter.vh"

    Coninutul fiierului este://biti rezervati pentru adresele

    registrilor

    parameter ralu_reg_adr = 4;//numarul de stari posibile ale RALU

    parameter state_nr = 5;

    //operatiile pe care le poate efectua

    RALU-ulparameter nop = 4'd0;parameter add = 4'd1;

    parameter sub = 4'd2;parameter inc = 4'd3;parameter dec = 4'd4;parameter shl = 4'd5;parameter shr = 4'd6;parameter rol = 4'd7;parameter ror = 4'd8;

    parameter AND = 4'd9;parameter OR = 4'd10;parameter XOR = 4'd11;

    6

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    7/12

    parameter NOT = 4'd12;parameter com = 4'd13;parameter LEFT = 4'd14;parameter RIGHT = 4'd15;

    //modul de incrementare a PC

    parameter mode_inc = 2'b00;

    parameter mode_jmp = 2'b01;parameter mode_cjmp = 2'b10;parameter mode_init = 2'b1x;

    //Definirea registrilor de uz general

    parameter R0 = 4'd0;parameter R1 = 4'd1;parameter R2 = 4'd2;parameter R3 = 4'd3;parameter R4 = 4'd4;parameter R5 = 4'd5;

    parameter R6 = 4'd6;parameter R7 = 4'd7;parameter R8 = 4'd8;parameter R9 = 4'd9;parameter R10 = 4'd10;parameter R11 = 4'd11;parameter R12 = 4'd12;

    parameter R13 = 4'd13;parameter R14 = 4'd14;parameter R15 = 4'd15;

    //Definirea elementelor

    microinstructiunii

    parameter select = 1'd1;

    parameter no_sel = 1'd0;

    parameter wr = 1'd1;parameter no_wr = 1'd0;

    //Definiea bitilor de control

    parameter no_test = 3'dx;parameter carry = 3'd0;parameter zero = 3'd1;parameter equal = 3'd2;parameter sign = 3'd3;

    parameter pare = 3'd4;//Etichete

    parameter no_label = 8'bx;parameter label_0 = 8'b0;parameter label_1 = 8'd5;parameter label_2 = 8'd2;

    3.2. RALUPentru descrierea RALU am utilizat toate metode de descrirere studiate la acest curs, i, pe

    care le ofer Verilog, i anume: Discriptiv Flux de date Comportamental.

    module RALU (LA, RA, DA, Func, sel, w, Din, Dout,state, ck, rst);

    `include "parameter.vh"//############### Dfinirea intrarilor si iesirilor ###############input [ralu_reg_adr-1:0] LA, RA, DA;input [3:0] Func;input [7:0] Din;input sel, w, ck, rst;

    output [7:0] Dout ;output [7:0] state;//############### Definirea registrilor ###############reg [7:0] RAM[7:0];reg C;wire [7:0]Ro = (sel)?Din:RAM[RA];wire [7:0]Lo = RAM[LA];reg [7:0] Dout;initial Dout = 0;//############### Initailizarea registrilor ###############initial

    beginRAM[0] = 8'd0;RAM[1] = 8'd0;

    7

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    8/12

    RAM[2] = 8'd0;RAM[3] = 8'd0;RAM[4] = 8'd0;RAM[5] = 8'd0;RAM[6] = 8'd0;RAM[7] = 8'd0;

    end//############### Definirea starilor ALU ###############assign state[pare] = Dout[0];assign state[sign] = Dout[7];assign state[equal] = (Lo==Ro);assign state[zero] = (Dout==0);assign state[carry] = C;//############### Definirea isntructiunii de scriere in registri###############always @(posedge ck)if (w) RAM[DA] = Dout;//###############Definirea operatiilor ALU###############

    always @(Lo or Ro or Din or Func)beginC=1'b0;

    case (Func)sub: {C,Dout} = Lo-Ro;inc: {C,Dout} = Lo+1;dec: {C,Dout} = Lo-1;shl: {C,Dout} = {Lo,1'b0};shr: {Dout,C} = {1'b0,Lo};rol: Dout = {Lo[size-2:0],Lo[7]};ror: Dout = {Lo[0],Lo[7:1]};AND: Dout = Lo & Ro;OR: Dout = Lo | Ro;XOR: Dout = Lo ^ Ro;NOT: Dout = ~Lo;com: Dout = 1'd0-Lo;LEFT: Dout = Lo;RIGHT: Dout = Ro;add: {C,Dout} = Lo+Ro;default Dout = 0;

    endcase

    endendmodule

    3.3. CROMmodule CROM(init_ADDR, STATE_in, cmdout, CK, RST);// antetul programului`include "parameter.vh"//############### Initializarea porturilor ###############input [7:0] init_ADDR;input [state_nr-1:0] STATE_in;output [17:0] cmdout;input CK, RST;// declararea parametrilor

    //############### Descriem ROM ###############reg [30:0] ROM[0:255];initial // blocul de initializare si definire a programului

    8

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    9/12

    begin// adrress ||

    // n R1 introducem datele de la DinROM[0] = {R0, R1, R1, RIGHT, select, wr, no_test, mode_inc, no_label};

    // In R2 introducem R1

    ROM[1] = {R0, R1, R2, RIGHT, no_sel, wr, no_test, mode_inc, no_label};// R2--; if (R1 ==0 ) jump to adress 0x05ROM[2] = {R1, R1, R1, dec, no_sel, wr, zero, mode_cjmp, 8'd5};

    // R4

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    10/12

    Avnd la dispoziie modulele CROM i RALU, definrea proceosrului ocupnu mai mult de cteva rnduri

    module procesor(Din, Dout, ck, rst);input [7:0] Din;output [7:0] Dout;input ck, rst;

    wire [17:0] cmd;wire [state_nr-1:0] state;wire [3:0] LA;wire [3:0] RA ;wire [3:0] DA;wire [3:0] func;wire sel;wire w;assign {LA, RA, DA, func, sel, w} = cmd;CROM crom(8'd0, state, cmd,ck, rst);RALU ralu(LA, RA, DA, func, sel, w, Din, Dout, state, ck, rst);endmodule

    3.5. Modulul de testaremodule test_procesor;reg rst, ck;reg [7:0] Din;wire [7:0] Dout;initial

    beginrst=1;#10 rst=0;

    endinitial

    ck = 1;always

    #10 ck = ck;initial

    beginDin = 8'd5;

    endprocesor DUT(Din, Dout, ck, rst);always

    begin$display("din= %b dout=%b ck=%b rst=%d ", Din, Dout, ck, rst);#20 ;

    endalways @(negedge ck)

    Din = $random;endmodule

    3.6. Prorgamul de test a procesorului

    10

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    11/12

    Pentru a testa procesorul, l-am programat iniial cu 6 instruciuni, care fiindexecutate, permit de a calcula suma datelor de intrare.

    Schema bloc a programului este:

    4. Rezultatele experimentale

    11

  • 8/7/2019 Proiectarea unui procesor n limbajul Verilog

    12/12

    5. Concluziin urma efecturii acestei lucrri de laborator, m-am familiarizat cu metodele

    de proiectare i modelare a unui procesor elementar care execut i interpretez comenzile scrise n ROM-ul CROM-ului. Deci schimbarea funciilor procesoruluinseamn schimbarea microprogramului din ROM.Configuraia random de bii dinROM-ul CROM-ului este cea care definete funcioal sistemul. Structura fizicsimpl a mainii este folosit pentru a executa structura simboloc complex"stocat" n ROM.

    12