Diferență între revizuiri ale paginii „CID aplicatii 5 : Exercitii cu circuite combinationale”

De la WikiLabs
Jump to navigationJump to search
(Pagină nouă: ==Teorie== Acest laborator are rolul de a sedimenta cunostiintele dobandite anterior. El consta in exercitii separate, unele date ca subiect la lucrarea 1 in anii anteriori....)
 
Linia 65: Linia 65:
  
 
==Exercitii==
 
==Exercitii==
1) Descrieți comportamental o unitate aritmetico-logică (ALU) care are la intrare 2 numere binare de câte 8 biți și poate calcula următoarele funcții:
+
===Exercitiul 1: ALU - descriere comportamentala===
 +
Descrieți comportamental o unitate aritmetico-logică (ALU) care are la intrare 2 numere binare de câte 8 biți și poate calcula următoarele funcții:
 
:- suma celor două numere
 
:- suma celor două numere
 
:- diferența celor două numere
 
:- diferența celor două numere
Linia 82: Linia 83:
  
  
2) ALU - descriere structurala
+
===Exercitiul 2: ALU - descriere structurala===
 
+
 
[https://wiki.dcae.pub.ro/images/8/8f/Subiect_big_alu.pdf subiect_alu.pdf]
 
[https://wiki.dcae.pub.ro/images/8/8f/Subiect_big_alu.pdf subiect_alu.pdf]
 
 
Linia 89: Linia 90:
  
 
a) cu fir aditional:
 
a) cu fir aditional:
:wire [1:0] fir_aditional1;
+
:''wire [1:0] fir_aditional1;''
:assign fir_aditional1 = instruction[11:10];
+
:''assign fir_aditional1 = instruction[11:10];''
:// apoi la instantiere: .sel(fir_aditional1),
+
:// apoi la instantiere: ''.sel(fir_aditional1),''
  
 
b) direct in instantiere;
 
b) direct in instantiere;
 
:la instantierea celor 2 mux4 din stanga, direct:  
 
:la instantierea celor 2 mux4 din stanga, direct:  
::.sel(instruction[11:10]),
+
::''.sel(instruction[11:10]),''
  
  
  
3) muxes
+
===Exercitiul 3:===
  
 
[https://wiki.dcae.pub.ro/images/3/3a/Subiect_muxes.pdf subiect_muxes.pdf]
 
[https://wiki.dcae.pub.ro/images/3/3a/Subiect_muxes.pdf subiect_muxes.pdf]
 
 
  
4) rom_luts
+
===Exercitiul 4:===
  
 
[https://wiki.dcae.pub.ro/images/2/2e/Subiect_rom_luts.pdf rom_luts.pdf]
 
[https://wiki.dcae.pub.ro/images/2/2e/Subiect_rom_luts.pdf rom_luts.pdf]

Versiunea de la data 19 februarie 2022 16:30

Teorie

Acest laborator are rolul de a sedimenta cunostiintele dobandite anterior.

El consta in exercitii separate, unele date ca subiect la lucrarea 1 in anii anteriori.


Teorie: Parametrizare

Parametrizarea este un mod de a generaliza codul scris pentru a nu fi nevoie sa faci acelasi modul de mai multe ori doar pentru ca isi schimba o dimensiune.

Pentru a intelege mai clar avantajele si sintaxa urmariti urmatorul exemplu: Fisierul sumator.v:

module sumator # // <= diez ca sa stie ca urmeaza lista cu paramteri
				( // parametri 
					parameter data_size = 4 // valoare default 4
					// alti parametri aici daca este nevoie 
				)
				( // interfata 
					input wire [data_size-1:0] in0, // si pot folosii parametrul "data_size" pentru dimensiunea bus-ului
					input wire [data_size-1:0] in1,
					output wire [data_size-1:0] out0
				);

assign out0 = in0 + in1;				
				
endmodule

Cand se instantiaza un modul parametrizat, se specifica valorile parametrilor astfel:

 sumator # ( // parametri 
		.data_size(8)   // se genereaza un sumator pe 8b
	) 
        nume_instanta_0
	( // interfata 
		.in0(fir_in0), 
		.in1(fir_in1),
		.out0(fir_out0)
	);

 sumator # ( // parametri 
		.data_size(32)  // se genereaza un sumator pe 32b
	) 
        nume_instanta_1
	( // interfata 
		.in0(fir_in0), 
		.in1(fir_in1),
		.out0(fir_out1)
	);

 sumator nume_instanta_2 // se genereaza un sumator de dimensiune default, aici 4, asa cum e scris in modulul "sumator"
	( // interfata 
		.in0(fir_in0), 
		.in1(fir_in1),
		.out0(fir_out2)
	);


Puteti folosi parametrizarea in exercitiul 3 de mai jos. Acolo sunt 2 tipuri de multiplexoare, unul cu intrarile pe 1 bit si unul cu intrarile pe 2 biti. Poate fi scris un singur modul parametrizat care sa acopere ambele situatii.


Exercitii

Exercitiul 1: ALU - descriere comportamentala

Descrieți comportamental o unitate aritmetico-logică (ALU) care are la intrare 2 numere binare de câte 8 biți și poate calcula următoarele funcții:

- suma celor două numere
- diferența celor două numere
- operații logice bit cu bit (bitwise): SI, SAU, XOR și inversele lor
- operandul din stanga trece neschimbat
- operandul din dreapta trece neschimbat
- numărul din stânga este deplasat la stânga cu nr. de poziții indicat de numărul din dreapta
- numărul din stânga este deplasat la dreapta cu nr. de poziții indicat de numărul din dreapta

Funcția executată la un anumit moment este determinată de configurația binară de pe intrarea de comandă (function).

ALU are de asemenea intrare de carry și ieșire de carry, plus alte două ieșiri - indicatori - pentru cazurile când rezultatul este zero și când cei doi operanzi sunt egali.

Intrarea de control va fi facuta pe 4 biti ca sa permita existenta a 16 operatii posibile. Fiecare numar de pe intrarea de control (combinatie de 0 si 1) va reprezenta o operatie din cele de mai sus. Scrierea se va face folosind un bloc "case" in functie de aceasta intrare.


Exercitiul 2: ALU - descriere structurala

subiect_alu.pdf

Daca se doreste selectarea doar a anumitor biti dintr-un bus (cum se vrea din instruction) acest lucru se poate face in 2 feluri:

a) cu fir aditional:

wire [1:0] fir_aditional1;
assign fir_aditional1 = instruction[11:10];
// apoi la instantiere: .sel(fir_aditional1),

b) direct in instantiere;

la instantierea celor 2 mux4 din stanga, direct:
.sel(instruction[11:10]),


Exercitiul 3:

subiect_muxes.pdf


Exercitiul 4:

rom_luts.pdf