<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ro">
	<id>http://wiki.dcae.pub.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ipascal</id>
	<title>WikiLabs - Contribuții utilizator [ro]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.dcae.pub.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ipascal"/>
	<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php/Special:Contribu%C8%9Bii/Ipascal"/>
	<updated>2026-05-24T17:01:24Z</updated>
	<subtitle>Contribuții utilizator</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_2&amp;diff=6863</id>
		<title>CID Aplicatii 2</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_2&amp;diff=6863"/>
		<updated>2021-03-09T17:47:39Z</updated>

		<summary type="html">&lt;p&gt;Ipascal: /* Exercitii suplimentare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Module de test - Introducere==&lt;br /&gt;
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 circuit si modulul sau de test circuit_TB):&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Circuit_TB.PNG ‎| 400px]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Observatii:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Modulul de test NU are intrari sau iesiri si nu este sintetizabil. Toate procesele au loc in interiorul acestuia.&lt;br /&gt;
* 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.&lt;br /&gt;
* Generatorul  de  semnale  de  test  va  genera  cate  un  semnal  pentru  fiecare  intrare  a circuitului.  Tinand  cont  ca  aceasta  generare  se  face in  blocuri initial,  trebuie  sa definim cate un semnal de test de tip reg pentru fiecare intrare a modulului testat.&lt;br /&gt;
* Pentru fiecare iesire a modulului testat, definim cate un semnal de tip wire. Acesta poate fi evaluat mai departe intr-un bloc de evaluare automata.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Notiuni de sintaxa&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Variabilele de tip &amp;#039;&amp;#039;wire&amp;#039;&amp;#039; sunt folosite pentru a conecta elemente dintr-un design. Acestea pot fi citite sau asignate, insa nu pot stoca valori&lt;br /&gt;
* Variabilele de tip &amp;#039;&amp;#039;reg&amp;#039;&amp;#039; sunt folosite pentru a stoca date.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
&lt;br /&gt;
Descrieti structural circuitul reprezentat mai jos si creati pentru acesta un modul de test.&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Gates2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea Verilog a circuitului&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module exemplul1(out, in0, in1, sel);&lt;br /&gt;
&lt;br /&gt;
  output out;&lt;br /&gt;
  input in0;&lt;br /&gt;
  input in1;&lt;br /&gt;
  input sel;&lt;br /&gt;
  wire w1, w2, w3;&lt;br /&gt;
&lt;br /&gt;
  not inverter_gate(w1, sel);&lt;br /&gt;
  and and_gate1(w2, in0, w1);&lt;br /&gt;
  and and_gate2(w3, sel, in1);&lt;br /&gt;
  or or_gate(out, w2, w3);&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea Verilog a modulului de test&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
`timescale 1ns/1ps&lt;br /&gt;
&lt;br /&gt;
module exemplul1_TB();&lt;br /&gt;
&lt;br /&gt;
  reg in0_t, in1_t, sel_t;&lt;br /&gt;
  wire out_t;&lt;br /&gt;
  integer idx;&lt;br /&gt;
&lt;br /&gt;
  initial begin&lt;br /&gt;
    for(idx=0; idx&amp;lt;8;idx=idx+1) begin&lt;br /&gt;
      in0_t = idx[0];&lt;br /&gt;
      in1_t = idx[1];&lt;br /&gt;
      sel_t = idx[2];&lt;br /&gt;
      #1;&lt;br /&gt;
    end  &lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  exemplul1DUT(out_t, in0_t, in1_t, sel_t);&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Notiuni de sintaxa&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Tipul de date &amp;#039;&amp;#039;integer&amp;#039;&amp;#039; este reprezinta o variabila de tip &amp;#039;&amp;#039;reg&amp;#039;&amp;#039; definit pe 32 de biti (&amp;#039;&amp;#039;reg[31:0]&amp;#039;&amp;#039; )&lt;br /&gt;
* Blocul &amp;#039;&amp;#039;initial&amp;#039;&amp;#039; se executa intotdeauna la timpul 0 al simularii. In cazul in care sunt definite mai multe blocuri initial, acestea se vor executa in paralel.&lt;br /&gt;
* &amp;#039;&amp;#039; `timescale&amp;#039;&amp;#039; este o directiva de preprocesare care ii indica simulatorului unitatea default de masurarea a timpului si precizia pasului de simulare. In cazul de mai sus &amp;#039;&amp;#039;`timescale 1ns/1ps&amp;#039;&amp;#039; inseamna ca precizia de simulare este 1ps, iar unitate de masura a timpului este in ns.&lt;br /&gt;
* Pentru a astepta un anumit interval de tip se pot folosi instructiuni de intarziere:&lt;br /&gt;
** &amp;#039;&amp;#039;#1;&amp;#039;&amp;#039; - Asteapta o unitate de timp (conform celei specificate in directiva &amp;#039;&amp;#039;`timescale&amp;#039;&amp;#039;) Intarzierile cu &amp;quot;#&amp;quot; nu sunt recomandate in testarea circuitelor secventiale.  Exemple:&lt;br /&gt;
** &amp;#039;&amp;#039;#5ns;&amp;#039;&amp;#039; - Asteapta 5 nanosecunde&lt;br /&gt;
** &amp;#039;&amp;#039;#12us;&amp;#039;&amp;#039; - Asteapta 12 microsecunde&lt;br /&gt;
** &amp;#039;&amp;#039;#1s;&amp;#039;&amp;#039; - Asteapta o secunda&lt;br /&gt;
  &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Observatii:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Modulul  exemplul1  este  implementat  folosind  instantieri  ale  portilor  logice  predefinite  in Verilog. &lt;br /&gt;
* 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 conecta automat. Pentru portile logice, interfata este de tipul (out, in0, in1, ....).&lt;br /&gt;
* 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.&lt;br /&gt;
* Pentru modulul de test(exemplul1_TB), observam ca interfata acestuia este goala (nu exista intrari sau iesiri).&lt;br /&gt;
* 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.  &amp;#039;&amp;#039;&amp;#039;Atentie!&amp;#039;&amp;#039;&amp;#039; Dimensiunea  acestor semnale trebuie sa corespunda cu dimensiunea semnalelor din interfata modului la care vor fi legate.&lt;br /&gt;
* Generarea semnalelor de test a fost facuta cu ajutorul unei bucle de tip for care 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. &lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
Descrieti functional circuitul anterior cu ajutorul operatorilor Verilog si realizati un modul de test cu evaluare automata.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea Verilog a circuitului&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module exemplul2(&lt;br /&gt;
  output out,&lt;br /&gt;
  input in0,&lt;br /&gt;
  input in1,&lt;br /&gt;
  input sel&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
  assign out = ((~sel) &amp;amp; in0) | (sel &amp;amp; in1);&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea Verilog a modulului de test&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
`timescale 1ns/1ps&lt;br /&gt;
&lt;br /&gt;
module exemplul2_TB();&lt;br /&gt;
&lt;br /&gt;
  reg in0_t, in1_t, sel_t;&lt;br /&gt;
  wire out_t;&lt;br /&gt;
  integer idx; //index for loop&lt;br /&gt;
  reg flag; //test status flag&lt;br /&gt;
&lt;br /&gt;
  initial begin&lt;br /&gt;
    flag = 0;&lt;br /&gt;
    for(idx=0; idx&amp;lt;8;idx=idx+1)  begin&lt;br /&gt;
      in0_t = idx[0];&lt;br /&gt;
      in1_t = idx[1];&lt;br /&gt;
      sel_t = idx[2];&lt;br /&gt;
      #1;&lt;br /&gt;
      if(((sel_t == 0) &amp;amp;&amp;amp; (out_t == in0_t)) || ((sel_t == 1) &amp;amp;&amp;amp; (out_t == in1_t))) begin &lt;br /&gt;
      end else begin&lt;br /&gt;
        flag = 1; &lt;br /&gt;
        $display(&amp;quot;TEST_FAIL at sel = %b, in0 = %b, in1 = %b, out = %b&amp;quot;, sel_t, in0_t, in1_t, out_t);&lt;br /&gt;
      end &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if(flag == 0)&lt;br /&gt;
      $display(&amp;quot;TEST_PASS&amp;quot;);&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  exemplul2 dut(&lt;br /&gt;
    .in0(in0_t),&lt;br /&gt;
    .in1(in1_t),&lt;br /&gt;
    .sel(sel_t),&lt;br /&gt;
    .out(out_t));&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Elemente de sintaxa&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Functia de sistem &amp;#039;&amp;#039;$display&amp;#039;&amp;#039; este folosita pentru a printa mesaje in consola. Aceasta are sintaxa similara cu function &amp;#039;&amp;#039;printf&amp;#039;&amp;#039; din C. Aceasta este nesintetizabila si nu ar trebui folosita in modulele proiectate decat pentru debug. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Observatii:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Pentru  modulul  de  test: Pe  langa  generarea  semnalelor  de  test,  observam  ca  la  fiecare  pas testam  corectitudinea  iesirii.  Asa  cum  am  observat,  circuitul  realizeaza  urmatoarea  functie: atunci cand &amp;#039;&amp;#039;sel&amp;#039;&amp;#039; este 0, &amp;#039;&amp;#039;out&amp;#039;&amp;#039; va fi egal cu &amp;#039;&amp;#039;in0&amp;#039;&amp;#039;, iar atunci cand &amp;#039;&amp;#039;sel&amp;#039;&amp;#039; este 1, &amp;#039;&amp;#039;out&amp;#039;&amp;#039; va fi egal cu &amp;#039;&amp;#039;in1&amp;#039;&amp;#039;. Ne vom folosi de acest lucru pentru evaluarea automata.&lt;br /&gt;
* Consideram  un  fanion &amp;#039;&amp;#039;flag&amp;#039;&amp;#039;,  de  tip &amp;#039;&amp;#039;reg&amp;#039;&amp;#039; deoarece  isi  va  modifica  valoarea  intr-un  bloc &amp;#039;&amp;#039;initial&amp;#039;&amp;#039;,  pe  care  il  vom  initializa  cu  0  (prezumtia  de  nevinovatie– consideram  initial circuitul corect). Testam conditia de corectitudine la fiecare pas de generare a semnalelor de test (la fiecare iteratie a buclei &amp;#039;&amp;#039;for&amp;#039;&amp;#039;) si daca ea este indeplinita, nimic nu se intampla cu &amp;#039;&amp;#039;flag&amp;#039;&amp;#039;, ramanand  0. Daca  acesta  conditie  nu  este  indeplinita  cel  putin  o  data, &amp;#039;&amp;#039;flag&amp;#039;&amp;#039; se  va  face  1, semnalizand   ca   apare   cel   putin   un   caz   incorect, afisandu-se totodata in   consola   cu &amp;#039;&amp;#039;$display&amp;#039;&amp;#039; mesajul  TEST_FAIL  si  starea  semnalelor  in  momentul  acestuia.  La  iesirea  din bucla  testam  din  nou  fanionul  si  daca  acesta  este  0,  inseamna  ca  nu  a  aparut  nici  macar  un caz incorect, afisand in cazul acesta mesajul TEST_PASS.&lt;br /&gt;
* Instantierea modulului testat se face astfel: &lt;br /&gt;
               &amp;#039;&amp;#039;.semnal_interfata_modul_testat(semnalul_la care_va_fi_conectat)&amp;#039;&amp;#039;&lt;br /&gt;
Aceasta modalitate ne ofera controlul asupra conexiunilor, fara constrangeri de ordine.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 3==&lt;br /&gt;
Descrieti comportamental acelasi circuit, folosind blocurile assign conditionat, always + if si always + case.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea Verilog a circuitului&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039; Folosing &amp;#039;&amp;#039;assign&amp;#039;&amp;#039; conditionat&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module exemplul3(&lt;br /&gt;
  output out,&lt;br /&gt;
  input in0,&lt;br /&gt;
  input in1, &lt;br /&gt;
  input sel&lt;br /&gt;
  );&lt;br /&gt;
 &lt;br /&gt;
  assign out = (sel == 0) ? in0 : in1;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039; Folosing &amp;#039;&amp;#039;always&amp;#039;&amp;#039; si &amp;#039;&amp;#039;if&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module exemplul3(&lt;br /&gt;
  output out,&lt;br /&gt;
  input in0,&lt;br /&gt;
  input in1, &lt;br /&gt;
  input sel&lt;br /&gt;
  );&lt;br /&gt;
 &lt;br /&gt;
  always@(in0 or in1 or sel) begin&lt;br /&gt;
    if(sel == 0)&lt;br /&gt;
      out = in0;&lt;br /&gt;
    else&lt;br /&gt;
      out = in1;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039; Folosing &amp;#039;&amp;#039;always&amp;#039;&amp;#039; si &amp;#039;&amp;#039;case&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module exemplul3(&lt;br /&gt;
  output out,&lt;br /&gt;
  input in0,&lt;br /&gt;
  input in1, &lt;br /&gt;
  input sel&lt;br /&gt;
  );&lt;br /&gt;
 &lt;br /&gt;
  always@(*) begin&lt;br /&gt;
    case(sel)&lt;br /&gt;
      1&amp;#039;b0: out = in0;&lt;br /&gt;
      1&amp;#039;b1: out = in1;&lt;br /&gt;
      default: out = in0;&lt;br /&gt;
    endcase&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Elemente de sintaxa&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Blocul &amp;#039;&amp;#039;always&amp;#039;&amp;#039; descrie un comportament repetitiv. Acesta se executa atunci cand se schimba un element din lista de senzitivitate &amp;quot;@(...)&amp;quot;. In functie de semnalele definite in lista de senzitivitate, blocul always poate avea atat comportament combinational, cat si secvential (vezi [[Verilog]] pentru mai multe detalii).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Observatii: &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* In primul caz, &amp;#039;&amp;#039;assign&amp;#039;&amp;#039; conditionat are o sintaxa asemanatoare cu cea a limbajului C: &lt;br /&gt;
         &amp;#039;&amp;#039;(conditie) ? semnalul_cond_indeplinita : semnal_cond_neindeplinita; &amp;#039;&amp;#039; &lt;br /&gt;
* In  cazul  2,  folosind  un  bloc &amp;#039;&amp;#039;always&amp;#039;&amp;#039; pentru  actualizarea  semnalului &amp;#039;&amp;#039;out&amp;#039;&amp;#039;,  acesta  trebuie declarat  ca &amp;#039;&amp;#039;reg&amp;#039;&amp;#039; (&amp;#039;&amp;#039;output reg out&amp;#039;&amp;#039;). In  interiorul  parantezelor  blocului &amp;#039;&amp;#039;always&amp;#039;&amp;#039; punem lista  de  semnale la care  acesta va fi sensibil. Fiind un circuit combinational, &amp;#039;&amp;#039;out&amp;#039;&amp;#039; trebuie sa fie  sensibil imediat la  toate  semnalele  care  il  influenteaza. Putem  inlocui  toata  aceasta  lista cu *. Asta ne asigura ca nu am omis niciun semnal.&lt;br /&gt;
* In  cazul  3,  folosim  *  pentru  lista  de  senzitivitati  a  circuitului  si  un  bloc case.  &amp;#039;&amp;#039;&amp;#039;Atentie!&amp;#039;&amp;#039;&amp;#039;  Desi aici este clar ca am acoperit toate combinatiile posibile ale lui sel(0 si 1), pentru combinatii complexe este posibil sa omitem cazuri si astfel circuitul nostru se va transforma intr-unul de memorare. Ca sa evitam acest lucru, definim si un caz default.&lt;br /&gt;
* Se  poate  folosi modulul  de  test  anterior  pentru  testare,  cu  observatia  ca modulul  instantiat se va denumi exemplul3.&lt;br /&gt;
&lt;br /&gt;
== Exercitii suplimentare ==&lt;br /&gt;
1. Scrieti un modul de test pentru un sumator pe 4 biti, descris cu ajutorul Verilog astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module sum(&lt;br /&gt;
  input[3:0] a,&lt;br /&gt;
  input[3:0] b,&lt;br /&gt;
  output[4:0] sum,&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  assign sum = a + b;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Scrieti un modul de test pentru un comparator, descris cu ajutorul Verilog astfel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module comp(&lt;br /&gt;
  input[3:0] a,&lt;br /&gt;
  input[3:0] b,&lt;br /&gt;
  output lt,&lt;br /&gt;
  output gt,&lt;br /&gt;
  output eq,&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  assign lt = a &amp;lt; b;&lt;br /&gt;
  assign gt = a &amp;gt; b;&lt;br /&gt;
  assign eq = a == b;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ipascal</name></author>
	</entry>
</feed>