Diferență între revizuiri ale paginii „CID Aplicatii 4”

De la WikiLabs
Jump to navigationJump to search
(Pagină nouă: Memoria ROM(Read-Only Memory)este un circuit combinationalfolosit pentru stocarea unor date ce pot fi accesate cu ajutorul unei intrari de adrese. Asa cum se intelege si di...)
 
Linia 1: Linia 1:
 +
== Memoria ROM–Introducere ==
 +
 
Memoria  ROM(Read-Only  Memory)este  un  circuit  combinationalfolosit  pentru  stocarea  unor date ce pot fi accesate cu ajutorul unei intrari de adrese. Asa cum se intelege si din nume, memoria ROM, in general, nu poate fi modificata.  
 
Memoria  ROM(Read-Only  Memory)este  un  circuit  combinationalfolosit  pentru  stocarea  unor date ce pot fi accesate cu ajutorul unei intrari de adrese. Asa cum se intelege si din nume, memoria ROM, in general, nu poate fi modificata.  
  
 
Pentru  a  intelege  termenul  de  memorie,  putem  face  urmatorul  exercitiude  imaginatie:  sa  ne gandim  la  un  dulap  cu  mai  multe  sertare.  Continutul  memoriei  este  reprezentat  de  continutul sertarelor, iar adresele sunt reprezentate de etichetele lipite pe aceste sertare, pentru a le identifica. Daca avem nevoie de continutul unui sertar, va trebui sa stim eticheta aferenta acestuia.
 
Pentru  a  intelege  termenul  de  memorie,  putem  face  urmatorul  exercitiude  imaginatie:  sa  ne gandim  la  un  dulap  cu  mai  multe  sertare.  Continutul  memoriei  este  reprezentat  de  continutul sertarelor, iar adresele sunt reprezentate de etichetele lipite pe aceste sertare, pentru a le identifica. Daca avem nevoie de continutul unui sertar, va trebui sa stim eticheta aferenta acestuia.
<br>
+
 
Am  intalnit memoria  ROMin aplicatiile anterioare, atunci  cand  am vorbit  despre  structura  unui FPGA. Am vazut  atunci cafunctiile logice erau implementate pe  FPGA prin intermediul unor LUT-uri (memorii  ROM),  care  stocau  iesirile  corespunzatoare  unor  combinatii  de  intrari.  Asadar,  in  cazul acela,  adreseleerau  reprezentate  de combinatii  ale  intrarilor,  iar  continutul  memoriei  era reprezentat de iesirile aferente acestor combinatii.  
+
 
 +
Am  intalnit memoria  ROM in aplicatiile anterioare, atunci  cand  am vorbit  despre  structura  unui FPGA. Am vazut  atunci cafunctiile logice erau implementate pe  FPGA prin intermediul unor LUT-uri (memorii  ROM),  care  stocau  iesirile  corespunzatoare  unor  combinatii  de  intrari.  Asadar,  in  cazul acela,  adreseleerau  reprezentate  de combinatii  ale  intrarilor,  iar  continutul  memoriei  era reprezentat de iesirile aferente acestor combinatii.  
 +
 
  
 
O memorie ROM are urmatorii parametrii: numerul de biti ai adresei, care este legat de numarul de  locatii  de  memorie  (cu  n  biti  de  adresa  putem  forma 2𝑛combinatii  diferite,  deci  putem  accesa maxim 2𝑛locatii  de  memorie)  si  dimensiunea  locatiei  de  memorie,  care  ne  spune  cat  de  multa informatie poate stoca o locatie de memorie.
 
O memorie ROM are urmatorii parametrii: numerul de biti ai adresei, care este legat de numarul de  locatii  de  memorie  (cu  n  biti  de  adresa  putem  forma 2𝑛combinatii  diferite,  deci  putem  accesa maxim 2𝑛locatii  de  memorie)  si  dimensiunea  locatiei  de  memorie,  care  ne  spune  cat  de  multa informatie poate stoca o locatie de memorie.
 +
  
 
Sa urmarim exemplul din figura urmatoare:
 
Sa urmarim exemplul din figura urmatoare:
 +
 +
[[Fișier:ROM memory.PNG ‎| 400px]]
 +
 +
 +
Aici,  adresa  are  dimensiunea  de  4  biti,  asadar  putem  accesa  cu  aceasta  16  locatii  diferite  de memorie. Dimensiunea  fiecarei  locatii este  de  8  biti, asadar  fiecare  locatie  de  memorie  poate  stoca numere  de  8  biti.  Spunem ca  memoria  ROM este  o memorie 4x8.  Capacitatea acestei memorii  este de 16 x 8 biti = 128 biti.
 +
 +
== Exemplul 1 ==
 +
 +
'''Scop''': Descrierea  comportamentala  a  unui decodor,  testarea  acestuia  prin  simulare  si  sinteza  pe FPGA.
 +
 +
Decodorul este circuitul care, pentru o anumita valoare a intrarii, va genera laiesire un sir binar care contine 1 pe pozitia cu indicele egal cu valorea intrarii si 0 in rest. De exemplul, decodorul de mai jos pe 2 biti, va avea urmatoarea corespondentaintrare-iesire:
 +
 +
{| class="wikitable"
 +
|-  align="center"
 +
||'''in''' || '''out'''
 +
|-  align="center"
 +
| 2'b00 || 4'b0001
 +
|- align="center"
 +
|2'b01 || 4'b0010
 +
|-  align="center"
 +
|2'b10 || 4'b0100
 +
|-  align="center"
 +
|2'b11 || 4'b1000
 +
|}
 +
 +
