Zrozumienie układu TLB w VHDL: Jak zaprojektować adresację wirtualną?

TLB





Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek K." <jacek115_at_nospam_interia.pl>
Subject: TLB
Date: Sat, 08 Sep 2001 16:56:52 GMT


Cześć. Piszę tu pierwszy raz, więc witam wszystkich. Mam taki oto problem:
Mam napisać projekt na temat: "Zaprojektuj układ sterowania wyznaczaniem
adresu fizycznego odpowiadającego danemu adresowi wirtualnemu przy użyciu
bufora TLB (w VHDL'u, synteza przy pomocy BC i DC Synopsysa z zastosowaniem
układów Altery)". Powiem szczerze - na temat VHDL'a wiem prawie nic, i nie
wiem jak napisać ten projekt. Ale znalazłem takie przykłady w internecie i
podobno to jest to co trzeba zrobić. Nie wiem jednak jak to działa, bo nie
mam do tego algorytmu( schematu działania rozpisanego na blokach, tak
ideowo). Podobno da się to wywnioskować z tego kodu ale sam nie potrafię.
Moje pytanie brzmi: czy ktoś mógłby mi pomóc? To znaczy potrzebny jest mi
opis działania takiego TLB (najlepiej po polsku) i jakieś schematy
algorytmu. A także czy ktoś mógłby zobaczyć czy rzeczywiście to jest to co
ma być zrobione (według tematu). I przydały by mi się jakiekolwiek inne
materiały na ten temat, albo chociaż namiary na nie w internecie.
Będę wdzięczny za każdą pomoc.
Jacek

Kod:

library IEEE;
use IEEE.std_logic_1164.all;

Entity VM is
port (Virtualin : in std_logic_vector(31 downto 0);
vm_instr_addr_in_from_MMU : in std_logic_vector(31 downto 0);
vm_instr_addr_out_to_MMU: out std_logic_vector(31 downto 0);
cs, Basectl, vm_instr_ack, clk, reset: in std_logic;
vm_instr_req, fault : out std_logic;
Physout : out std_logic_vector(31 downto 0));
End VM;

architecture behavior of VM is

component ALU
port( fnc: in std_logic_vector(3 downto 0);
A,B: in std_logic_vector(31 downto 0);
z,ovf,cout: out std_logic;
R: out std_logic_vector(31 downto 0)
);
end component;

component mux2 is
generic(N: integer);
port( sel: in std_logic;
y0,y1: in std_logic_vector(N-1 downto 0);
q: out std_logic_vector(N-1 downto 0));
end component;

component TLB
port (Virtualin : in std_logic_vector(31 downto 0);
vm_instr_addr_in_from_MMU : in std_logic_vector(31 downto 0);
we, clk, reset: in std_logic;
compsigbit : out std_logic;
Pout : out std_logic_vector(31 downto 0));
end component;
component Control is
port ( we, Fault, req : out std_logic;
ack, compsigbit, clk, Reset: in std_logic);
end component;

component spreg
--generic(N: integer);
port( clk, reset, control: in std_logic;
d: in std_logic_vector(31 downto 0);
q: out std_logic_vector(31 downto 0));
end component;
signal muxout,Regin, Regout : std_logic_vector(31 downto 0);
signal none : std_logic_vector(3 downto 0);
signal zeroext : std_logic_vector(31 downto 0);
signal flt, fsig, writeenable : std_logic;
begin
zeroext <= x"000"&Virtualin(31 downto 12);
mux0 : mux2 generic map(32) port map (cs, x"FFFFFFFF", muxout, Physout);
ALUBOX: ALU port map("0000", Regout, zeroext, none(0), none(1), none(2),
vm_instr_addr_out_to_MMU);
BASEREG : spreg port map(clk, Reset, Basectl, Regin, Regout);
Regin <= x"00000080";
TLBbox : TLB port map (Virtualin, vm_instr_addr_in_from_MMU, writeenable,
clk, reset, flt, muxout);
Ctl : Control port map(writeenable, fsig, vm_instr_req, vm_instr_ack, flt,
clk, reset);
fault <= fsig and cs;
end behavior;