You are on page 1of 11

AHB 片上系统总线的建模与验证

作者:张辉,董荣胜 来源:微计算机信息
摘 要:如何有效的对 SoC 设计进行验证已经成为缩短设计周期的关键问题。针
对这个问题,本文提出一种形式化建模与验证方法,对片上系统 AMBA 工业总
线规范的 AHB 总线协议进行形式化规格;建立了与 AHB 协议规格对应的有限
状态机和 SMV 模型,使用 CTL 描述了仲裁器的公平性、从单元活性、从单元的
交互操作性、互斥性和无饥饿属性;采用 SMV 模型检验器对 AHB 总线协议模
型的无饥饿属性进行了自动化验证。结果表明所提方法能够有效应用于 SoC 的
验证。
关键词:AHB;有限状态机;计算树逻辑;符号模型检验

1 引言
随着设计规模的增大和设计复杂度的提高,片上系统(SoC)的验证问题已经成为
缩短设计周期的瓶颈。而 SoC 设计使用总线协议来完成 IP 核之间的数据传输,
因此,为了验证 IP 之间的交互作用,必须对总线协议模型进行验证。完全利用
传统的模拟仿真技术对其进行验证变得越来越困难,形式化验证方法正逐渐成为
一种可供选择的实用方法而受到广泛关注[1-3]。目前,片上系统总线主要有
AMBA 总线、CoreConnect 总线和 Wishbone 总线,由于 AMBA[4-5]总线独立于
处理器与制造工艺技术,可重用性较高,更是受到工业界的青睐,已成为一种流
行的工业标准片上结构。AMBA 总线规范包括 AHB、ASB、APB 和
Test Methodology 等四部分。其中,AHB 是最重要的部分,对芯片上模块之间的
互连具有重要意义。因此,本文针对 AMBA 工业总线规范中的 AHB 总线,给
出一种形式化建模与验证方法,通过对 AHB 总线协议进行形式化规格,建立了

进行数据传输。基础结构由仲裁器、主从模块 多路选择器、从主模块多路选择器、译码器、虚拟模块所组成。若总线上存在多 个主模块,就需要仲裁器来决定如何控制各种主模块对总线的访问。总线译码器 根据传输数据的地址选择为主单元服务的从单元,一次操作只能有一个总线从单 元被选中。 为便于对 AHB 协议进行规格,先定义以下符号: HBUSREQ: 主单元 M 向仲裁器 A 申请接入总线。 HGRANT: 仲裁器允许主 单元的总线请求。 HTRANS: 当前传输的状态。若传输没有发生,HTRANS=IDLE; 若当前传输 是突发传输中的第一次传输,则 HTRANS = NSEQ,否则 HTRANS=SEQ 。 HREADY: 从单元 s 通过声明 HREADY 信号延迟时钟周期。 SPLIT: 从单元通过 SPLIT 响应通知仲裁器自己不能对主单元服务。 RETRY: 从单元通过 RETRY 响应通知主单元 m 再次进行传输。 OKAY: 从单元通过 OKAY 响应来声明其可以为主单元服务。 HSPLIT: 当从单元 s 准备好为主单元 m 服务时,声称 HSPLITm 信号。 MASKm: 当且仅当仲裁器相信主单元 m 已经被分离(split) 且没有被恢复时, .主模块占用总线.与协议规格对应的有限状态机模型和 SMV 模型;采用 CTL 描述系统的属性,并 使用符号模型检验器对其进行自动化验证。文中实例的验证结果表明了所提方法 在 SoC 验证中的有效性。 2 AHB 总线协议规格 AHB 主要用于高性能模块(如 CPU、DMA 和 DSP 等)之间的连接,作为 SoC 的 片上总线,具有以下特性: 单个时钟边沿操作;非三态的实现方式;支持流水 线操作;支持突发传输;支持分段传输等。AHB 系统由主模块、从模块和基础 结构等 3 部分组成,AHB 总线上的传输是由主模块发出信号,从模块响应,当 响应为可接受时.

