limbaje de descriere hardware - l a b o r a t o r -

12
Universitatea TRANSILVANIA din Braşov, Catedra de Electronică şi Calculatoare - Limbaje dedescriere hardware 2010 1 Dan NICULA Universitatea TRANSILVANIA din Braşov Catedra de Electronică şi Calculatoare E-mail [email protected] URL http://vega.unitbv.ro/~nicula (C) 2010 Dan NICULA LIMBAJE DE DESCRIERE HARDWARE - L A B O R A T O R -

Upload: hung

Post on 25-Jan-2016

21 views

Category:

Documents


2 download

DESCRIPTION

LIMBAJE DE DESCRIERE HARDWARE - L A B O R A T O R -. Dan NICULA Universitatea TRANSILVANIA din Bra ş ov Catedra de Electronic ă ş i Calculatoare E-mail [email protected] URLhttp://vega.unitbv.ro/~nicula. Probleme. Explicați comportamentul specificației: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

1

Dan NICULAUniversitatea TRANSILVANIA din Braşov

Catedra de Electronică şi Calculatoare

E-mail [email protected] http://vega.unitbv.ro/~nicula

(C) 2010 Dan NICULA

LIMBAJE DE DESCRIERE HARDWARE- L A B O R A T O R -

Page 2: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

2

(C) 2010 Dan NICULA

Probleme• Explicați comportamentul specificației:

always @(a or b or c) e = (a | b) & (c | d);

• Scrieți un mediu de test, depistați și corectați eroarea din codul următor:

if (i > 0)

if (i < 2) $display (“i = 1”);

else $display (“i < 0”);

• Scrieți cod pentru test pentru cele 4 cazuri prezentate și afișați valoarea lui a la momentul de timp 0 și 1. Explicați diferențele prin simulare.

reg a; reg a; reg a; reg a;

initial initial initial initial

begin begin begin begin

a = 0; #0 a = 0; a <= 0; #1 a = 0;

a = a + 1; #0 a = a + 1; a <= a + 1; #1 a = a + 1;

end end end end

Page 3: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

3

(C) 2010 Dan NICULA

Probleme• Scrieți cod pentru test pentru cele 4 cazuri prezentate și

afișați valoarea lui outp la momentul de timp 0 și 10. Explicați diferențele prin simulare.

reg outp; reg outp; reg outp; reg outp;

always always always always

begin begin begin begin

#10 outp = 0; outp = #10 0; #10 outp = 0; #10 outp <= 0;

#10 outp = 1; outp = #10 1; #10 outp <= 1; #10 outp = 1;

end end end end

• Construiți modelul unui semisumator pe baza primitivei. Aplicați intrări necunoscute. Care este starea ieșirii?

primtive adder (sum, inA, inB); output sum; input inA, inB;

table

00 : 0; 01 : 1;

10 : 1; 11 : 0;

endtable

endprimitive

Page 4: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

4

(C) 2010 Dan NICULA

Probleme• Simulați și explicați comportamentul operatorilor unari.module unary; module unary; module unary; module unary;

reg[4:0] u; wire u; wire u; wire u;

initial u=!’b011z; assign u=!’b011z; assign u=!’b011z; assign u=&’b1

initial initial initial initial

$display(“%b”, u); $display(“%b”, u); $display(“%b”, u); $display(“%b”, u);

endmodule endmodule endmodule endmodule

Răspuns așteptat:

000x z x 0

• Explicați de ce bistabilul nu funcționează:module Dff_Res_Bad(D, Q, Clock, Reset);

output Q;

input D, Clock, Reset;

reg Q;

wire D;

always @(posedge Clock)

if (Reset !== 1) Q = D;

always

if (Reset == 1) Q = 0;

endmodule

Page 5: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

5

(C) 2010 Dan NICULA

Probleme• Explicați funcționarea bistabilul cu facilități de scanare

(caracteristică utilizată pentru testatibilitate):module DFFSCAN (D, Q, Clk, Rst, ScEn, ScIn, ScOut);

parameter width = 1, reset_value = 0;

input [width-1:0] D;

output [width-1:0] Q;

reg [width-1:0] Q;

input Clk, Rst, ScEn, ScIn;

output ScOut;

