CID Aplicatii 2: Diferență între versiuni

De la WikiLabs
(Pagină nouă: Work in progress)
 
Linia 1: Linia 1:
Work in progress
+
 
 +
==Module de test - Introducere==
 +
Modulul  de  test  este  folosit  pentru  testarea  circuitului  descris,prin  simulare,si  nu  este sintetizabil. Simularea permite detectia rapida a erorilor de implementare si corectarea acestora.Ideea generala a unui modul de  test este  descrisa in figura de  mai jos(consideram un circuit cu numele circuitsi modulul sau de test circuit_TB):
 +
 
 +
TODO: Insert image
 +
 
 +
'''Observatii:'''
 +
 
 +
* Modulul de test NU are intrari sau iesiresi nu este sintetizabil. Toate procesele au loc in interiorul acestuia.
 +
* Modulul de test are in principal urmatoarele componente: o instantiere a modulului testat  (circuit),  un  generator  de  semnale  de  test  si,optional,  un  bloc  de  evaluare automata  a  rezultatului.Aceasta  evaluare  automata  devine  insa  obligatorie  pentru circuitele complexe.o
 +
* Generatorul  de  semnale  de  test  va  genera  cate  un  semnal  pentru  fiecare  intrare  a circuitului.  Tinand  cont  ca  aceasta  generare  se  face in  blocuriinitial,  trebuie  sa definim cate un semnal de test de tip regpentru fiecare intrare a modulului testat.
 +
* Pentru fiecare iesire a modulului testat, definim cate un semnal de tip wire. Acesta poate fi evaluatmai departe intr-un bloc de evaluare automata.
 +
 
 +
==Exemplul 1==
 +
 
 +
'''Scop''': Descrierea structurala a unui circuit simplu si realizarea unui modul de test pentru acesta
 +
 
 +
TODO: Insert image
 +
 
 +
'''Implementarea Verilog a circuitului'''
 +
<syntaxhighlight lang="Verilog">
 +
module exemplul1(out, in0, in1, sel);
 +
 
 +
  output out;
 +
  input in0;
 +
  input in1;
 +
  input sel;
 +
  wire w1, w2, w3;
 +
 
 +
  not inverter_gate(w1, sel);
 +
  and and_gate1(w2, in0, w1);
 +
  and and_gate2(w3, sel, in1);
 +
  or or_gate(out, w2, w3);
 +
 
 +
endmodule
 +
</syntaxhighlight>
 +
 
 +
'''Implementarea Verilog a modulului de test'''
 +
<syntaxhighlight lang="Verilog">
 +