MASKm 数组为真。 Di,Ai: 协议允许主单元对地址 Ai、Ai+1…进行突发传输数据(Di、Di+1…)。 数据 Di 和地址 Di+1 在同一个 时钟周期内。 基于上述符号,AHB 协议可形式化定义为: (1) M→A:HBUSREQm;{MASKm(1,0)}; (2) A→M:HGRANTm;{RESPm,MASKm(1,0)}; (3) M→S:Di;{Ai}dec,{HGRANT},{RESP(OKAY,SPLIT|RETRY)}; {HTRANS(IDLE,NSEQ,SEQ)}; (4) S→M:RESP(SPLIT|RETRY,OKAY);{RESPm,HREADY};{RESPm, HSPLITm}; (5) M→S:Di+1;{Ai+1}dec,{RESP}。 在(3 )中,{Ai}dec 表示被选择的从单元 s 由解码器根据地址来选择。主单元通过 解码器选择从单元进行数据(Di、Di+1…)的突发传输时,需要考虑信号 HGRANT 和 RESP 以确保其可以进行数据传输。而具体要进行突发传输中的第 几次传输,则取决于当前传输的状态,根据信号 HTRANS 来判断。 3 AHB 总线协议中的饥饿问题 由于 AMBA 协议具有流水线特性,因此一个主单元将在收到从单元对传输 i 的 响应之前开始(i+1)传输。结果,若传输 i 导致来自从单元的一个 SPLIT 或者 RETRY 响应,主单元必须取消传输(i+1)。因为传输(i+1) 是在假设传输 i 得到从 单元的 OKAY 响应的基础上发起的。从时序图(图 1)可以清楚地看出此现象。 .

图 1 传输取消现象的时序图 在周期 1 中主单元 m 被允许总线接入和传输;从单元在周期 2 中对这个传输给 出一个 SPLIT 响应。但是,此时,m 已经驱动了下一个地址 A2。因此,从单元 在周期 3 中必须给出另一个 SPLIT 响应。此外,主单元也不再在地址总线上驱 动任何新的地址。若产生一个 SPLIT 响应,当前的 AHB 规格应要求一个从单元 在两个周期中设置 HRESP=SPLIT,使得图 1 中对地址 A2 的数据传输被取消, 这是流水线总线协议的必要条件。通过捕获协议的企图来击退将要发起的投机传 输,A2 的启动以 A1 产生一个 OKAY 响应为基础;而文献[3]就是在对其不完全 规格的基础上验证了饥饿现象的存在,下面接着对此现象进行分析。 AMBA 总线的流水线特性导致传输取消和传输重启动的困难。而传输重启动又 会影响到总线协议中的一个至关重要的属性——所有总线主单元的无饥饿: AG (HBUSREQm → AF HGRANTm)。使用模型检验工具对上述情况的 SMV 模 型进行验证,可以得到此无饥饿属性的反例追踪表(表 1)。从表 1 可以看出,在 追踪表中的第 9 步和第 11 步之间产生了循环,从而使得信号 a.MASK[2] 可以看到,在第 9 步和 11 步之间,a.MASK[2]一直 .HGRANT2 总是 为 0,即主单元 m2 对总线的接入请求总是不被准许,这就造成无饥饿属性不满 足。从表 1 中的 a.

HGRANT1 1 1 0 0 0 0 1 1 1 1 1 a.HMASTER 1 1 1 2 2 2 2 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 a.MASK[2] 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 m1.HTRANS IDLE 1 IDLE IDLE s.HGRANT2 0 0 1 1 1 0 0 0 0 0 0 a.HTRANS IDLE NONSEQ NSEQ IDLE NONSEQ SEQ m2.HSPLIT[1] 1 1 0 0 1 IDLE IDLE 1 1 SEQ 1 1 IDLE 1 1 IDLE 1 1 1 IDLE 1 NONSEQ 1 1 0 1 0 0 0 0 IDLE 0 IDLE IDLE NO 1 IDLE 0 IDLE NONSEQ a.MASK[1] m1.HBUSREQ m2.HBUSREQ NONSEQ 0 NONSEQ IDLE .HSPLIT[2] 在第 9 步和 11 步之间一直为 0,也就 是说从单元从来没有记录 m2 被分离,所以不会声 称断言 HSPLIT2 通知仲裁器它已经准备好为 m2 服务,这就是属性 AG (HBUSREQm => AF HGRANTm)不满足的原因。对比前面 AHB 协议的规格 可以看出,不满足的原因是没有考虑式(4)中的{RESPm,HSPLIT} 。 1 2 3 4 HTRANS 5 6 IDLE 7 8 |:9 10 NONSEQ SEQ NONSEQ IDLE IDLE 11:| NONSEQ SEQ a.为 1,也就是说仲裁器相信主单元 m2 已经被分离,但是一直没有被恢复;这样 就导致即使 m2 请求总线接入,仲裁器也一直不允许 m2 的总线接入请求,因为 它认为 m2 已经被分离。唯一可以使得 m2 获得总线接入的情况就是从单元记录 m2 已经被分离,这样从单元可以通过声称断言 HSPLIT2 来通知仲裁器它已经准 备好为主单元 m2 服务,从而使得 m2 有机会请求总线接入,进而获得总线使用 权。而从表 1 可以看出,信号 s.

RESP ok1 ok1 ok1 split0 split1 ok1 ok1 ok1 ok1 ok1 ok 1 s.HSPLIT[2] 0 0 0 0 0 0 0 0 0 0 0 s.event[1] 0 0 0 0 0 0 0 0 0 0 0 s.MASK[2] 0 0 0 0 0 0 0 0 0 0 0 s.prev_HMASTER 0 1 1 1 2 2 2 2 1 1 1 表 1 无饥饿属性的反例追踪表 4 AHB 总线协议的模型检验 4.MASK[1] 0 0 0 1 0 0 0 0 0 0 0 s.1 FSM 模型 AMBA 总线规范的描述采用的是时序图的方式,为便于协议的自动化分析,本 文采用形式化方法对其进行规格。但是如何从一个规格中提取必要的属性也是一 个值得注意的问题。为了解决这个问题,引入一种 FSM 模型[6]。在分析所需总 线信号和状态的基础上,建立了简化的 AHB 有限状态机模型,如图 2。 .s.event[2] 0 0 0 0 0 0 0 0 0 0 0 s.

图 2 简化的 FSM 模型 其中,FSM 中状态 S0-S7 分别定义如下: S0:初始状态;此时,总线从单元空 闲。 S1:总线主单元开始传输数据。 S2:从单元响应为 OKAY 的状态。 S3: 从单元响应为 SPLIT 的状态。 S4:主单元申请接入总线的事件。 S5:从单元 传输数据的事件。 S6:从单元响应为 SPLIT 所产生的事件。 总线从单元的响应有三种——OKAY 、SPLIT、RETRY。而 SPLIT 和 RETRY 两种响 应都会导致主单元重传,因此把它们看作一种。信号 HTRANS 标明当前传输的状 态——若传输没有发生,则 HTRANS=IDLE; 若此次传输为突发传输中的第一次 传输,则 HTRANS=NSEQ; 否则,HTRANS=IDLE。信号 HRESP 标明从单元的响应—— 当从单元暂时无能力对主单元服务时,通过声明 SPLIT 来通知仲裁器;反之, 声明 OKAY, 即 HRESP=OKAY 。 4.2 AHB 协议的 SMV 建模 本文采用分支时态逻辑 CTL(Computation Tree Logic)[7]描述协议的属性。CTL 由两部分构成,一部分是路径量词,包括 A(Always.所有路径)和 E(Exists .存 在一个路径);另一部分是时态运算符,包括 .

F(Future).G(Global).X(Next-time) 和 U(Until)。在 CTL 逻辑中,时态运算 符前必须有路径量词。 CTL 公式的语法定义如下: (1)每个原子命题(命题常元或者命题变元)是 CTL 公式; (2 )若 ϕ、ψ 是 CTL 公式,则¬ϕ、ϕ∧ψ 、AX ϕ、EX ϕ、A (ϕ∪ψ)和 E (ϕ∪ ψ)也是 CTL 公式; (3)只有有限次的运用规则(2)得到的公式才是 CTL 公式。 本文需要验证的是所有主单元 m 具有无饥饿属性,即 AG (HBUSREQm →AF HGRANTm)。设仲裁器具有公平性。仲裁器记录着一系列已经 被分离并且没有被恢复的主单元,来自这些主单元的请求被屏蔽,直到从单元通 知仲裁器它能够对这些主单元服务。仲裁器维护一个 mask 数组;当且仅当仲裁 器相信 m 已经被分离且没有被恢复时,数组中的值 maskm 为真。这样,仲裁器 的公平性属性可表示为: arbiter_fair:AG(HBUSREQm ∧¬maskm → AF HGRANTm) 其中 m 表示任意 主单元。也就是说,若 m 请求总线并且仲裁器相信 m 没有被屏蔽,则 m 最终会 被准予总线接入。 而从单元被要求具有活性,也就是说从单元最终应该能够为主单元服务。从单元 记录一个 split 数组;当且仅当从单元已经分离主单元 m 并且还没有准备好为 m 服务时,数组中的值 splitm 为真。当从单元准备好为主单元服务时,通过声 称 HSPLITm 信号来表示。因此,从单元的活性可以表示为: slave-live:AG(splitm → AF HSPLITm)。 另外,当 maskm 为真——就是仲裁器相信主单元 m 已经被分离且没有被恢复时, 从单元是不能为主单元服务的,即不能声称 HSPLIT 信号。从单元的操作交互性 可表示为: .

