Anteprima
Vedrai una selezione di 18 pagine su 82
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 1 Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 2
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 6
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 11
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 16
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 21
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 26
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 31
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 36
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 41
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 46
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 51
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 56
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 61
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 66
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 71
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 76
Anteprima di 18 pagg. su 82.
Scarica il documento per vederlo tutto.
Esercizi + teoria di VHDL (parte pratica del corso di Architettura dei Calcolatori) Pag. 81
1 su 82
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Soluzione: fft.vhdl

Entity fft is port(Reset, clock : in bit; Q : out bit); End Entity; Architecture fft_arc of fft is signal status : bit := '0'; Begin status <= '0' when Reset = '1' else not status when (clock = '0' and clock'event) else status; Q <= status; End Architecture; Entity counter8 is port(reset, ck : in bit; ripple : out bit; cnt : out bit_vector(7 downto 0)); End Entity; Architecture count8_arch of counter8 is Component fft is port(Reset, clock : in bit; Q : out bit); End Component; For All : fft use Entity work.fft(fft_arc); signal link : bit_vector(7 downto 0); Begin c0 : fft port map(reset, ck, link(0)); c1 : fft port map(reset, link(0), link(1)); c2 : fft port map(reset, link(1), link(2)); c3 : fft port map(reset, link(2), link(3)); c4 : fft port map(reset, link(3), link(4)); c5 : fft port map(reset, link(4), link(5)); c6 : fft port map(reset, link(5), link(6)); c7 : fft port map(reset, link(6), link(7)); cnt(7 downto0) <= link; ripple <= '1' when link = X"11" else '0' after 10 ns; End; macchina.vhdl Entity macchina is port(reset, clk: in bit; x, sel: in bit_vector(1 downto 0); y: out bit_vector(7 downto 0)); End entity; Architecture macchina_arc of macchina is Component cont is port(reset, ck: in bit; ripple: out bit; cnt: out bit_vector(7 downto 0)); End Component; For All: cont use Entity work.counter8(count8_arch); signal rip1, rip2, rip3, rip4: bit; signal resetcont, decsel, decx, contck: bit_vector(0 to 3); signal temp_x: bit_vector(1 downto 0); -- matrice di memoria fatta da tre contatori TYPE matrice is ARRAY (0 to 3) of bit_vector(7 downto 0); signal contoutput: matrice; Begin -- campiono la x temp_x <= "00" when reset = '1' and reset'event else x when clk = '1' and clk'event and reset = '0' else temp_x; -- a seconda del valore di x, devo selezionare uno dei contatori with temp_x select decx <= "0001" when "00","0010" when "01","0100" when "10","1000" when "11";--faccio la nand fra il vettore decx che dice quale contatore è abilitato, e un vettore diclock,. che vale tutti 1 quando il clock vale 1, e quindi facendo la nand attivo solo ilcontatore che ha:--al vettore decx ho 1 cioe l ho selezionato con la x--al vettore clock=1, quindi il clock è attivo, in tal caso 1 nand 1=0 , e quindi il clockè 0 e quindi il fft contacontck<=decx nand (clk & clk & clk & clk);with sel selectdecsel<= "0001" when "00","0010" when "01","0100" when "10","1000" when "11";--faccio la and fra il vettore decsel , che ha un 1 nella posizione corrispondnete alcontatore che ho selezionato con i bit sel, e fra il vettore di ttuti reset che vale quinditutti 1 quando il reset è altpo:--quando ho un 1 nella posizione orrente del contatore abilitato da sel, ed il reset è alto, ho la AND fra 1 e 1 che fa 1, e quindi dando questo resetcont(i) al contatore in questione gli sto abilitando o meno il reset. resetcont <= decsel and (reset and reset and reset and reset); --ai componenti contatori assegno un clock e un reset personalizzati che sono la posizione i-sima dei segnali resetcont e contclock che tiro fuori dal confronto fra due vettori, e che quindi valgono 0 o 1: -- se contclock(i)=0 dico al contatore di contare -- se resetcont=1 dico al contatore di resettarsi cn1: cont port map(resetcont(0), contck(0), rip1, contoutput(0)); cn2: cont port map(resetcont(1), contck(1), rip2, contoutput(1)); cn3: cont port map(resetcont(2), contck(2), rip3, contoutput(2)); cn4: cont port map(resetcont(3), contck(3), rip4, contoutput(3)); -- Osservazione: quindi nella simulazione il clock lo usciamo solo per fare questo conto con i vettori, perciò se anche abbiamo messo che il fft conta sul fronte di discesa, in realtà con questo```html

confronto l'incremento del contatore si ha quando clock(i)=1 e decx(i)=1, e cioè sul fronte di salita del clock dell'esercizio che da questo confronto vuol dire il fronte dare un fronte di discesa a quel particolare contatore

with sel select
    y <= contoutput(3) when "00",
          contoutput(2) when "01",
          contoutput(1) when "10",
          contoutput(0) when "11";
End;

macchina_tb.vhdl

Entity macchina_tb is
End entity;

Architecture macchina_tb_arc of macchina_tb is
    Component m is
        port(reset, clk: in bit;
             x, sel: in bit_vector(1 downto 0);
             y: out bit_vector(7 downto 0));
    End component;

    For All : m use Entity work.macchina(macchina_arc);

    signal clock, reset: bit;
    signal x, sel: bit_vector(0 to 1);
    signal y: bit_vector(7 downto 0);

Begin
    clock <= not clock after 5 us;
    reset <= '1' after 87 us, '0' after 88 us;
    sel <= "00" after 5 us, "11" after 28 us, "00" after 50 us, "11" after 80 us;
    x <= "00" after
```

5 us,"11" after 56 us;m1: m port map(reset,clock,x,sel,y);End;

Con il reset

Senza Reset

Riflessioni Compito di Architettura dei Calcolatori

Compito di Macchine per l'elaborazione dell'Informazione

16/10/2014

Nome ________________ Cognome ________________

Progettare e sviluppare in VHDL una macchina che accetta in ingresso:

  • un clock di periodo 10 us,
  • un segnale di reset,
  • un segnale X da 8 bit,
  • un segnale LOAD da 1 bit

La macchina presenta in uscita:

  • un segnale STROBE da 1 bit,
  • un segnale ADDR da 16 bit,
  • segnale D da 8 bit.

La macchina gestisce 4 canali ognuno dei quali caratterizzato da un registro indirizzo da 16 bit, un registro contatore da 6 bit.

Quando il segnale di LOAD è alto la macchina campiona 3 byte in sequenza sulle linee X.

I primi 2 bit del primo byte indicano il canale, i restanti 6 bit rappresentano il valore di inizializzazione del suo contatore.

I secondi 2 byte rappresentano l'indirizzo di partenza per il canale specificato dal

LOAD è basso la macchina, per ogni colpo di clock:
  1. abilita un canale diverso in round robin
  2. decrementa il contatore per quel canale
  3. decrementa l'indirizzo per quel canale
  4. alza lo STROBE se il contatore è diverso da 0
  5. fornisce in uscita su D il byte X in ingresso
Le 5 azioni devono essere svolte sul fronte di salita del clock ADDRMXLOAD STROBE Reset DATA Clock Soluzione: library ieee; use ieee.std_logic_1164.all; Entity fa is port(x,y,rin: IN std_logic; z,rout: OUT std_logic); End fa; Architecture fa_arc of fa is Begin z <= x xor y xor rin; rout <= (x and y) or (x and rin) or (y and rin); End; library ieee; use ieee.std_logic_1164.all; Entity adder8 is port(x8,y8: IN std_logic_vector(7 downto 0); s8: OUT std_logic_vector(7 downto 0); r8out: OUT std_logic; r8in: IN std_logic); End entity; Architecture adder8_arc of adder8 is Component fac is port(x,y,rin: IN std_logic; z,rout: OUT std_logic); End Component; for all: fac use
Entity work.fa(fa_arc);
signal temp: std_logic_vector(6 downto 0);
Begin
fa1 : fac port map(x8(0),y8(0),r8in, s8(0),temp(0));
fa2 : fac port map(x8(1),y8(1),temp(0), s8(1),temp(1));
fa3 : fac port map(x8(2),y8(2),temp(1), s8(2),temp(2));
fa4 : fac port map(x8(3),y8(3),temp(2), s8(3),temp(3));
fa5 : fac port map(x8(4),y8(4),temp(3), s8(4),temp(4));
fa6 : fac port map(x8(5),y8(5),temp(4), s8(5),temp(5));
fa7 : fac port map(x8(6),y8(6),temp(5), s8(6),temp(6));
fa8 : fac port map(x8(7),y8(7),temp(6), s8(7),r8out);
End;

m.vhdl
library ieee;
use ieee.std_logic_1164.all;
use IEEE.numeric_std.all;
Entity m is
port (x,sel: in std_logic_vector(1 downto 0);
ck,reset: in std_logic;
y: in std_logic_vector(7 downto 0);
out_count: out std_logic_vector(7 downto 0));
End Entity;

Architecture m_arc of m is
Type mem is array (3 downto 0) of std_logic_vector(7 downto 0);
signal counters : mem;
signal temp_x: std_logic_vector(1 downto 0):="00";
signal adder1,temp_y, sum: std_logic_vector(7 downto 0);
signal rout:
std_logic := '0';
Component sum8 is
    port (
        x8, y8: IN std_logic_vector(7 downto 0);
        s8: OUT std_logic_vector(7 downto 0);
        r8out: OUT std_logic;
        r8in: IN std_logic
    );
End Component;

for all: sum8 use entity work.adder8(adder8_arc);

Begin
    -- campiono x, nel testbench metto il periodo del colck ogni 5 us, cosi ogni 10 us campiono il valore di x
    temp_x <= "00" when reset = '1' and reset'event else x when ck = '0' and ck'event else temp_x;

    -- campiono il valore di y ogni 10 us
    temp_y <= X"00" when reset = '1' and reset'event else y when ck = '0' and ck'event else temp_y;

    -- in adder1 indica quale banco di memoria è stato selezionato dal valore campionato di x
    adder1 <= counters(to_integer(unsigned(temp_x)));

    s8: sum8 port map (temp_y, adder1, sum, rout, '0');

    -- metto il risultato della somma nel registro indicato dal valore campionato di x quando sono sul fronte di salita del clock
    gen_counters:
    for i in 0 to 3 loop
        -- codice qui
    end loop;
End;

generate
    up_count: 
        counters(i) <= X"00" when reset='1' and reset'event else
        sum when to_integer(unsigned(temp_x))=i and ck='1' and ck'event;
    end generate;

    -- metto in uscita il banco di memoria indicato da SEL sempre sul fronte di discesa del clock
    out_count <= counters(to_integer(unsigned(sel))) when ck='0' and ck'event;
End Architecture;

tb.vhdl
library ieee;
use ieee.std_logic_1164.all;
use IEEE.numeric_std.all;

Entity tb is
End Entity;

Architecture tb_arc of tb is
    Component cm is
        port (
            x, sel: in std_logic_vector(1 downto 0);
            ck, reset: in std_logic;
            y: in std_logic_vector(7 downto 0);
            out_count: out std_logic_vector(7 downto 0)
        );
    End Component;

    for all: cm use entity work.m(m_arc);

    signal tbx, tbsel: std_logic_vector(1 downto 0) := "00";
    signal tbck, tbreset: std_logic := '0';
    signal tby, tbout: std_logic_vector(7 downto 0) := X"00";

Begin
    tbck <= not tbck after 5 us;
    tbreset <= '1' after 7 us, '0' after 9

us;tbx<="11" after 12 us,"11" after 32 us,"10" after 80 us;tbsel<="

Dettagli
Publisher
A.A. 2019-2020
82 pagine
1 download
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher matrix0909 di informazioni apprese con la frequenza delle lezioni di architettura dei calcolatori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi della Campania "Luigi Vanvitelli" o del prof Venticinque Salvatore.