`timescale 1ns/1ps
 +
 
 +
module exemplul1_TB();
 +
 
 +
  reg in0_t, in1_t, sel_t;
 +
  wire out_t;
 +
  integer idx;
 +
 
 +
  initial begin
 +
    for(idx=0; idx<8;idx=idx+1) begin
 +
      in0_t = idx[0];
 +
      in1_t = idx[1];
 +
      sel_t = idx[2];
 +
      #1;
 +
    end 
 +
  end
 +
 
 +
  exemplul1DUT(out_t, in0_t, in1_t, sel_t);
 +
 
 +
endmodule
 +
</syntaxhighlight>
 +
 
 +
'''Observatii:'''
 +
* Modulul  exemplul1  este  implementat  folosind  instantieri  ale  portilor  logice  predefinite  in Verilog.
 +
* Instantierea, in general, se face astfel: tip_modul nume_modul (...intefata...). In cazul nostru, interfatarea  se  face  implicit  prin  ordine:  punem  semnalele  la  care  modulul  trebuie  sa  se conecteze in ordine si acestea se vor conectaautomat. Pentru portile logice, interfata este de tipul (out, in0, in1, ....).
 +
* Acest  mod  de  interfatare  este  oarecum  acceptat  pentru  modulele  foarte  simple, dar nerecomandat  pentru  modulele  complexe,  unde  gresirea  ordinii  duce  la  implementarea gresita a circuitelor.
 +
* Pentru modulul de test(exemplul1_TB), observam ca interfata acestuia este goala (nu exista intrari sau iesiri).
 +
* De  asemenea,  pentru  fiecare  intrare  a  modulului  testat  se  defineste  un  semnal  de  tip reg, iar  pentru  fiecare  iesire  se  defineste  un  semnal  de  tip wire.  '''Atentie!''' Dimensiunea  acestor semnale trebuie sa corespunda cu dimensiunea semnalelor din interfata modului la care vor fi legate.
 +
* Generarea semnalelor de test a fost facuta cu ajutorul unei bucle de tip forcare variaza un index  intre  0  si  7  (generam  astfel  toate  variantele  de  biti  pentru  cele  trei  semnale  de  1  bit: sel_t, in0_tsi in1_t, fiecare legandu-se la un bit al indexului).In  instantierea  modulului  exemplu1  observam  din  nou  interfatarea  implicita  prin  ordine.
 +
* Analizand  ordinea  semnalelor  din  interfata  modulului  exemplul1  si  ordinea  legaturilor  din instantierea acestuia in exemplul1_TB, out_t se va lega la out, sel_tla sel, in0_tla in0 si in1_t la in1.

Versiunea de la data 6 martie 2021 22:34

Module de test - Introducere

Modulul de test este folosit pentru testarea circuitului descris,prin simulare,si nu este sintetizabil. Simularea permite detectia rapida a erorilor de implementare si corectarea acestora.Ideea generala a unui modul de test este descrisa in figura de mai jos(consideram un circuit cu numele circuitsi modulul sau de test circuit_TB):

TODO: Insert image

Observatii:

  • Modulul de test NU are intrari sau iesiresi nu este sintetizabil. Toate procesele au loc in interiorul acestuia.
  • Modulul de test are in principal urmatoarele componente: o instantiere a modulului testat (circuit), un generator de semnale de test si,optional, un bloc de evaluare automata a rezultatului.Aceasta evaluare automata devine insa obligatorie pentru circuitele complexe.o
  • Generatorul de semnale de test va genera cate un semnal pentru fiecare intrare a circuitului. Tinand cont ca aceasta generare se face in blocuriinitial, trebuie sa definim cate un semnal de test de tip regpentru fiecare intrare a modulului testat.
  • Pentru fiecare iesire a modulului testat, definim cate un semnal de tip wire. Acesta poate fi evaluatmai departe intr-un bloc de evaluare automata.

Exemplul 1

Scop: Descrierea structurala a unui circuit simplu si realizarea unui modul de test pentru acesta

TODO: Insert image

Implementarea Verilog a circuitului

module exemplul1(out, in0, in1, sel);

  output out;
  input in0;
  input in1;
  input sel;
  wire w1, w2, w3;

  not inverter_gate(w1, sel);
  and and_gate1(w2, in0, w1);
  and and_gate2(w3, sel, in1);
  or or_gate(out, w2, w3);

endmodule

Implementarea Verilog a modulului de test

`timescale 1ns/1ps

module exemplul1_TB();

  reg in0_t, in1_t, sel_t;
  wire out_t;
  integer idx;

  initial begin
    for(idx=0; idx<8;idx=idx+1) begin
      in0_t = idx[0];
      in1_t = idx[1];
      sel_t = idx[2];
      #1;
    end  
  end
  
  exemplul1DUT(out_t, in0_t, in1_t, sel_t);

endmodule

Observatii:

  • Modulul exemplul1 este implementat folosind instantieri ale portilor logice predefinite in Verilog.
  • Instantierea, in general, se face astfel: tip_modul nume_modul (...intefata...). In cazul nostru, interfatarea se face implicit prin ordine: punem semnalele la care modulul trebuie sa se conecteze in ordine si acestea se vor conectaautomat. Pentru portile logice, interfata este de tipul (out, in0, in1, ....).
  • Acest mod de interfatare este oarecum acceptat pentru modulele foarte simple, dar nerecomandat pentru modulele complexe, unde gresirea ordinii duce la implementarea gresita a circuitelor.
  • Pentru modulul de test(exemplul1_TB), observam ca interfata acestuia este goala (nu exista intrari sau iesiri).
  • De asemenea, pentru fiecare intrare a modulului testat se defineste un semnal de tip reg, iar pentru fiecare iesire se defineste un semnal de tip wire. Atentie! Dimensiunea acestor semnale trebuie sa corespunda cu dimensiunea semnalelor din interfata modului la care vor fi legate.
  • Generarea semnalelor de test a fost facuta cu ajutorul unei bucle de tip forcare variaza un index intre 0 si 7 (generam astfel toate variantele de biti pentru cele trei semnale de 1 bit: sel_t, in0_tsi in1_t, fiecare legandu-se la un bit al indexului).In instantierea modulului exemplu1 observam din nou interfatarea implicita prin ordine.
  • Analizand ordinea semnalelor din interfata modulului exemplul1 si ordinea legaturilor din instantierea acestuia in exemplul1_TB, out_t se va lega la out, sel_tla sel, in0_tla in0 si in1_t la in1.