(~MASK[2]&BUSREQ2&HTRANS=NONSEQ & (RESP=ok1|RESP=split0)): {0.MASKm 不能同时为真。 而仲裁器不能同时允许 两个主单元获得总线接入,这就要求: mutex: assert G~(a. MASKm) 其中 s.MASKm) ⇒ assert G( ~s.HSPLITm | ~s.HSPLITm & s.HGRANT(i+1)) ⇒ assert G(~a. default : HGRANT2. HGRANT(i+1)) 实际考虑的模型包括两个主单元、一个从单元。体现 HGRANT2 的状态变化情况 的 SMV 描述如下: next(HGRANT2) := case { MASK[2] : 0.1}. }.slave_opm: assert G ~(s.HGRANTi | ~a.HGRANTi & a.03125 秒,同时给 出资源的使用情况。验证平台采用 256M 内存的 Pentium(R)Ⅳ 2. 4.HSPLITm 和 s.4GHZ 微型计 算机,使用的操作系统为 Microsoft Windows XP Professional 版本。从验证 结果可以看出,所提形式化方法可以有效的应用于 SoC 验证。 属性 结果 no_starve2 时间 true BDD 节点数 0.3 验证结果 使用 Cadence SMV 符号模型检验器[8]对所建立的 SMV 模型描述进行验证,验证 结果如表 2。对于具有两个主单元和一个从单元的 AHB 总线模型,采用模型检验 器 SMV 对总线协议的无饥饿属性进行了自动化验证,用时 0.03125s 12420 表 2 形式化验证结果 5 结束语 采用形式化方法对 SoC 进行验证受到广泛关注。本文提出一种用于片上系统总 线协议的形式化建模与验证方法,对 AHB 协议进行了形式化规格,建立了 FSM 模 .

10-2:275-277. Germany. in: Proceedings of the 11th IFIP WG 10. September 1999.SOC[C]. 2001. Using Formal Te chniques to Debug the AMBA System–on–Chip Bus Protocol[A]. 340-354.型和 SMV 模型,并用符号模型检验器对总线模型的无饥饿属性进行了自动化验 证。验证结果表明了所提方法的有效性。 本文作者创新点:提出一种 SoC 验证的形式化方法,通过对工业总线 AHB 进行 形式化规格,建立其对应的 FSM 和 SMV 模型,从而使用模型检验器对属性进行 自动化验证;总线模型中无饥饿属性的验证结果表明了所提方法在 SoC 验证中 的有效性;对传统的模拟仿真验证技术提供了有力补充。 参考文献: [1] Pankaj Chauhan. In D esign Automation Conference.10828-10833.[5] ARM Limited.R. Chou. and Test Europe Conference[C]. Proceedings of the ASP-DAC 2004[C] . Tulika Mitra. 1999. Edmund M. and S.[6] Hue-Min Lin.D.微 计算机信息. [3] Abhik Roychoudhury. C. All rights reserved. [2] L. 2. Dill.权进国.林孝康. Karri. AMBA Specification. In the D esign. Munich.5 Advan ced Research Working Conference on Correct Hardware Design and Verifi cation Methods[C]. 2004. IEEE International Con ference on ASIC.0 edition. AMBA 总线新一代标准 AXI 分析和应用[J]. . Shimizu.2006.27-31. On Compliance Test of On-Chip Bus for SoC[A]. Verifyi ng IP–Core based System–On–Chip Designs[A]. pp. ©ARM Limite d.[4] 蒋周良. and Dong Wang. Yuan Lu. . . Automation. K. A specification methodology by a collection of compact properties as applied to the Intel Itanium proc essor bus protocol[A]. Ma rch 2003. Clarke.

Peled.eecs.[7] E. Clarke. The .. 27-30. Yokohama. 1999. Japan.[8] Cadence Berkeley Laboratories. and D. Grumberg.2004. Asia and South Pacific. USA. .berkeley. California. MIT Pr ess.edu/~kenmcmil/smv/. Model Checking[M]. . Free download from http://www-ca d. O. Jan.