initial Q = {width{1'bx}};

always @(posedge Clk or negedge Rst) begin   

if (~Rst)   Q <= #1 reset_value; else

if (ScEn) Q <= #1 {Q, ScIn};   else                 

Q <= #1 D;

end

assign ScOut = Q[width-1];

endmodule

Page 6: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

6

(C) 2010 Dan NICULA

Probleme• Explicați funcționarea modelului de pad bidirecțional.module PadBidir (C, Pad, I, Oen); // active low enable

parameter width=1;

output [width-1:0] C;

inout [width-1:0] Pad;

input [width-1:0] I;

input Oen;

assign #1 Pad = Oen ? {width{1'bz}} : I;

assign #1 C = Pad;

endmodule

Page 7: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

7

(C) 2010 Dan NICULA

Probleme• Explicați și corectați eroarea prezentă în următoarea

porțiune de cod.module Loop_Bad;

reg [3:0] i;

reg [31:0] DBus;

initial DBus = 0;

initial begin #1;

for (i=0; i<=15; i=i+1) DBus[i]=1;

end

initial begin

$display("DBus = %b",DBus);

#2;

$display("DBus = %b",DBus);

$stop;

end

endmodule

Page 8: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

8

(C) 2010 Dan NICULA

Probleme• Explicați următoarele.integer IntA;

IntA = -12 / 3; // rezultat -4

IntA = -'d 12 / 3; // rezultat 1431655761

• Determinați și explicați valorile pentru intA și regA după fiecare atribuire din codul următor:

integer intA;

reg [15:0] regA;

intA = -4'd12;

regA = intA/3;

regA = -4'd12;

intA = regA/3;

intA = -4'd12/3;

regA = -12/3;

Page 9: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

9

(C) 2010 Dan NICULA

Probleme• Considerați următoarele specificații:reg [7:0] a, b, sum;

sum = (a + b) >> 1;

• Intenția este de a aduna a cu b. Acest lucru ar putea genera depășire, apoi să se facă o deplasare drepta cu intenția de a păstra bitul de transport. Însă, deoarece toți operanzii sunt reprezentanți pe 8 biți, expresia (a + b) va avea doar 8 biți, iar bitul de tranport va fi pierdut înainte de a face deplasarea la dreapta. O soluție este ca expresia (a + b) să fie reprezentată pe minim 9 biți. De exemplu, adunând o valoare întreagă 0, se va forța ca rezultatul să fie reprezentat ca întreg. Verificați dacă alternativele de mai jos produc efectul dorit.

sum = (a + b + 0) >> 1;

sum = {0,a} + {0,b} >> 1;

Page 10: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

10

(C) 2010 Dan NICULA

Probleme• Tabelul de mai jos prezintă diverse modalități de modelare a unui registru de

deplasare de 2 biți. Verificați prin simulare corectitudinea acestor modele.  

always @(posedge Clk) begin Q2 = Q1; Q1 = D1; end

always @(posedge Clk) #1 Q1 = D1; always @(posedge Clk) #1 Q2 = Q1;  

always @(posedge Clk) begin Q1 = D1; Q2 = Q1; end  

always @(posedge Clk) Q1 <= D1; always @(posedge Clk) Q2 <= Q1;

always @(posedge Clk) begin Q1 <= #1 D1; Q2 <= #1 Q1; end  

always @(posedge Clk) Q1 = D1; always @(posedge Clk) Q2 = Q1;

always @(posedge Clk) Q1 = #1 D1; always @(posedge Clk) Q2 = #1 Q1;

module FF_1 (Clk, D1, Q1);always @(posedge Clk) Q1 = D1; endmodulemodule FF_2 (Clk, Q1, Q2); always @(posedge Clk) Q2 = Q1; endmodule

module FF_1 (Clk, D1, Q1);always @(posedge Clk) Q1 <= D1; endmodulemodule FF_2 (Clk, Q1, Q2); always @(posedge Clk) Q2 <= Q1; endmodule

Page 11: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

11

(C) 2010 Dan NICULA

Probleme• Proiectați un model pentru un semafor. Frecvența ceasului

de intrare este de 1MHz. Semaforul are următorul ciclu: verde (60 s), galben (1 s), roșu (60 s).

• Modificați modelul pentru a avea următorul ciclu: roșu (60 s), roșu+galben (5 s), verde (60 s), galben(10 s).

• Modificați modelul pentru a admite un ciclu programabil.

Page 12: LIMBAJE DE DESCRIERE HARDWARE -  L A B O R A T O R  -

Uni

vers

itate

a T

RA

NS

ILV

AN

IA d

in B

raşo

v, C

ated

ra d

e E

lect

roni

că ş

i Cal

cula

toar

e -

Lim

baje

ded

escr

iere

har

dwar

e 20

10

12

(C) 2010 Dan NICULA

Probleme• Proiectați un numărător de 9 biți având următoarea

interfață. Numărătorul trebuie să funcționeze la frecvență maximă într-o implementare pe FPGA Spartan3E.

module counter (data_in, up, down, clock,   count_out,

carry_out, borrow_out, parity_out);

output [8:0] count_out;

output carry_out, borrow_out, parity_out;

input [8:0] data_in; input clock, up, down;

reg [8:0] count_out; reg carry_out, borrow_out, parity_out;

// codul aici...

endmodule