当前位置:文档之家› grlib说明文档中文版

grlib说明文档中文版

5GRLIB design concept5.1introductionGRLIB是一个可重用IP Core的集合,并分成了多个VHDL库。

每一个库提供了特定厂商的元件或者一系列共享的功能或接口。

在GRLIB设计中使用的数据结构和元件声明都是通过库指定的VHDL包来输出的。

GRLIB是基于AMBA AHB和APB片上总线的,并把该总线用作标准的互联接口。

AHB/APB总线的实现是与AMBA-2.0相兼容的,并附加了额外的“sideband”(边带)信号。

这些边带信号的有三个用途:automatic address decoding,interrupt steering和device identification(a.k.a plug&play support)。

根据AHB/APB 信号的功能,GRLIB的库把这些信号以VHDL records的形式组合在一起。

GRLIB AMBA包的源文件在lib/grlib/amba/下。

所有的GRLIB core都使用同样的data structures来声明AMBA接口,这样相互之间的连接就很容易了。

GRLIB库还包含了一个AHB bus controller和一个AHB/APB bridge,借助这两个模块,可以很快组装成一个全功能的AHB/APB的系统。

下面的部分将描述AMBA总线是怎么实现的以及怎样用GRLIB来建一个SOC设计。

5.2AMAB AHB on-chip bus5.2.1General(概述)AMBA Advanced High-performance Bus(AHB)是一个multi-master的总线,可以以high data rate and/or variable latency的形式来互连各单元。

图5就是一个概念图。

图中连在总线上的单元分为masters(主)和slaves(客),并都受一个全局的总线仲裁器(global bus arbiter)控制。

由于AHB总线是复用的(而不是三态的),更正确的总线与单元互连示图可以参考图6。

每一个master驱动了一系列以VHDL record形式的组合在一起的信号HMSTO。

当前总线master的输出record被总线复用器选中并被送到所有AHB slaves的input record(ahbsi)。

被激活的slave的output record(ahbso)被总线复用器(bus multiplexer)选中并输出到所有的masters。

一个组合的bus arbiter,address decoder and bus multiplexer 控制着哪个master和slave会被选中。

5.2.2AHB master interfaceAHB master的inputs、outputs都定义成VHDL record type形式,都以GRLIB AMBA库中TYPES package 的形式输出:--AHB master inputsType ahb_mst_in_type is recordhgrant:std_logic_vector(0to NAHBMST-1);--bus granthready:std_ulogic;--transfer donehresp:std_logic_vector(1downto0);--response typehrdata:std_logic_vector(31downto0);--read data bushcache:std_ulogic;--cacheablehirq:std_logic_vector(NABIRQ-1downto0);--interrupt result busend record;--AHB master outputstype ahb_mst_out_type is recordhbusreq:std_ulogic;--bus requesthlock:std_ulogic;--lock requesthtrans:std_logic_vector(1downto0);--transfer typehaddr:std_logic_vector(31downto0);--address bus(byte)hwrite:std_ulogic;--read/writehsize:std_logic_vector(2downto0);--transfer sizehburst:std_logic_vector(2downto0);--burst typehprot:std_logic_vector(3downto0);--protection controlhwdata:std_logic_vector(31downto0);--write data bushirq:std_logic_vector(NAHBIRQ-1downto0);--interrupt bushconfig:ahb_config_type;--memory access reg.hindex:integer range0to NAHBMST-1;--diagnostic use onlyend record;record type中的信号与AMBA2.0规范中AHB master的相应信号一致,但附加了四个边带信号:HCACHE,HIRQ,HCONFIG,HINDEX。

GRLIB中一个典型的AHB master定义如下:library grlib;use grlib.amba.all;library ieee;use ieee.std_logic.all;entity ahbmaster isgeneric(hindex:integer:=0);--master bus indexport(reset:in std_ulogic;clk:in std_ulogic;hmsti:in ahb_mst_in_type;--AHB master inputshmsto:out ahb_mst_out_type--AHB master outputs);end entity;输入record(HMSTI)接到各masters,当中包括对全部masters的bus grant(总线允许)信号HMSTI.HGRANT。

因此,一个AHB master必须使用一个generic(常量)来指定具体的哪一根HGRANT是要用的。

这个generic 的type是integer,通常叫作HINDEX(参见上面的例子)。

5.2.3AHB slave interface与AHB master的接口类似,AHB slaves的inputs和outputs也是定义成两个VHDL的records types: --AHB slave inputstype ahb_slv_in_type is recordhsel:std_logic_vector(0to NAHBSLV-1);--slave selecthaddr:std_logic_vector(31downto0);--address bus(byte)hwrite:std_ulogic;--read/writehtrans:std_logic_vector(1downto0);--transfer typehsize:std_logic_vector(2downto0);--transfer sizehburst:std_logic_vector(2downto0);--burst typehwdata:std_logic_vector(31downto0);--write data bushprot:std_logic_vector(3downto0);--protection controlhready:std_ulogic;--transfer donehmaster:std_logic_vector(3downto0);--current masterhmastlock:std_ulogic;--locked accesshbsel:std_logic_vector(0to NAHBCFG-1);--bank selecthcache:std_ulogic;--cacheablehirq:std_logic_vector(NAHBIRQ-1downto0);--interrupt result busend record;--AHB slave outputstype ahb_slv_out_type is recordhready:std_ulogic;--transfer donehresp:std_logic_vector(1downto0);--response typehrdata:std_logic_vector(31downto0);--read data bushsplit:std_logic_vector(15downto0);--split completionhcache:std_ulogic;--cacheablehirq:std_logic_vector(NAHBIRQ-1downto0);--interrupt bushconfig:ahb_config_type;--memory access reg.hindex:integer range0to NAHBSLV-1;--diagnostic use onlyend record;上面record中的信号与AMBA2.0规范中AHB slaves中对应的信号是一致的,额外附加了五个边带信号:HBSEL,HCACHE,HIRQ,HCONFIG,HINDEX。

GRLIB中典型的AHB slave定义如下:library grlib;use grlib.amba.all;library ieee;use ieee.std_logic.all;entity ahbslave isgeneric(hindex:integer:=0);--slave bus indexport(reset:in std_ulogic;clk:in std_ulogic;hslvi:in ahb_slv_in_type;--AHB slave inputshslvo:out ahb_slv_out_type--AHB slave outputs);end entity;input record(ahbsi)接到所有slaves,其中包括对所有slaves的选择信号ahbsi.hsel。

因此一个AHB slave必须使用一个generic(常量)来指定具体哪一个hsel是需要使用的。

相关主题