基于AHB-APB BUS slave详解
1.目录
- 高内聚:让模块的功能更集中,更单一。AMBA总线例子,需要有一个模块和AMBA进行交互,就可以单独将其作为一个模块。
- 轻耦合,两个模块之间的交互信号比较简单
2.模块描述
*** 寄存器配置种类:第一类,config(Master配置到slave),比如图像处理器中的图像规格;第二类,启动信号;第三类,状态寄存器,当IP完成任务或者出现错误的时候,更新模块的状态。**
3.设计划分
3.1 项目目录规划
- env
- regression
- rtl
- sim
- sim_ncverilog
- sim_vcs
- tb
- tc
3.1.1 Env
- Env目录下放置的是一些Interface的接口
- Interface定义了AHB的一些接口,AHB总线的一些接口是固定的,不同的项目使用相同版本的AHB使用的总线接口是一致的。后续使用的时候可以类似于例化module一样,进行例化AHB
- Interface是sv中的概念
3.1.2 regression
- regression中放置一个脚本,将许多testcase同过脚本进行管理
- 在项目中后期的时候,每修改一次代码,都要跑一下regression
3.1.3 rtl
顶层模块,ahb_slave_clac.v
hready
*以AHB lite为例,只有一个Master,所以不需要Arbiter,有多个slave
- 假设addr1对应slave1,addr2对应slave2。假设T0上升沿将地址addr1驱动到总线上,T1时候,slave1的hready_out是拉低的,要进行延迟。在T1上升沿的时候会将下一个地址addr2驱动到总线上。T2上升沿的时候将slave1的hready_out拉高,此时可以将addr1的数据驱动到总线上,但是在T2上升沿时不能驱动addr2的数据的,因为addr1的响应还没有结束。需要在T3上升沿的时候驱动addr2的数据。
- slave2如何知道salve1的响应时完成的呢,可以将所有的slave的输出hready_out进行与操作或者mux,将与之后的信号广播到所有的slave,这个信号就是hready_in
- 假设T1的时候slave1的hready_out = 0,0与任何信号输出0,hready_in就是0,hready作为slave2的输入,slave2看到hready_in为0的时候,在下一个周期上升沿就不能驱动数据到总线上。只有当slave2输入的hready_in为1的时候,在下一个周期上升沿才能驱动数据到总线上。
计算模块 clac.v
- 输入操作数,输入clac_mode(操作符),使能信号;输出result
- 使能信号下,根据clac_mode进行操作,模块不使能的条件下,恒定输出为0
- 在书写case语句的时候,需要使用
ahb_slave_clac.v
- 这个模块主要进行接口信号处理,将接口信号的输出,比如运算符和使能信号给计算模块,计算模块返回结果,ahb_slave将计算模块返回的结果作为hrdata返回给ahb总线
ahb_slave接口模块的设计思路 - ahb的传输有两个阶段,一个地址阶段,一个数据阶段。
- AHB\APB\AXI地址都是以byte为单位的。
- CPU通过总线配置模块中的寄存器,每个寄存器都有自己的地址空间。CPU读到写代码之后,AHB会发起写请求,根据地址找到slave,拉高hsel信号,将数据写到对应地址的寄存器中
- 在进行设计的时候,需要将两个阶段进行对齐,如果不进行对齐,可能看到地址的时候,数据还没有准备好或者拿到数据的时候,地址已经进行了切换。解决方式就是将控制信号进行打拍的处理。
- 为什么地址信号需要打一拍,因为AHB是分为两个阶段进行执行的,也就是说数据阶段要滞后地址阶段一个周期,所以将地址haddr打一拍,延迟一个周期,这样地址数据可以和写数据一起到组合逻辑中
- 打一拍之后的信号是haddr_r,就可以和写数据共同将数据写到寄存器中。
- 在组合逻辑中会产生什么时候写操作数(opcode_a,opcode_b),什么时候写clac mode,根据地址,判断地址落到哪一个寄存器上,可以将数据写道该寄存器中。
- 对于读数据,T0时刻时钟上升沿,将haddr驱动到总线上,haddr打一拍之后,T1周期上升沿haddr_r驱动到总线上(相当于将haddr打一拍,沿长一个周期)。在T1周期内有地址和操作信号,经过组合逻辑产生hrdata。
代码
1、先进行打拍处理
注意:hesel拉高和hready(拉高)表示当前的输入是有效的,将输入进行
2、生成读或者是写的操作信号
3、hready_resp表示能不能再下一个周期能够拉起hready_out
4、写操作,在写信号下,根据地址,判断将写数据给哪个寄存器
5、读操作,在
3.1.4 sim_vcs
存放的是vcs仿真的Makefile文件
标签:AHB,hready,slave,BUS,总线,地址,模块 From: https://www.cnblogs.com/Icer-newer/p/17179042.html