APB读写时序

信号名称:
在这里插入图片描述
读写流程:

1、IDLE:系统初始化状态,此时没有传输操作,也没有选中任何从模块。
2、SETUP:启动状态,当有传输要进行时,PSELx=1,,PENABLE=0,系统进入SETUP状态,并只会在SETUP状态停留一个周期。当PCLK的下一个上升沿到来时,系统进入ENABLE状态。
3、ENABLE:在总线进入SETUP状态的下一个时钟上升沿处,需将PENABLE信号拉高进入ENABLE状态。在这个上升处,master必须保持PADDR、PSEL、PWRITE不变。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。

写时序:在这里插入图片描述
在T1时刻,PSEL拉高,此时PWRITE为高,进入写入状态。在PENABLE为1时,将PWDATA总线上数据写到对应寄存器或者数据存储器。当PREADY信号拉高,表示一次写入完成,总线返回到初始状态等待PSEL拉高。PWDATA总线上数据会一直保持上一次写入时状态,直到下一次写操作为止。
当PREADY信号一直处于低电平状态,总线则进入等待状态,此时PSEL与PENABLE处于置高状态,等待PREADY信号拉高。如下图时序所示

在这里插入图片描述

读时序:
在这里插入图片描述

在T2时刻,PSEL拉高,此时PWRITE为低,此时进入读状态。在PENABLE为1时,将待读取数据置到PRDATA总线,在PENABLE下降沿时刻,将PRDATA总线数据从AXI-LITE总线读回。
在这里插入图片描述
在这里插入图片描述
APB总线在各总线中时序控制比较简便,而且可以分出多个控制接口,根据从机基地址进行对应控制即可,需要注意的是PREADY信号需要进行拉高来表示一次写入的完成,否则总线会一直处于占用状态,无法再进行其他读写操作。
总线在使用会遇到各种各样的问题,因为本身总线控制信号较少,所以在使用中会进行各种各样的更新,在IP设置时可以看到APB3和APB4的选择。
APB(Advance Peripheral Bus)是AMBA总线的一部分,从1998年第一版至今共有3个版本。
AMBA 2 APB Specfication:定义最基本的信号interface, 读写transfer, APB bridge, APB slave.
AMBA 3 APB:增加定义信号PREADY, PSLVERR来完成对wait state和Error reporting的功能。
AMBA 4 APB:增加定义信号PPROT, PSTRB来支持secure, supervisor和sparse data transfer的功能。

完整代码如下:

module apb_wr (
	input  wire        PCLK,
	input  wire [31:0] PADDR,
	input  wire        PWRITE,
	input  wire 			 PSEL,
	input  wire        PENABLE,
	input  wire [31:0] PWDATA,
	input  wire        rst_n,
	input  wire [31:0] RDATA,
	output wire        PSLVERR,
	output wire [31:0] PRDATA,
	output reg  [31:0] WDATA
);
	
	/* user signal define */

	reg [3:0] state;

	parameter apb_idle = 4'd0,
						apb_wr   = 4'd1,
						apb_rd   = 4'd2,
						apb_rd1  = 4'd3;

	
	/*	APB BUS wr sequential	*/		

	assign PSLVERR = 1'b0;	
	assign PRDATA = RDATA;		

	always@(posedge PCLK or negedge rst_n)
		begin
			if(rst_n==1'b0)
				begin
					WDATA <= 'h0;
					state <= apb_idle;
				end
			else 
				begin
					case(state)
						/* wait for wr start */
						apb_idle:begin
							if(PSEL==1'b1)
								begin
									if(PWRITE==1'b1)
										begin
											state <= apb_wr;
										end
									else 
										begin
											state <= apb_rd;
											PRDATA <= RDATA;
										end
								end
							else 
								begin
									state <= apb_idle;
								end
						end
						/* PWRITE=1 is write ,wait for the PENABLE */
						apb_wr:begin
							if(PENABLE)
								begin
									state <= apb_idle;
									WDATA <= PWDATA;
								end
							else 
								begin
									state <= apb_wr;
								end
						end
						/* PWRITE=0 is read ,wait for the PENABLE */
						apb_rd:begin
							if(PENABLE==1'b1)
								begin
									state <= apb_idle;
								end
							else 
								begin
									state <= apb_rd;
								end
						end

						default:begin
							state <= apb_idle;
						end

					endcase
				end
		end

endmodule
  • 14
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
APB(高级外设总线)和AHB(高级高速总线)是用于连接处理器和外设的总线协议。SRAM(静态随机存取存储器)是一种常用的存储器类型,用于存储数据和指令。SRAM的读写控制电路验证IC是用于验证控制SRAM读写操作的电路。 要验证APB/AHB总线的SRAM读写控制电路,可以采取以下步骤: 1. 设计验证电路:根据APB/AHB总线规范设计一个测试电路,包括总线接口、SRAM读写控制信号的转换逻辑和测试信号生成电路。 2. 生成测试信号:使用测试信号生成电路生成读写操作的测试信号,包括读命令、写命令、地址和数据等。 3. 连接验证电路:将验证电路连接到待验证的SRAM芯片和APB/AHB总线上,确保信号传输正确连接。 4. 进行验证操作:用生成的测试信号对SRAM进行读写操作,同时监测SRAM读取的结果和写入的数据是否符合预期。 5. 分析验证结果:通过对验证电路输出的数据进行分析,检查SRAM读取的数据是否正确存储、写入的数据是否正确传输。 6. 确定验证结论:根据验证结果来确定SRAM读写控制电路的可靠性,如果验证通过,则表明控制电路功能正常。 此外,验证IC的设计也需要考虑总线协议的规范和信号传输的时序关系,以确保验证电路与APB/AHB总线之间的正常通信和数据传输。 总的来说,验证APB/AHB总线的SRAM读写控制电路需要设计合适的验证电路、生成适当的测试信号,并对验证结果进行分析,以确保控制电路的正确性和可靠性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值