assign mcu_xxx_addr = (rd_after_wr_reg || reg_valid_write_trans) ?
haddr_reg[ADDR_WIDTH+:] : haddr[ADDR_WIDTH+:];
assign mcu_xx_rd_n = rd_after_wr ? 'b1 : rd_after_wr_reg ? 1'b0 : ~valid_read_trans;
assign mcu_xxx_wr_n = ~(hready && reg_valid_write_trans);
assign mcu_xxx_dat = hwdata;
assign rd_after_wr = hready && valid_read_trans && reg_valid_write_trans;
----------------------------------------------------------------------------
assign hsize_error = BYTE_MASK ? ((hsize = SZ_DWORD) ||hsize[]) :
(hsize != SZ_WORD);
assign valid_trans = hready && hsel && htrans[] && !hsize_error;
assign error_trans = hready && hsel && htrans[] && hsieze_error;
assign valid_read_trans = valid_trans && !hwrite;
assign valid_write_trans = valid_trans && hwrite; -------------------------------------------------------------------------------
always@(posedge hclk or negedge hresetn)
begin
if(~hresetn)
begin
haddr_reg <=;
htrans_reg <= ;
hwrite_reg <= ;
hsize_reg <= ;
reg_valid_read_trans <=;
reg_valid_write_trans <= ;
end
else
begin
if(hready)
begin
haddr_reg <= haddr;
htrans_reg <= htrans;
hwrite_reg <= hwrite;
hsize_reg <= hsize;
reg_valid_read_trans <=valid_read_trans;
reg_valid_write_trans <= valid_write_trans;
end
end
end --------------------------------------------------------------------------------
always@(*)
begin
if(hready && reg_valid_write_trans)
begin
mcu_xxx_wr_en = 'b0;
case(hsize_reg)
SZ_BYTE:
case(haddr_reg[:])
'b00: mcu_xxx_wr_en[0] = 1'b1;
''b01: mcu_xxx_wr_en[] = 'b1;
'b10: mcu_xxxx_wr_en[2] = 1'b1;
'b11: mcu_xxx_wr_en [3] = 1'b1;
endcase SZ_HALF:
case(haddr_reg[])
'b0 : mcu_xxx_wr_en[1:0] = 2'b11;
'b1 : mcu_xxx_wr_en [3:2] = 2'b11;
endcase SZ_WORD:
mcu_xxx_wr_en = 'b1111; default:
mcu_xxx_wr_en = 'b1111; endcase
end
else
begin
mcu_xxx_wr_en = 'b0;
end
end

本code主要实现AHB时序转MEMORY接口时序:

由于,AHB总线读写都是2拍,在ready信号拉高时表示数据读写完成,并且下一拍地址传到总线上。

memory 读写时序,读时序也是2拍,所以可以直接使用AMB总线的读使能。但写时序不一样。对于memory读使能有效时,可以立即把写数据送到写总线上,不像AHB写时必须2拍。所以写时,需要把AHB的HWRITE相关信号寄存一拍。

          特别是,当先写后读时,要注意时序转换。即code中rd_after_wr。目前理解的是,整体把读使能也寄存了一拍。

AHB2reg接口转换的更多相关文章

  1. C#的接口基础教程之六 接口转换

    C#中不仅支持.Net 平台,而且支持COM平台.为了支持 COM和.Net,C# 包含一种称为属性的独特语言特性.一个属性实际上就是一个 C# 类,它通过修饰源代码来提供元信息.属性使 C# 能够支 ...

  2. Go 接口转换的一个例子

    今天将Go 的websocket集成到已有的http中时也遇到以下一个问题:其中主要是接口类型转换 转载自[http://www.cnblogs.com/ghj1976/archive/2013/04 ...

  3. SpringCloud系列六:Feign接口转换调用服务(Feign 基本使用、Feign 相关配置)

    1.概念:Feign 接口服务 2.具体内容 现在为止所进行的所有的 Rest 服务调用实际上都会出现一个非常尴尬的局面,例如:以如下代码为例: Dept dept = this.restTempla ...

  4. 使用SWIG将C++接口转换成Java接口

    PS:此文章仅作为个人记录使用,代码属于私密,故无法公开: 以C++类classifier为例,文件保存于百度网盘 https://pan.baidu.com/s/1c2AwhaS(需密码) 系统:U ...

  5. ctp交易平台转java接口转换

    首先感谢倪材@csdn的博客,给了我很大帮助. http://blog.csdn.net/pjjing/article/details/53186394 http://blog.csdn.net/pj ...

  6. 接口转换 数据库列表的内容 显示在datagrid

    public class AddressConverter : IValueConverter { public object Convert(object value, Type targetTyp ...

  7. go语言之进阶篇接口转换

    1.go语音之进阶篇 示例: package main import "fmt" type Humaner interface { //子集 sayhi() } type Pers ...

  8. java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)

    抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...

  9. OC编程之道-接口适配之适配器

    已有的类与新的接口之间不兼容的问题相当普遍,人们已为它找到了一个解决方案.这个解决方案就是适配器. 1 何为适配器 what 适配器的主要作用是把被适配者的行为传递给管道另一端的客户端. 将一个类的接 ...

随机推荐

  1. Python 杂集

    Python字符串方法 Python递归和迭代 Python判断字符串编码以及编码的转换 exec 和 eval

  2. Codeforces 1132D(二分模拟)

    要点 二分显然,关键在于怎么判断 题解方法:开k个队列代表每个时间有哪些电脑会挂掉,这部分O(n)预处理一下,之后扫一遍时间,每个时间点贪心选取最靠前的会挂的电脑未雨绸缪给它充电,然后看看充电以后要不 ...

  3. 语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

    花了点时间梳理了一下DeepLab系列的工作,主要关注每篇工作的背景和贡献,理清它们之间的联系,而实验和部分细节并没有过多介绍,请见谅. DeepLabv1 Semantic image segmen ...

  4. MFC程序添加快捷键

    [问题提出]     有的程序需要自定义组合键完成一定功能,如何实现? [解决方法]     RegisterHotKey函数原型及说明:     BOOL RegisterHotKey(     H ...

  5. uvm_marcos——UVM宏定义

    I programmed all night.Through the window, on my screen,The rising sun shined. 编程一整夜,透过窗户,照在屏幕上.初升的太 ...

  6. 微信程序开发系列教程(三)使用微信API给微信用户发文本消息

    这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...

  7. select a.no,a.name,b.subid,b.subname,c.score

    select a.no,a.name,b.subid,b.subname,c.score from a,b,c  where a.no = c.no and b.subid = c.subid ;

  8. android-menudrawer-master 使用

    1. 参照例子写, 运行总崩溃, 多半是导库问题... 2. 既然这样不行, 只好将源码全部拷贝到工程中了. 然后修错误, (将需要的res 文件复制过来.主要是value中的几个文件) 3. 在Ma ...

  9. 爬虫_python3_requests

    Requests 网络资源(URLs)撷取套件 改善Urllib2的缺点,让使用者以最简单的方式获取网络资源 可以使用REST操作(POST,PUT,GET,DELETE)存取网络资源 import ...

  10. gdb插件使用方法

    0x00 peda peda 安装: git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda ...