0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是寄存器

jf_78858299 来源:沈土豪的书屋 作者:沈土豪 2023-01-30 16:36 次阅读

有一个很无语的问题,什么是register?天天在配寄存器,但是不知道寄存器是什么。寄存器的地址偏移有的是1,有的是4。这个偏移量为什么偏移不是3?偏移量和register的data位数有没有关系

基本随便打开一份数字IC的数据手册我们就会得到designer提供的register table。

图片

比如一颗DAC,通过SPI接口,配置电压寄存器。

24bit的register,A2:A0 选择DAC地址,DB15:DB2设置DAC输出电压。

给自己的一点理解:

所有register,如果是接入clk的,xilinx称为原语D flip-flop,就是大学本科的教材,D触发器。

图片

有32 bit的 register,就是32个DFF。DFF值从哪里来的?就是RTL级code的数百个module/IP里面input,output,reg信号

这些信号拉到哪里去?拉到reg access的module,这个reg access的module就是通过填表,通过脚本gen出来的电路。

这个module port数非常大,大到只要register table里的有的信号,就会从其他各个模块电路拉进来,input output信号极其多。

这份文档有描述FPGA/ASIC状态寄存器和控制寄存器的做法:

csrGen: Automated CSRs for ASIC/FPGA Processor Interfaces .pdf

control/status registers (CSRs),的意思IC内部的控制寄存器和状态寄存器。

文档大概的意思是说是用csrGen写的一个脚本一样的code,用户可以通过填写register table,最后可以综合生成verilog register RTL code。

填表

用户填表:

图片

大概的意思是:

第一行就是定义:A就是register的地址address缩写, 为0x0,共8bit,名字field1

第三行就是定义:A就是register的地址address缩写, 为0x1,共8bit,名字version,类型是RO

后面还有一些W1C,wite 1 clear register value,这种太难了我也看不懂怎么实现的。我们就看一个register读的,和写的。

后面通过它写的CSRGen,可以gen出一份RTL code。

我们来看一下上面csrGen出来的RTL code。

RTL级code定义了一个module,可以看到实际上对于读写指令,实际上就是1bit控制信号read/write,传入的address[3:0],和up_datain[7:0]。

图片

同时可以看到刚才看到RO类型的寄存器8bit version,实际上是从其他IP拉过来的,可以认为IC内部有很多个module/IP,这个viersion[7:0]就是从其他IP拉给chip_up_ifc 模块的。

Read

当我们去读写reg的时候,实际上就传入read的命令和address。

RTL怎么实现的呢?就是通过在chip_up_ifc,在敏感列表响应到read == 1’b1,采样address值,通过case匹配,把需要RW的register地址,赋值到用户的读写reg的接口上,即up_dataout_D[7:0] = version ;

version是其他module拉线来的,对于这个chip_up_ifc来说是input信号,up_dataout_D[7:0]是chip_up_ifc输出的。

Write

当我们去写reg的时候,实际上就传入write的命令和address和data值。

RTL级code如下,当always块敏感列表有write指令的时候,

看到case敏感列表里面是address,这里IC内部排布的reg地址是从0 1 2 3 4….

当对address 0,写的时候,就把用户想要写入的数据up_datain[7:0],赋值给address 为0的field1_D。

图片

我们刚才填写的register profile就是

%A 0

7:0 field1

这里是对field1_D赋值而不是field1的原因是,在内部生成了2个reg。一个是field1,field1_D。以我几个礼拜的RTL coding基础,猜测是防止直接操作field1影响它原本所在的电路,通过下一个clk信号,

才把field1 <= field1_D,打了一拍。

RTL在下面63行也有体现。register的初值怎么做到的,也在always块的init1下降沿触发赋值有体现。

图片

所以就有了以下结论,

Q:IC内部的寄存器偏移地址一定是1或4,有什么含义吗?

A:没有任何意义。这边address,在always块每次匹配的是多少就是访问的哪个reg,它可以偏移1,偏移100,1000都可以,甚至排布可以是1 3 5 7 9;

图片

A:每个address获得的reg数据位宽和偏移有关系吗?

Q:也没有,想定义每个address的reg的位宽是13个bit都可以,并不是8 /16/32 bit。RTL决定了本质是多少个DFF。在clock节拍下寄存下别的module拉过来的信号值。但是多少考虑到数据位宽,也要定义成8/16/32吧。

图片

A:上面结论是不是都对的?

