CID Lab Lucrarea 4

De la WikiLabs
Jump to navigationJump to search

Noțiuni și cunoștințe necesare

Cerințe

Schema bloc a circuitului
  • Descrieți în Verilog o memorie RAM 16x8 cu un port de citire-scriere sincron. Scrieți un modul de test pentru acest circuit scriind anumite adrese cu anumite valori si apoi citindu-le. Simulați memoria RAM în Modelsim.
  • Modificați modulul de control pentru afișajul cu 7 segmente din lucrarea 3 de laborator, astfel încât acesta să afișeze simbolurile hexazecimale (A,b,C,d,E,F) pentru valorile 10 - 15.
  • Descrieți in Verilog un modul de debounce. Scrieți un modul de test pentru acest circuit. Simulați memoria RAM în Modelsim.
  • Modificați numărătorul de la lucrarea 3 astfel încât să fie pe 4 biți, eliminați portul de reset și adăugați un port enable care să permită incrementarea doar când acesta este 1.
  • Folosind modulele anterioare și blocuri de instanțiere, descrieți în Verilog un circuit (numit Top) în care să utilizați un numărător care să dea adresa memoriei, iar numărarea să se facă doar la apăsarea unui buton (folosiți pentru buton un modul de debounce). Legați ieșirea numărătorului la intrarea de adresă a memoriei și la intrarea modulului de control al afișajului (transcodor), portul de date de intrare la switch-uri, portul de date de ieșire la leduri, portul de write-enable (we) la unul din butoane. Sintetizați circuitul în Xilinx ISE și configurați placa de FPGA.

Cerințe suplimentare (opționale)

  1. Folosind modulul dezvoltat la exercițiul opțional 2 de la lucrarea 3, scrieți un modul care să afișeze prenumele vostru deplasându-se de la dreapta la stânga pe afișajul cu 7 segmente.
  2. Realizați o memorie RAM 16x32 cu 2 porturi:
    • un port de citire (portA)
    • un port de citire-scriere asincronă (portB)
    Folosind un modul similar celui dezvoltat la punctul opțional 2 de la lucrarea 2, implementați următoarele operații conform unui cod de operație primit ca intrare:
    • 4'd0 - nop - nu se efectuează scriere;
    • 4'd1 - const0 - valoarea primită ca adresă pe portul A se încarcă în memorie, folosind portul B;
    • 4'd2 - const1 - valoarea primită ca adresă pe portul A se încarcă în memorie, folosind portul B, shiftând la stânga conținutul memoriei de la adresa respectivă;
    • 4'd3 - add - se adună valorile de la locațiile specificate de adresele porturilor A și B și se scriu în memorie folosind portul B;
    • 4'd4 - sub - se scad valorile de la locațiile specificate de adresele porturilor A și B și se scriu în memorie folosind portul B;
    • 4'd5 - mul - se înmulțesc valorile de la locațiile specificate de adresele porturilor A și B și se scriu în memorie folosind portul B;
    • 4'd6 - lshift - se shiftează la stânga valorea de la locația specificată de adresa portului B cu cea de la locația specificată de adresa portului A și se scrie în memorie folosind portul B;
    • 4'd7 - rshift - se shiftează la dreapta valorea de la locația specificată de adresa portului B cu cea de la locația specificată de adresa portului A și se scrie în memorie folosind portul B;
    Simulați modulul în Modelsim generând ca test o secvență de operații.