[[Fișier:Decoder.PNG ‎| 400px]]
 +
 +
 +
Vom implementa acest circuit ca o memorie ROM.
 +
 +
 +
'''Implementarea Verilog a circuitului'''
 +
<syntaxhighlight lang="Verilog">
 +
module Decoder(
 +
  input [1:0] in,
 +
  output reg [3:0] out
 +
  );
 +
 +
  always@(in) begin
 +
    case(in)
 +
      2'b00: out = 4'b0001;
 +
      2'b01: out = 4'b0010;
 +
      2'b10: out = 4'b0100;
 +
      2'b11: out = 4'b1000;
 +
      default: out = 4'b0000;
 +
    endcase
 +
  end
 +
 +
endmodule
 +
</syntaxhighlight>
 +
 +
 +
'''Implementarea Verilog a modulului de test'''
 +
 +
 +
<syntaxhighlight lang="Verilog">
 +
`timescale 1ns/1ps
 +
 +
module Decoder_TB();
 +
  reg [1:0] in_t;
 +
  wire [3:0] out_t;
 +
 
 +
  integer idx;
 +
 +
  initial begin
 +
    for(idx=0; idx<4; idx = idx + 1) begin
 +
      in_t = idx;
 +
      #1;
 +
    end
 +
    #2 $stop();
 +
  end
 +
 +
  Decoder DUT(
 +
    .in(in_t),
 +
    .out(out_t)
 +
  );
 +
 +
endmodule
 +
</syntaxhighlight>
 +
 +
 +
<syntaxhighlight lang="Verilog">
 +
</syntaxhighlight>

Versiunea de la data 21 martie 2021 13:45

Memoria ROM–Introducere

Memoria ROM(Read-Only Memory)este un circuit combinationalfolosit pentru stocarea unor date ce pot fi accesate cu ajutorul unei intrari de adrese. Asa cum se intelege si din nume, memoria ROM, in general, nu poate fi modificata.

Pentru a intelege termenul de memorie, putem face urmatorul exercitiude imaginatie: sa ne gandim la un dulap cu mai multe sertare. Continutul memoriei este reprezentat de continutul sertarelor, iar adresele sunt reprezentate de etichetele lipite pe aceste sertare, pentru a le identifica. Daca avem nevoie de continutul unui sertar, va trebui sa stim eticheta aferenta acestuia.


Am intalnit memoria ROM in aplicatiile anterioare, atunci cand am vorbit despre structura unui FPGA. Am vazut atunci cafunctiile logice erau implementate pe FPGA prin intermediul unor LUT-uri (memorii ROM), care stocau iesirile corespunzatoare unor combinatii de intrari. Asadar, in cazul acela, adreseleerau reprezentate de combinatii ale intrarilor, iar continutul memoriei era reprezentat de iesirile aferente acestor combinatii.


O memorie ROM are urmatorii parametrii: numerul de biti ai adresei, care este legat de numarul de locatii de memorie (cu n biti de adresa putem forma 2𝑛combinatii diferite, deci putem accesa maxim 2𝑛locatii de memorie) si dimensiunea locatiei de memorie, care ne spune cat de multa informatie poate stoca o locatie de memorie.


Sa urmarim exemplul din figura urmatoare:

ROM memory.PNG


Aici, adresa are dimensiunea de 4 biti, asadar putem accesa cu aceasta 16 locatii diferite de memorie. Dimensiunea fiecarei locatii este de 8 biti, asadar fiecare locatie de memorie poate stoca numere de 8 biti. Spunem ca memoria ROM este o memorie 4x8. Capacitatea acestei memorii este de 16 x 8 biti = 128 biti.

Exemplul 1

Scop: Descrierea comportamentala a unui decodor, testarea acestuia prin simulare si sinteza pe FPGA.

Decodorul este circuitul care, pentru o anumita valoare a intrarii, va genera laiesire un sir binar care contine 1 pe pozitia cu indicele egal cu valorea intrarii si 0 in rest. De exemplul, decodorul de mai jos pe 2 biti, va avea urmatoarea corespondentaintrare-iesire:

in out
2'b00 4'b0001
2'b01 4'b0010
2'b10 4'b0100
2'b11 4'b1000

Decoder.PNG


Vom implementa acest circuit ca o memorie ROM.


Implementarea Verilog a circuitului

module Decoder(
  input [1:0] in,
  output reg [3:0] out
  );

  always@(in) begin
    case(in)
      2'b00: out = 4'b0001;
      2'b01: out = 4'b0010;
      2'b10: out = 4'b0100;
      2'b11: out = 4'b1000;
      default: out = 4'b0000;
    endcase
  end

endmodule


Implementarea Verilog a modulului de test


`timescale 1ns/1ps

module Decoder_TB();
  reg [1:0] in_t;
  wire [3:0] out_t;
  
  integer idx;

  initial begin
    for(idx=0; idx<4; idx = idx + 1) begin
      in_t = idx;
      #1;
    end 
    #2 $stop();
  end

  Decoder DUT(
    .in(in_t),
    .out(out_t)
  );

endmodule