Q:不一定,都是我猜的,其实我是做硬件的不太懂FPGA,有幸在南邮读书期间和FPGA coder联调过小半年。这边我猜测:软件跑在SOC,SOC有些reg地址,好像就是access sram,sram有大小的,8k的sram就被分成了那么多地址。软件那边定义的应该有关联的吧?RTL实现的reg是无关联的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117721
  • Register
    +关注

    关注

    0

    文章

    36

    浏览量

    13862
  • 地址
    +关注

    关注

    1

    文章

    31

    浏览量

    10606
收藏 人收藏

    评论

    相关推荐

    解析CPU中的寄存器

    8位寄存器在16位寄存器中,而16位寄存器在32位寄存器中。
    发表于 09-19 10:10 2901次阅读

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。
    的头像 发表于 07-21 16:59 2974次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么操作<b class='flag-5'>寄存器</b>点亮LED灯?

    寄存器与移位寄存器

    寄存器与移位寄存器 寄存器是用来寄存数码的逻辑部件,所以必须具备接收和寄存数码的功能。任何一种触发器都可以构成
    发表于 03-12 15:19 59次下载

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定义  寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用
    发表于 03-08 14:26 2.1w次阅读

    数据寄存器,数据寄存器是什么意思

    数据寄存器,数据寄存器是什么意思 数据寄存器数据寄存器包括累加器AX、基址寄存器BX、计数寄存器
    发表于 03-08 14:38 1.2w次阅读

    移位寄存器,移位寄存器是什么意思

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    发表于 03-08 14:50 1.7w次阅读

    32位寄存器,32位寄存器是什么意思

    32位寄存器,32位寄存器是什么意思  从X8086开始学了一年,第一个ASM的程序就是变32换16进制的程序,不过现在叫我从新开始写ASM程
    发表于 03-08 17:26 1.7w次阅读

    ARM寄存器详解

    ARM有37个寄存器,其中31个通用寄存器,6个状态寄存器。   这里尤其要注意区别的是ARM自身寄存器和它的一些外设的寄存器的区别。
    发表于 07-10 10:04 2645次阅读

    寄存器与移位寄存器

    寄存器与移位寄存器:介绍寄存器原理和移位寄存器的原理及实现。
    发表于 05-20 11:47 0次下载

    51寄存器的所有寄存器名称,(包括寄存器每一位的作用及用法)资源详解

    51寄存器的所有寄存器名称,(包括寄存器每一位的作用及用法)资源详解
    发表于 10-16 13:04 14次下载
    51<b class='flag-5'>寄存器</b>的所有<b class='flag-5'>寄存器</b>名称,(包括<b class='flag-5'>寄存器</b>每一位的作用及用法)资源详解

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一个具有移位功能的寄存器,是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移。本文主要介绍了移位寄存器的用途以及移位寄存器
    发表于 12-22 15:49 1.9w次阅读

    技术 | FANUC数据寄存器和位置寄存器的运用介绍

    寄存器指令 Registers① 寄存器指令R[i] i=1~200② 位置寄存器指令PR[i] i=1~100③ 位置寄存器要素指令PR[i,j] i=1~100,j=1~6
    的头像 发表于 06-24 17:15 1.5w次阅读
    技术 | FANUC数据<b class='flag-5'>寄存器</b>和位置<b class='flag-5'>寄存器</b>的运用介绍

    移位寄存器的原理

    移位寄存器按照不同的分类方法可以分为不同的类型。 如果按照移位寄存器的移位方向来进行分类, 可以分为左移移位寄存器、移位寄存器和双向移位寄存器
    发表于 07-15 09:38 7.2w次阅读
    移位<b class='flag-5'>寄存器</b>的原理

    AD转换寄存器设置

    AD转换寄存器设置AD转换寄存器设置AD转换寄存器设置
    发表于 11-10 17:36 16次下载
    AD转换<b class='flag-5'>寄存器</b>设置

    CPSR寄存器和APSR寄存器的组成

    程序状态寄存器的作用就是反映处理器的状态信息。在程序运行期间我们可以通过查看程序状态寄存器的状态位来进行程序的分支跳转处理,或者我们可以设置程序状态寄存器的模式位来改变处理器的运行模式,或者我们可以设置程序状态
    的头像 发表于 10-20 11:38 1797次阅读
    CPSR<b class='flag-5'>寄存器</b>和APSR<b class='flag-5'>寄存器</b>的组成