CID Lab Lucrarea 5: Diferență între versiuni

De la WikiLabs
Jump to navigationJump to search
Linia 34: Linia 34:


<syntaxhighlight lang="verilog">
<syntaxhighlight lang="verilog">
module memorie_fifo(  
module COUNTER(
input clock, rst, // semnal de ceas si reset
    input clk,
input write_enable, // comanda de scriere
    output reg [31:0] cnt
read_enable, // comanda de citire
);
input [word_width-1 : 0] data_in, // date de intrare, aici pe 4 biti
output [word_width-1 : 0] data_out, // date de iesire, aici pe 4 biti
output reg empty, // semnal de iesire care este activ cand memoria este goala
          full, // semnal de iesire care este activ cand memoria este plina
output reg [adr_size:0] fifo_counter //nr locatii folosite, maxim 32


     );
always @(posedge clk) cnt <= cnt + 1;
 
endmodule
 
module ROM(
    input [3:0] in,
    output reg [3:0] out
);
 
always @(in)
     case(in)
        0:  out = 4'b1010;
        1:  out = 4'b0110;
        2:  out = 4'b0011;
        3:  out = 4'b1110;
        4:  out = 4'b1011;
        5:  out = 4'b1111;
        6:  out = 4'b0111;
        7:  out = 4'b1100;
        8:  out = 4'b0001;
        9:  out = 4'b0101;
        10: out = 4'b1101;
        11: out = 4'b0000;
        12: out = 4'b0010;
        13: out = 4'b0100;
        14: out = 4'b1000;
        15: out = 4'b1001;
    endcase
 
endmodule
</syntaxhighlight>
</syntaxhighlight>



Versiunea de la data 3 mai 2015 20:58

Noțiuni și cunoștințe necesare

Exemplu

  • Se va descrie în Verilog o memorie RAM 16x4b cu un port de citire-scriere sincron.
  • Se vor scrie contrâgerile necesare pentru a conecta
    • adresa la SW7-4 și data de intrare la SW3-0.
    • semnalul de activare a scrierii la unul din butoane (BTN0 ... BTN3).
    • ieșirea memoriei la LD3-0.
    • intrarea de ceas a memoriei la oscilatorul plăcii Nexys 2.
  • Scrieți adresele 3, 6 și 10 cu valorile 2, 1 respectiv 0, apoi citiți-le în aceeași ordine.

Exercițiu

  • Descrieți în Verilog o memorie RAM 16x8b cu două porturi:
    • Un port sincron de scriere (Write-Only) cu următoarele semnale:
      • WR_ADDR - adresa la care se scrie
      • WR_EN - comanda de scriere
      • WR_DATA - datele scrise
    • Un port sincron de citire (Read-Only) cu următoarele semnale:
      • RD_ADDR - adresa citită
      • RD_EN - comanda de citire
      • RD_DATA - datele citite
  • Memoria va fi instanțiată în modulul TOP conform figurii următoare:

module COUNTER(
    input clk,
    output reg [31:0] cnt
);

always @(posedge clk) cnt <= cnt + 1;

endmodule 

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

always @(in)
    case(in)
        0:  out = 4'b1010;
        1:  out = 4'b0110;
        2:  out = 4'b0011;
        3:  out = 4'b1110;
        4:  out = 4'b1011;
        5:  out = 4'b1111;
        6:  out = 4'b0111;
        7:  out = 4'b1100;
        8:  out = 4'b0001;
        9:  out = 4'b0101;
        10: out = 4'b1101;
        11: out = 4'b0000;
        12: out = 4'b0010;
        13: out = 4'b0100;
        14: out = 4'b1000;
        15: out = 4'b1001;
    endcase

endmodule
  • Scrieți constrângerile necesare pentru a conecta porturile modulului TOP:
    • DIN la SW7-4,
    • ADR la SW3-0,
    • WEN la BTN3,
    • DOUT la LD3-0,
    • intrarea de ceas la oscilatorul plăcii Nexys 2.
  • Scrieți memoria RAM cu valorile necesare pentru a produce pe DOUT o secvență de numere indicată de cadrul didactic.