1 / 12

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

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 dan.nicula@vega.unitbv.ro URL http://vega.unitbv.ro/~nicula. Probleme. Explicați comportamentul specificației:

hung
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 dan.nicula@vega.unitbv.ro URL http://vega.unitbv.ro/~nicula (C) 2010 Dan NICULA

  2. 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

  3. Probleme • Scrieți cod pentru test pentru cele 4 cazuri prezentate și afișați valoarea lui outpla 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

  4. Probleme • Simulați și explicați comportamentul operatorilor unari. module unary; module unary; module unary; module unary; reg[4:0]u; wire u; wireu; wireu; 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

  5. 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; inputClk,Rst,ScEn,ScIn; output ScOut; initial Q = {width{1'bx}}; always @(posedge Clk ornegedge 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

  6. 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

  7. 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; initialbegin #1; for (i=0; i<=15; i=i+1) DBus[i]=1; end initialbegin $display("DBus = %b",DBus); #2; $display("DBus = %b",DBus); $stop; end endmodule

  8. 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șiregAdupă 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;

  9. 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;

  10. 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.

  11. 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.

  12. 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; outputcarry_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

More Related