AMBA总线协议-结合AHB2APB桥设计及验证对AHB和APB协议的理解

2023-10-10 01:30

本文主要是介绍AMBA总线协议-结合AHB2APB桥设计及验证对AHB和APB协议的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里的设计参考了arm的ip。

1.接口信号

(1)对于ahb这一侧,相当于ahb-slave的接口信号,基本信号包含:

hclk,hrst_n,hready_in,hready_out,hwrite,hwdata,hrdata,hsel,haddr,htrans,hsize,hprot,hresp

注意这里是ahb-lite的版本,hresp只有error和okay两种情况。

(2)apb这一侧:

psel,penable,pwrite,paddr,pwdata,prdata,pready,pslverr,pstrb,pprot。

注意这里没有pclk信号,外部输入的是pclken信号当做apb的时钟,关于pclken信号的产生逻辑需要mater单独给,如下:

always@(posedge hclk or negedge hresetn)
beginif(!hresetn)hclk_cnt <= 4'b0;else if(hclk_cnt == HCLK_PCLK_RATIO - 1'b1)hclk_cnt <= 4'b0;else hclk_cnt <= hclk_cnt + 1'b1;
endalways@(negedge hclk or negedge hresetn)
beginif(!presetn)pclk_en <= 1'b0;else if(hclk_cnt == HCLK_PCLK_RATIO - 1'b1)pclk_en <= 1'b1;else pclk_en <= 1'b0;
end

也就是pclk_en是hclk分频出来的,文档中规定了这两个信号需要时同相位的。

此外系统中还存在一个apb-active信号。这个信号是用来表示这个桥是否处于工作状态的信号,这个信号存在的意义在于可以将这个信号和pclk进行gate,降低功耗。

 2.内部状态机:

该设计支持通过参数化的配置来设定当前写入或者读出数据是否需要寄存,这样做的目的在于高频下解决时序上的问题。

整个内部状态机共有七个状态:

idle状态,wait1状态,setup状态,enable状态,wait2状态,error1状态,error2状态。

1.idle状态会向wait1状态和setup状态进行跳,wait1状态表示的是是否对输入数据进行寄存。

(1)如果psel信号为1+配置参数对输入数据寄存+hwrite那么进入wait1状态。

(2)idle状态往setup状态直接跳有两种情况,

第一种是写操作时,那么此时需要对输入数据寄存一拍的配置参数为0+psel+pclken;

第二种是读操作,无论配置参数是否为1,只需要满足psel+pclken;

ST_IDLE : beginif (PCLKEN & apb_select & ~(reg_wdata_cfg & HWRITE))next_state = ST_APB_TRNF; 		// Start APB transfer in next cycleelse if (apb_select)next_state = ST_APB_WAIT;		// Wait for start of APB transfer at PCLKEN highelsenext_state = ST_IDLE; 			// Remain idleend

2.wait1状态:

此状态下下一拍就会进入setup状态(实际代码中这里写的是:如果pclken为1的话进入setup状态,但是需要注意的是,实际上pclken的逻辑是只要他不是idle状态他就为1,个人觉得加这个逻辑有点冗余。)

ST_APB_WAIT : beginif (PCLKEN)next_state = ST_APB_TRNF; 		// Start APB transfer in next cycleelsenext_state = ST_APB_WAIT; 		// Wait for start of APB transfer at PCLKEN highend

3.setup下一拍进入enable,代码中同样是pclken为1的时候进入。

ST_APB_TRNF : beginif (PCLKEN)next_state = ST_APB_TRNF2;  	// Change to second cycle of APB transferelsenext_state = ST_APB_TRNF;   	// Change to state-2end

4.enable状态的跳转有四种,分别如下:

(1)当apb-slave返回的ready信号为1+pslverr为0+pclken的时候进入error状态;

(2)当apb-slave返回的ready信号为1+pslverr为0的时候表示这次传输成功,再此基础上加上pclken+配置参数配置读数据需要寄存一拍时进入wait2状态;

