33
WISHBONE System On Chip Interconnection Architecture

4 - Wishbone

Embed Size (px)

DESCRIPTION

VLSO

Citation preview

Page 1: 4 - Wishbone

WISHBONE

System On Chip Interconnection Architecture

Page 2: 4 - Wishbone

Uvod

Definiše dva tipa interfejsa: master slave

Page 3: 4 - Wishbone

Povezivanje

Zajednički signali za master-a i slave-a

CLK_I

Takt Izlazni signali postavljaju se na uzlaznu ivicu Ulazni moraju biti stabilni pre uzlazne ivice.

RST_I Reset signal

TAGN_I Ulazni signali specifični za konkretnu aplikaciju

TAGN_O Izlazni signali specifični za konkretnu aplikaciju

Page 4: 4 - Wishbone

PovezivanjeSignali specifični za master-a

ACK_I Ulazni signal potvrde, koji označava kraj ciklusa na magistrali

ADR_O(63..0) Adresna magistrala. Širina adrese se može menjati u zavisnosti od aplikacije

CYC_O Cycle izlazni signal koji ukazuje da je u toku transfer podataka na magistrali

DAT_I(63..0) Ulazni podaci. Širina magistrale može se menjati, u korelaciji je sa SEL_O signalima

DAT_O(63..0) Izlazni podaci. Širina magistrale može se menjati, u korelaciji je sa SEL_O signalima

ERR_I Error ulazni signal označava da je došlo da prekida ciklusa na magistrali usled pojave neke greške

RTY_I Retry ulazni signal ukazuje da interfejs nije spreman da prihvati ili pošalje podatke SEL_O(7..0) Select izlazni signal ukazuje gde se nalaze validni podaci na DAT magistrali

STB_O Strobe izlazni signal ukazuje na validni ciklus. Slave uređaj dužan je da postavi ACK, ERR ili RTY signal kao odgovor, na postavljanje STB_O signala.

WE_O Write Enable izlazni ukazuje da li je u toku ciklus upisa ili čitanja

Page 5: 4 - Wishbone

PovezivanjeSignali specifični za slave-a

ACK_O Ulazni signal potvrde, koji označava kraj ciklusa na magistrali

ADR_I(63..0) Adresna magistrala. Širina adrese se može menjati u zavisnosti od aplikacije

CYC_I Cycle ulazni signal koji ukazuje da je u toku transfer podataka na magistrali

DAT_I(63..0) Ulazni podaci. Širina magistrale može se menjati, u korelaciji je sa SEL_I signalima

DAT_O(63..0) Izlazni podaci. Širina magistrale može se menjati, u korelaciji je sa SEL_I signalima

ERR_OError izlazni signal označava da slave prekida ciklus na magistrali usled pojave neke greške

RTY_O Retry izlazni signal ukazuje da slave nije spreman da prihvati ili pošalje podatke SEL_I(7..0) Select ulazni signal ukazuje gde se nalaze validni podaci na DAT magistrali

STB_IStrobe ulazni signal ukazuje na validni ciklus. Slave postalja ACK, ERR ili RTY signal kao odgovor.

WE_I Write Enable ulazni signal ukazuje da li je u toku ciklus upisa ili čitanja

Page 6: 4 - Wishbone

Ciklus čitanja U trenutku 0 master postavlja:

ADR_O WE_O SEL_O CYC_O STB_O

Slave asinhrono postavlja ACK_I ukoliko je podatak spreman

U trenutku 1 master lečuje linije DAT_I ako je ACK_I postavljen

Wait stanja se ubacuju tako što slave odloženo postavlja ACK signal

Page 7: 4 - Wishbone

Blok transfer

Page 8: 4 - Wishbone

Blok transfer - čitanje

Page 9: 4 - Wishbone

Blok transfer - upis

Page 10: 4 - Wishbone

Primer Wishbone porta

#1/7

Page 11: 4 - Wishbone

Primer Wishbone portalibrary ieee;use ieee.std_logic_1164.all;

entity WBOPRT08 isport(

-- WISHBONE SLAVE interface:ACK_O: out std_logic;CLK_I: in std_logic;DAT_I: in std_logic_vector( 7 downto 0 );DAT_O: out std_logic_vector( 7 downto 0 );RST_I: in std_logic;STB_I: in std_logic;WE_I : in std_logic;

-- Output port (non-WISHBONE signals):PRT_O: out std_logic_vector( 7 downto 0 )

);end entity WBOPRT08;

#2/7

Page 12: 4 - Wishbone

Primer Wishbone portaarchitecture WBOPRT081 of WBOPRT08 is

signal Q: std_logic_vector( 7 downto 0 );begin

REG: process( CLK_I, RST_I )begin

if( RST_I = '1' ) thenQ <= B"00000000";

elsif( rising_edge( CLK_I ) ) thenif( (STB_I and WE_I) = '1' ) then

Q <= DAT_I( 7 downto 0 );end if;

end if;end process REG;ACK_O <= STB_I;DAT_O <= Q;PRT_O <= Q;

end architecture WBOPRT081;

