https://mp.weixin.qq.com/s/82iLT-fmDg9Comp2p9bxKg

简单介绍RegisterCrossing的实现。

1. BusyRegisterCrossing

简单的控制状态机,用于控制是否可以发起请求,即是否已经存在正在处理的请求:

1) io

控制接口如下图:

a. master_request_valid/master_request_ready

表示上游是否发起请求(valid),下游是否准备好接收(ready)。

b. master_response_valid/master_response_ready

表示是否有响应信息(valid),上游是否准备好接收(ready)响应消息。

c. crossing_request_valid/crossing_request_ready

表示要发送给跨时钟结构的请求(valid),以及经过跨时钟结构传递过来的下游是否准备好接收的信号(ready)。

2) busy

表示是否有请求正在处理,此时不可以接收新的请求:

3) bypass

相当于loopback,如果bypass为真,则不把请求向跨时钟结构传递,而是直接向上游返回响应消息:

2. RegisterCrossingAssertion

这个断言通过的条件为:

a. io.master_bypass:即上游要求绕过跨时钟结构,直接回复响应消息,则不需要关注下游的状态;

b. !up:下游没有up,那么也不会使用跨时钟结构;

c. !io.slave_reset:下游不在复位状态,那么可以正常使用跨时钟结构;

3. RegisterWriteIO

写寄存器的接口:

a. request:写请求的valid/ready控制接口;

b. gen:要写的数据;

c. response:写请求的响应消息的valid/ready控制接口;

d. Bool():响应消息;

4. RegisterWriteCrossingIO

增加了时钟和复位信号的跨时钟写寄存器接口:

a. master是指跨时钟结构上游,slave是指跨时钟结构下游;

b. master_clock/master_reset:主时钟和复位信号;

c. master_bypass:是否绕过跨时钟结构;

d. master_port:写接口,包括valid/ready控制及数据;

e. slave_clock/slave_reset:从时钟和复位信号;

f. slave_register:跨越时钟过来的写的数据;

g. slave_valid:slave_register中的内容是否合法;

5. RegisterWriteCrossing

跨时钟域写寄存器模块:

分为三个主要部分:

a. io:输入输出接口;

b. control:控制模块;

c. crossing:跨时钟模块;

1) 连接时钟和复位信号

2) 连接control模块

3) crossing上游连接

4) crossing下游连接

5) assert

6. RegisterReadIO

读寄存器接口:

a. request:请求控制接口;

b. response:响应消息控制及数据接口;

7. RegisterReadCrossingIO

加入时钟和复位信号的跨时钟读寄存器接口:

8. RegisterReadCrossing

跨时钟域读寄存器模块:

9. AsyncRWSlaveRegField

用于生成异步读写的逻辑和寄存器域:

1) 参数

2) 异步复位寄存器

3) 跨时钟写模块

4) 跨时钟数据写入寄存器

5) 跨时钟读模块

6) 从寄存器跨时钟读取

7) 返回参数

a. async_slave_reg.io.q:寄存器中存储的数据;

b. RegField(width, rd_crossing.io.master_port, wr_crossing.io.master_port, desc):使用跨时钟读写模块的寄存器域;

最新文章

  1. 坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)
  2. window.onload =writeMessage(); 与window.onload =writeMessage;的区别
  3. Azure SQL Database (19) Stretch Database 概览
  4. linux之samba与linux权限
  5. JQuery常用函数及功能小结--转载
  6. 【性能测试】性能测试总结<三>
  7. JSTL标签用法 详解
  8. yii 缓存探究
  9. Java List 汉字进行排序
  10. Linux设置DNS地址及清理DNS缓存方法
  11. odoo后台实现微信公众号验证
  12. Java学习笔记——鸵鸟学习记(一)
  13. Linux Shell脚本编程case条件语句
  14. IIS7配置rewriter
  15. Bootstrap3基础 container 浏览器宽度与容器宽度的四种配合
  16. bzoj 2739 最远点——分治处理决策单调性
  17. 20135316王剑桥 linux第三周课实验笔记
  18. rpc 协议规范 之 rmi http webservice 和 一些框架
  19. 微信小程序-简易计算器
  20. 如何在windows下用IDA优雅调试ELF

热门文章

  1. nginx反向代理做负载均衡以及使用redis实现session共享配置详解
  2. 基础JS遇到的一些题01
  3. 明解JAVA 第三章答案
  4. 02JAVA基础-运算符及选择语句
  5. jbpm4 candidate理解
  6. 【题解】[SCOI2015]小凸玩矩阵
  7. AT命令集详解
  8. Docker之docker log详解
  9. windows假死原因调查
  10. JS如何判断是否已经引入某个css或是js?