Explicați funcționarea bistabilul cu facilități de scanare (caracteristică utilizată pentru testatibilitate):
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 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
Explicați funcționarea modelului de pad bidirecțional.
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
Explicați și corectați eroarea prezentă în următoarea porțiune de cod.
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
Explicați următoarele.
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;
Considerați următoarele specificații:
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;
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.
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.
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).
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.
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.
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.