#3/7

Page 13: 4 - Wishbone

Primer Wishbone porta

#4/7

Page 14: 4 - Wishbone

Primer Wishbone portalibrary ieee;use ieee.std_logic_1164.all;

entity WBOPRT16 isport(

-- WISHBONE SLAVE interface:ACK_O: out std_logic;CLK_I: in std_logic;DAT_I: in std_logic_vector( 15 downto 0 );DAT_O: out std_logic_vector( 15 downto 0 );RST_I: in std_logic;STB_I: in std_logic;SEL_I: in std_logic_vector( 1 downto 0 ); WE_I : in std_logic;

-- Output port (non-WISHBONE signals):PRT_O: out std_logic_vector( 15 downto 0 )

);end entity WBOPRT16;

#5/7

Page 15: 4 - Wishbone

Primer Wishbone portaarchitecture WBOPRT161 of WBOPRT16 is

signal QH: std_logic_vector( 7 downto 0 );signal QL: std_logic_vector( 7 downto 0 );

beginREG: process( CLK_I, RST_I )begin

if( RST_I = '1' ) thenQH <= (others => '0');QL <= (others => '0');

elsif( rising_edge( CLK_I ) ) thenif( (STB_I and WE_I) = '1' ) then

if SEL_I(0) = '1' thenQL <= DAT_I( 7 downto 0 );

end if;if SEL_I(1) = '1' then

QH <= DAT_I( 15 downto 8 );end if;

end if;end if;

end process REG;

#6/7

Page 16: 4 - Wishbone

Primer Wishbone portaACK_O <= STB_I;DAT_O( 15 downto 8 ) <= QH;DAT_O( 7 downto 0 ) <= QL;PRT_O( 15 downto 8 ) <= QH;PRT_O( 7 downto 0 ) <= QL;

end architecture WBOPRT161;

#7/7

Page 17: 4 - Wishbone

Poravnanje – redosled bajtova

Page 18: 4 - Wishbone

BIG ENDIAN

Page 19: 4 - Wishbone

LITTLE ENDIAN

Page 20: 4 - Wishbone

Konverzija BIG » LITTLE

Page 21: 4 - Wishbone

Barrel pomerač

Primer korišćenja VHDL generičkih struktura

Page 22: 4 - Wishbone

Opis problema

Realizovati strukturni model višestepenog barrel pomerača koji rotira ulaznu reč u desno.

Širina reči i broj nivoa zadaju se kao generički parametri.

Page 23: 4 - Wishbone

Blok šema

Page 24: 4 - Wishbone

VHDL kodlibrary ieee;use ieee.std_logic_1164.all;

entity barrel isgeneric (

depth: natural := 3;width: natural := 8);

port (data_in : in std_logic_vector (width-1 downto

0);shift : in std_logic_vector (depth-1 downto

0);data_out: out std_logic_vector (width-1 downto 0));

end entity barrel;

#1/6

Page 25: 4 - Wishbone

VHDL kodarchitecture structural of barrel is

component mux_2 is port (

data_in1,data_in2,sel : in std_logic;

data_out: out std_logic);

end component mux_2;

type array_of_vectors is array (0 to depth-2) ofstd_logic_vector(width-1 downto 0);

signal out_ver_hor: array_of_vectors;

#2/6

Page 26: 4 - Wishbone

VHDL kod

begin vertical: for ver in 0 to depth-1 generatebegin

horizontal: for hor in width-1 downto 0 generate begin

. . .

end generate horizontal;end generate vertical;

end architecture structural;

#3/6

Page 27: 4 - Wishbone

Uslovne strukture

Razlikuju se prvi, poslednji i redovi u sredini Koristi se uslovno generisanje

Page 28: 4 - Wishbone

Izgled ćelije u prvom redu

Page 29: 4 - Wishbone

VHDL kodfirst_line: if ver = 0 generatebegin

mux: mux_2port map (

data_in1 => data_in(hor),data_in2 => data_in((width +

(2**ver + hor)) mod width),data_out => out_ver_hor(ver)(hor),sel => shift(ver)

);end generate first_line;

#4/6

Page 30: 4 - Wishbone

Izgled ćelije u sredini

Page 31: 4 - Wishbone

VHDL kodmiddle_line: if ver > 0 and ver < depth-1

and depth > 2 generatebegin

mux: mux_2port map (

data_in1 => out_ver_hor(ver-1)(hor),data_in2 => out_ver_hor(ver-1)((width +

(2**ver + hor)) mod width),data_out => out_ver_hor(ver)(hor),sel => shift(ver)

);end generate middle_line;

#5/6

Page 32: 4 - Wishbone

Izgled ćelije u poslednjem redu

Page 33: 4 - Wishbone

VHDL kodlast_line: if ver > 0 and ver = depth-1

and depth > 1 generatebegin

mux: mux_2port map (

data_in1 => out_ver_hor(ver-1)(hor),data_in2 => out_ver_hor(ver-1)((width +

(2**ver + hor)) mod width),data_out => data_out(hor),sel => shift(ver)

);end generate last_line;

#6/6