AMBA 3 AHB-Lite接口转换模块Verilog设计与验证



前言

       AMBA中的AHB总线是我们经常使用到的一种系统总线协议。很多初学者在实现AHB总线协议的过程中,都会因为AHB总线信号多,协议相对复杂而产生一些困扰。本文主要实现了一个基础的将模块内部简单的读写信号转换为AHB-Lite协议信号的转换模块。


提示:未经授权严禁转载。

一、设计原理

1. 模块框图

在这里插入图片描述

2. 功能简介

       模块框图中左边的信号是内部信号,右边是转换后得到的AHB-Lite信号。我们可以调用这个模块来实现一个AHB Master接口功能,这个模块可以非常简单地将AHB Master模块内部的读写信号转换为AHB接口时序,且电路逻辑非常简单,只需要使用少量的逻辑资源,同时,内部可以通过检测ready信号获取AHB总线的传输状态。但是该设计不支持BURST传输,仅支持SINGLE类型的操作。

相信AHB-Lite总线的各个信号的含义大家都有所了解,这里仅介绍一下内部的信号:

namedirectionwidthdescription
rd_addrinput32读地址
rd_eninput1读使能
rd_dataoutput32读数据
rd_vldoutput1读数据有效
readyoutput1高电平时内部对该模块的读写有效;
rd_en和ready同时为高时完成一次读转换;
wr_en和ready同时为高时完成一次写转换
wr_addrinput32写地址
wr_eninput1写使能
wr_datainput32写数据

二、Verilog代码

`timescale 1ns / 1ps
module ahblite_master(
	// Globle signals
	input             HCLK		,
	input             HRESETn	,
	// Internal write channel
	input             wr_en		,
	input  [31:0]	  wraddr	,
	input  [31:0]	  wrdata	,
	// Internal read channel
	input             rd_en		,
	input  [31:0]	  rdaddr	,
	output [31:0]	  rddata	,
	output            rd_vld    ,
	// Internal ready signal
	output            ready     ,

	// AHB-Lite signals
	// Address and control
	output [31:0]	  HADDR		,
	output            HWRITE	,
	output [2:0]      HSIZE		,
	output [2:0]      HBURST	,
	output [3:0]      HPROT		,
	output [1:0]      HTRANS	,
	output            HMASTLOCK	,
	// Data
	input  		[31:0]     HRDATA	,
	output reg 	[31:0]     HWDATA	,
	// Transfer response
	input  [1:0]	  HRESP		,
	input             HREADY
);

reg hwrite_d, htrans_d;

assign HADDR = wr_en ? wraddr :
			   rd_en ? rdaddr : 32'd0;

assign ready = HREADY;
assign HWRITE = wr_en;
assign HTRANS = (wr_en | rd_en) ? 2'b10 : 2'b00;	// NONSEQ / IDLE
assign HPROT  = 4'b0001;	// Data access
assign HBURST = 3'b000;  	// SINGLE
assign HSIZE  = 3'b010;  	// word (32-bit)
assign HMASTLOCK = 1'b0;
assign rddata = HRDATA;

always @(posedge HCLK or negedge HRESETn)
	if (!HRESETn)
		HWDATA <= 32'd0;
	else if (wr_en & ready)
		HWDATA <= wrdata;

always @(posedge HCLK or negedge HRESETn)
	if (!HRESETn) begin
		htrans_d <= 1'b0;
		hwrite_d <= 1'b0;
	end else if (HREADY) begin
		htrans_d <= HTRANS[1];
		hwrite_d <= HWRITE;
	end

assign rd_vld = htrans_d && ~hwrite_d && HREADY;
endmodule

三、仿真结果

在这里插入图片描述
     上图的仿真波形中,从机最内部存储单元的读写需要两个时钟周期才能完成,这种情况下,对从机发起一次读写操作时,从机会拉低一个时钟周期HREADYOUT信号。图中,黄色波形为内部的写时序,蓝色波形为内部的读时序。

在这里插入图片描述
     上图中,从机只需要一个时钟周期就可以完成读写操作时,从机的HREADYOUT信号一直输出为高电平。

完整的测试文件链接:
https://download.youkuaiyun.com/download/weixin_44505013/55587520


总结

     本文仅仅实现了一个简单的接口转换的功能,将一般的读写信号转换为AHB接口时序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心就好噻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值