https://mp.weixin.qq.com/s/7WKB1QxcVzqm2Q7bWcKHzA

简单介绍RegField的实现。

1. 简单介绍

定义寄存器域相关的参数类型。

2. RegFieldAccessType

访问类型:读、写、读写:

3. RegFieldWrType

写操作类型:

写一清零,写一置位,写一反转,

写零清零,写零置位,写零反转,

清除,置位,修改

4. RegFieldRdAction

读操作的作用:清零,置位,修改:

5. RegFieldDesc

1) class

寄存器域描述,定义寄存器域的各种属性:

a. name:名称;

b. desc:描述;

c. group:所在组;

d. groupDesc:组描述;

e. access:访问类型,默认为读写类型;

f. wrType:写类型;

g. rdAction:读的动作;

h. volatile:寄存器的值是否会自动变换;

i. reset:复位值;

j. enumberations:推测为寄存器域各个值代表意义的描述:

2) object

创建一个reserved的寄存器域:

6. RegFieldGroup

使用name和desc描述regs中的寄存器:

7. RegReadFn

1) class

读寄存器的函数:

包含两个参数:

a. combinational:是否为组合逻辑;

b. fn:参数为输入信号,返回值为输出信号的用于生成读取逻辑的函数:

2) object

用于生成读取逻辑的辅助方法。

a. 直接传入逻辑生成函数作为参数:

b. 使用RegisterReadIO作为参数:

RegisterReadIO在RegisterCrossing中定义:

c. 只输入oready用于生成读取逻辑:

d. 使用ReadValidIO读取:

e. 直接使用一个UInt作为读取逻辑的输出:

f. 把Unit转换为RegReadFn的隐式类型转换方法:

8. RegWriteFn

与RegReadFn同理,用于生成写入逻辑的辅助方法。

9. RegField

用于描述一个寄存器域。

1) case class

定义了寄存器域的比特位宽度,读函数、写函数,描述信息:

a. pipelined

读写函数中是否有非组合逻辑:

b. readOnly:

生成一个只读版本的拷贝:

c. toJson:

把寄存器域的各个属性转换为JSON格式的对象,以便输出:

PS. 可以看到这里需要外部提供字节偏移量和位偏移量信息(因为RegField只有位宽度信息,寄存器域可以复用,具体放在哪个位置可以是变化的)。

2) object

辅助方法,用于创建各种类型的寄存器域:

其中:

a. ()表示空函数;

b. r:生成只读寄存器;

c. w:生成只写寄存器;

d. w1ToClear:生成一个协议清零的读写寄存器:

e. rwReg:为BlackBox寄存器生成读写逻辑:

f. bytes:生成一个以字节为单位进行读写的逻辑:

其中:

a) fullBytes为全部为有效位的字节;

b) partialBytes为部分位有效位的字节(是否应该为partialByte,因为要么1个字节,要么0个字节,不是复数);

c) padBytes:补到numBytes宽度所需要添加的字节数;

g. 为寄存器reg生成一个以字节为单位进行读写的逻辑:

10. HasRegMap

该特征为子类引入一个中断向量表,一个生成寄存器访问逻辑的方法:

Rocket - regmapper - RegField的更多相关文章

  1. Rocket - regmapper - RegMapper

    https://mp.weixin.qq.com/s/aXxgzWwh6unuztjgyVX0iQ 简单介绍RegMapper的实现. 1. 简单介绍 RegMapper使用指定的输入接口,为一组寄存 ...

  2. Rocket - regmapper - RegisterCrossing

    https://mp.weixin.qq.com/s/82iLT-fmDg9Comp2p9bxKg 简单介绍RegisterCrossing的实现. 1. BusyRegisterCrossing 简 ...

  3. 64位开源处理器Rocket该人士介绍

    最近大概读一点UCB发布时间Rocket处理器的源代码,的每个文件的源代码的功能有一定的一般理解,Mark一点点. Rocket是一家64bit标量处理器,5第一阶段管道,用途risc-v指令集.综合 ...

  4. Slack 开源替代品 Rocket.Chat(聊天,文件上传等等)

    Rocket.Chat 是特性最丰富的 Slack 开源替代品之一. 主要功能:群组聊天,直接通信,私聊群,桌面通知,媒体嵌入,链接预览,文件上传,语音/视频 聊天,截图等等. Rocket.Chat ...

  5. web.py 学习(-)Rocket web框架

    Rocket是一个轻量级,多线程,符合WSGI规范的web框架. Rocket使用一个线程监听连接,接收到连接之后放到Queue中,有worker线程进行处理. Rocket含有以下属性: metho ...

  6. 参加完Rocket MQ Meetup深圳站,回顾和想法

    最近一段时间才开始关注云栖社区的公众号,在两周前看到要在深圳科兴科学园办一场Rocket MQ的Meetup.因为从来没有参加过这种线下活动,而且对Rocket MQ比较感兴趣,所以就立即报名参加. ...

  7. gitlab勾住rocket chat

    出于协作的要求, 需要在把gitlab的push event勾到rocket chat上面, 通知协作的其他人. BUT rocket chat提供的脚本没有具体的文件diff, so, 只好修改一下 ...

  8. Mac 下安装运行Rocket.chat

    最近花了一周的时间,复习了HTML.CSS.原生JS,并学习了Node.js.CoffeeScript.js.MongoDB,入了下门. 因为准备在Rocket.chat 上做二次开发,所以先下载和安 ...

  9. Rocket.Chat 开源IM系统部署

    Rocket.Chat 官方给出的文档也个人觉得太麻烦了,并且对ubuntu的支持程度远高于CentOS,自己就折腾写了个安装的笔记,如果是在公司内部或者是部门内部还是很有用处的,比较看中的功能有和g ...

随机推荐

  1. Linux权限管理、系统进程管理

    权限管理 linux系统中分为四种角色 u=user 当前用户   g=group 同组用户   o=other 其他用户   a=all 代表所有用户 三种权限 r=read 可读 w=write ...

  2. leetCode刷题 | 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  3. 认识mysql3个基本库

    一.3个基本库 数据库初始化安装完毕会有三个基本库mysql .information_schema.performace_schema.作为应用程序开发者,平时较少关注这些数据库尤其是后两者.但是通 ...

  4. python第七天--文件练

    目的: 将不同人物说的话分别保存下来 以==========分段 代码: f=open('record.txt','r',encoding='UTF-8') zyf=[] smy=[] count=1 ...

  5. JDBC04 PreparedStatement

    PreparedStatement类 存在预编译,用占位符去填参数(参数索引从1开始算),可以防止SQL注入 try { Class.forName("com.mysql.cj.jdbc.D ...

  6. 腾讯面试居然跟我扯了半小时的CountDownLatch

    一个长头发.穿着清爽的小姐姐,拿着一个崭新的Mac笔记本向我走来,看着来势汹汹,我心想着肯定是技术大佬吧!但是我也是一个才华横溢的人,稳住我们能赢. 面试官:看你简历上有写熟悉并发编程,CountDo ...

  7. window 10电脑永不熄屏的方法

    你的电脑是不是人还没有离开一会儿,经常锁屏,输入密码??反复反复,特别的折磨人,别急,下面我教你,告别反复,从此我的电脑我做主. 第一步,打开设置,进入个性化界面,点击锁屏界面,往下滑 第二步,找到屏 ...

  8. 5.4 Go 闭包

    5.4 Go 闭包 闭包(closure):是由一个函数和其相关的引用环境组合的一个整体.(闭包=函数+引用环境) package main import ( "fmt" ) // ...

  9. oracle start with

    select * from t where 1=1 START WITH key_id=600 CONNECT BY PRIOR key_id = pid order by key_id desc

  10. Redis学习笔记(十三) 复制(下)

    上一篇写了Redis复制功能的简单应用,下面我们看下Redis复制功能的实现过程.下面基本上是理论部分,枯燥乏味,但希望大家能看看,毕竟知识不都是感兴趣的.耐得住寂寞,经得起诱惑,方能守得住繁华 ~. ...