Documente Academic
Documente Profesional
Documente Cultură
Lab 2 - Veriwell - DCD, Mux, Rom
Lab 2 - Veriwell - DCD, Mux, Rom
IMPLEMENTATE ÎN VERILOG
1. Scopul lucrării
Descrierea structurală şi comportamentală a principalelor structuri
combinaţionale de uz general în limbajul Verilog şi înţelegerea funcţionării lor prin
testare cu ajutorul simulatorului Veriwell.
2. Aparate necesare
- calculator compatibil Pentium
- sistem de operare Windows 95 sau superior
- programul VeriWell 2.0, produs de Wellspring Solutions, versiunea
freeware, disponibilă pe Internet
3. Consideraţii teoretice
Circuitele combinaţionale MSI (Medium Scale Integration) de uz general sunt
multiplexorul (MUX), decodificatorul (DCD) şi demultiplexorul (DMUX). Memoria
ROM (Read Only Memory) este tot o structură combinaţională. De obicei, este de
mari dimensiuni şi atunci este considerată o structură LSI (Large Scale Integration),
dar poate fi considerată şi o structură MSI atunci când este de mici dimensiuni.
Multiplexorul este un circuit care permite transmiterea datelor de la una
din cele 2 n căi de intrare la o singură cale de ieşire. Selecţia unei anumite intrări
de date se face prin aplicarea unui cod binar pe n linii de intrare, linii care se
numesc intrări de selecţie. Reprezentarea unui multiplexor pentru n = 4 este dată
în figura 3.1. Descrierea comportamentală a circuitului poate fi următoarea:
module mux16_1(out, in, sel);
endmodule
out = in[sel]
1
a b
if (cnt == 0)
0 1
cnt out = a;
S MUX
else
W
out = b;
out
Fig. 3.2 Multiplexor cu o intrare de selecţie şi 2 intrări de date şi modelul lui Verilog
input[3:0] sel;
input[15:0] in;
output out;
reg out; // se fac atribuiri lui out
endmodule
reg[3:0] sel;
reg[15:0] in;
wire out;
2
mux16_1 dut(out, in, sel);
reg[3:0] counter;
wire[6:0] segments;
endmodule
1 A B 0 1 2 3
A 2
DCD
0 0 0 0 1 1 1
B 2
0 1 2 3 0 1 1 0 1 1
1 0 1 1 0 1
P0 P1 P2 P3 1 1 1 1 1 0
a
f g b
e c
d
3
counter segments
BCD - 7 segmente 0000 1111110
3 a segments[6] 0001 0110000
counter[3] 2 0010 1101101
b segments[5]
0011 1111001
counter[2] 2
2 c segments[4] 0100 0110011
d segments[3] 0101 1011011
1
counter[1] 2 e segments[2] 0110 1011111
f segments[1] 0111 1110000
0
counter[0] 2 g segments[0] 1000 1111111
1001 1111011
initial begin
$readmemb("mem.dat", memory);
Toate circuitele s-au prezentat funcţional, fără alte intrări de validare a datelor
la ieşire (ENABLE, OUTPUT ENABLE), pentru simplitatea descrierilor.
ROM A2 A1 A0 O0 O1 O2 O3
O0 0 0 0 1 1 1 0
A2 0 0 1 1 1 0 1
O1 0 1 0 1 0 1 1
A1 0 1 1 0 1 1 1
O2 1 0 0 0 0 0 1
A0 1 0 1 0 0 1 0
O3 1 1 0 0 1 0 0
1 1 1 1 0 0 0
4
4. Modul de lucru
4.1. Se lansează în execuţie VeriWell 2.0, se deschide proiectul mux1.prj şi
se vizualizează fişierele componente mux1.v şi test_mux1.v. Faceţi simularea
circuitului şi verificaţi că nu aveţi erori. Vizualizaţi formele de undă, folosind
fereastra wavefile.vwf. Modificaţi fişierele proiectului, dar salvaţi-le cu alte nume
într-un subdirector nou, creat de dumneavoastră, şi reluaţi simulările pentru cazurile n
= 3 şi n = 2. Încercaţi modelul prezentat în figura 3.2 pentru n = 1. Formulaţi o
descriere structurală pentru acest ultim caz şi refaceţi simulările.
input[3:0] sel;
output[15:0] out;
endmodule
input[3:0] sel;
output[15:0] out;
endmodule
5
Verificaţi cele două modele prin simulare în mediul VeriWell. Comparaţi cele
două modele din punct de vedere al complexităţii lor. Folosind modelul structural
desenaţi schema logică cu porţi a decodificatorului prezentat.
initial begin
handle = $fopen("mem.dat");
channels = handle | 1;
$display("Generating contents of file mem.dat");
$fdisplay(channels, "@2");
$fclose(handle);
$readmemb("mem.dat", memory);
endmodule