(3)当apb-slave返回的ready信号为1+pslverr为0+apb-selct表示紧接着又进行了一此数据的传输,因此进入wait1状态

(4)当apb-slave返回的ready信号为1+pslverr为0+!apb-selct表示紧接着没有数据的传输,因此进入idle状态

ST_APB_TRNF2 : begin		if (PREADY & PSLVERR & PCLKEN) 				// Error received - Generate two cycle// Error response on AHB bynext_state = ST_APB_ERR1; 				// Changing to state-5 and 6else if (PREADY & (~PSLVERR) & PCLKEN) begin // Okay receivedif (reg_rdata_cfg)// Registered versionnext_state = ST_APB_ENDOK; 			// Generate okay response in state 4else// Non-registered versionnext_state = {2'b00, apb_select}; 	// Terminate transferendelse 	// Slave not readynext_state = ST_APB_TRNF2; 				// Unchangeend

注意,在上述的条件下,如果apb-select为1的话实际上进入的是wait1状态,wait1跳到setup需要一拍,setup跳到enable需要一拍,也就是penable至少两拍之后才能再次拉高。

5.wait2状态的跳转:

(1)如果pclken+apb_select+(配置输入数据不需要寄存+写操作)或(读操作)那么均是进入setup状态

(2)如果是apb-select+写操作+配置输入数据需要寄存一拍进入wait1状态

(3)如果没有apb_selct进入idle状态。

ST_APB_ENDOK : beginif (PCLKEN & apb_select & ~(reg_wdata_cfg & HWRITE))next_state = ST_APB_TRNF; 	// Start APB transfer in next cycleelse if (apb_select)next_state = ST_APB_WAIT; 	// Wait for start of APB transfer at PCLKEN highelsenext_state = ST_IDLE; 		// Remain idleend

6.error1

error1下一状态进入error2

ST_APB_ERR1 : next_state = ST_APB_ERR2; 	

7.error2

error2状态的跳转和wait2状态的跳转相同。

ST_APB_ERR2 : beginif (PCLKEN & apb_select & ~(reg_wdata_cfg & HWRITE))next_state = ST_APB_TRNF; 	// Start APB transfer in next cycleelse if (apb_select)next_state = ST_APB_WAIT; 	// Wait for start of APB transfer at PCLKEN highelsenext_state = ST_IDLE; 		// Remain idleend

3.信号输出

always @(state_reg or reg_rdata_cfg or PREADY or PSLVERR or PCLKEN)begincase (state_reg)ST_IDLE      : HREADYOUT = 1'b1; // IdleST_APB_WAIT  : HREADYOUT = 1'b0; // Transfer announced on AHB, but PCLKEN was low, so waitingST_APB_TRNF  : HREADYOUT = 1'b0; // First APB transfer cycle// Second APB transfer cycle:// if Non-registered feedback version, and APB transfer completed without error// Then response with ready immediately. If registered feedback version,// wait until state_reg==ST_APB_ENDOKST_APB_TRNF2 : HREADYOUT = (~reg_rdata_cfg) & PREADY & (~PSLVERR) & PCLKEN;ST_APB_ENDOK : HREADYOUT = reg_rdata_cfg; // Ending cycle for OKAY (registered response only)ST_APB_ERR1  : HREADYOUT = 1'b0; // First cycle for Error responseST_APB_ERR2  : HREADYOUT = 1'b1; // Second cycle for Error responsedefault: HREADYOUT = 1'bx; // x propagation (note :3'b111 is illegal state)endcaseend

关于hreadyout输出的逻辑就是idle状态下为1,enable状态下,如果输出不需要寄存+hready+!error+pclken就为1,wait2状态下如果输出需要寄存为1,其他状态均为0.

这篇关于AMBA总线协议-结合AHB2APB桥设计及验证对AHB和APB协议的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/176976

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分