grlib说明文档中文版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5GRLIB design concept
5.1introduction
GRLIB是一个可重用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 bus
5.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 interface
AHB master的inputs、outputs都定义成VHDL record type形式,都以GRLIB AMBA库中TYPES package 的形式输出:
--AHB master inputs
Type ahb_mst_in_type is record
hgrant:std_logic_vector(0to NAHBMST-1);--bus grant
hready:std_ulogic;--transfer done
hresp:std_logic_vector(1downto0);--response type
hrdata:std_logic_vector(31downto0);--read data bus
hcache:std_ulogic;--cacheable
hirq:std_logic_vector(NABIRQ-1downto0);--interrupt result bus
end record;
--AHB master outputs
type ahb_mst_out_type is record
hbusreq:std_ulogic;--bus request
hlock:std_ulogic;--lock request
htrans:std_logic_vector(1downto0);--transfer type
haddr:std_logic_vector(31downto0);--address bus(byte)
hwrite:std_ulogic;--read/write
hsize:std_logic_vector(2downto0);--transfer size
hburst:std_logic_vector(2downto0);--burst type
hprot:std_logic_vector(3downto0);--protection control
hwdata:std_logic_vector(31downto0);--write data bus
hirq:std_logic_vector(NAHBIRQ-1downto0);--interrupt bus
hconfig:ahb_config_type;--memory access reg.
hindex:integer range0to NAHBMST-1;--diagnostic use only
end 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 is
generic(
hindex:integer:=0);--master bus index
port(
reset:in std_ulogic;
clk:in std_ulogic;
hmsti:in ahb_mst_in_type;--AHB master inputs
hmsto: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 inputs
type ahb_slv_in_type is record
hsel:std_logic_vector(0to NAHBSLV-1);--slave select
haddr:std_logic_vector(31downto0);--address bus(byte)
hwrite:std_ulogic;--read/write
htrans:std_logic_vector(1downto0);--transfer type
hsize:std_logic_vector(2downto0);--transfer size
hburst:std_logic_vector(2downto0);--burst type
hwdata:std_logic_vector(31downto0);--write data bus
hprot:std_logic_vector(3downto0);--protection control
hready:std_ulogic;--transfer done
hmaster:std_logic_vector(3downto0);--current master
hmastlock:std_ulogic;--locked access