精华内容
下载资源
问答
  • LUT查找表实现移位寄存器原理精讲

    千次阅读 2020-02-15 16:01:36
    在文章《LUT是如何实现千万种逻辑结构的》里面我们讲过了LUT的原理实现逻辑函数时,相当于一个ROM将结果预存,然后把通过输入信号当作地址对预存的结果进行寻址。因此同样借助LUT加几个端口,就可以实现RAM。...

    在文章《LUT是如何实现千万种逻辑结构的》里面我们讲过了LUT的原理,实现逻辑函数时,相当于一个ROM将结果预存,然后把通过输入信号当作地址对预存的结果进行寻址。因此同样借助LUT加几个端口,就可以实现RAM。SLICEM里面的LUT就可以用来实现RAM资源。在文章《LUT查找表实现各种RAM及ROM原理精讲》里面讲解了LUT是如何实现各种RAM及RAM的原理及框图。本文来详细讲解LUT查找表实现移位寄存器原理。

    (1)移位寄存器的概念

    在数字电路中,移位寄存器是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。这种移位寄存器是一维的,事实上还有多维的移位寄存器,即输入、输出的数据本身就是一些列位。实现这种多维移位寄存器的方法可以是将几个具有相同位数的移位寄存器并联起来。

    移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,串行输入、并行输出,十分灵活,用途也很广。

    (2)LUT实现32位移位寄存器原理

    SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT可以将串行数据延时1到32个时钟周期(A[4:0]为多少就是延时多少个时钟周期输出)。移入D(DI 1 LUT引脚)和移除Q31(MC31 LUT引脚)线路将LUT级联,以形成更大的移位寄存器。因此,SliceM中的四个LUT被级联可以产生高达128个时钟周期的延时。32bit移位寄存器 LUT实现框图、原语如下图:

    (3)LUT实现128位移位寄存器原理

    通过一个SliceM的四个LUT级联后可以实现128bit的移位寄存器,使用7输入地址进行查找,使用F7AMUX、F7BMUX、F8MUX7复用器进行4个32位级联到128位。

    展开全文
  • 计算机组成原理实验——寄存器实现

    千次阅读 多人点赞 2019-05-31 11:11:03
    这次要做的是用Verilog代码写一个寄存器堆,此寄存器堆共有32个寄存器,每个寄存器可存储32个二进制位。要求有一个写端口,两个读端口,本次实验设计为异步读同步写的寄存器堆,即读寄存器不需要时钟控制,但写...

    这次要做的是用Verilog代码写一个寄存器堆,此寄存器堆共有32个寄存器,每个寄存器可存储32个二进制位。要求有一个写端口,两个读端口,本次实验设计为异步读同步写的寄存器堆,即读寄存器不需要时钟控制,但写寄存器需时钟控制。
    先上寄存器堆模块的代码

    `timescale 1ns / 1ps
    //*************************************************************************
    //   > 文件名: regfile.v
    //   > 描述  :寄存器堆模块,同步写,异步读
    //   > 作者  : LOONGSON
    //   > 日期  : 2016-04-14
    //*************************************************************************
    module regfile(
        input             clk,      //时钟控制信号
        input             wen,      //写使能信号,1有效
        input      [4 :0] raddr1,   //第一个读端口的地址
        input      [4 :0] raddr2,   //第二个读端口的地址
        input      [4 :0] waddr,    //一个写端口
        input      [31:0] wdata,    //需要写入的数据
        output  [31:0] rdata1,   //读出的数据1
        output  [31:0] rdata2,   //读出的数据2
        input      [4 :0] test_addr,    //输入的调试地址
        output  [31:0] test_data     //输出调试数据
        );
        //总共32个寄存器
    integer i = 0;
    reg [31:0] REG_Files[31:0];
    	initial//初始化32个寄存器,全为0
            for(i = 0;i < 32;i = i + 1) 
            REG_Files[i]<=0;
    	always @ (posedge clk)
    	begin
    	   if(wen)
    	   REG_Files[waddr] <= wdata;
    	end
    	assign rdata1 = REG_Files[raddr1] ;
    	assign rdata2 = REG_Files[raddr2];
    	assign test_data  = REG_Files[test_addr];
    endmodule
    
    

    其实整个代码的逻辑还是比较简单的。定义一个reg型数组REG_Files来充当寄存器堆,此数组共有32个元素,每一个元素的大小为32个二进制位。在initial块中,用for循环对寄存器堆的内容初始化为0。当时钟信号clk上跳沿时触发always语句的执行,如果写使能信号wen为1,则把数据写入寄存器堆中。因为是异步读,所以只要是输入寄存器的地址,应能够立刻得到寄存器的内容。用assign语句对读数据的输出端口rdata1和rdata2进行赋值,其中,数组的下标相当于寄存器的地址,因此可以写成REG_Files[raddr1] 这种形式。最后一个assign语句是上板验证时用到的,用test_data来向显示屏传送数据。如果仅仅是为了得到仿真图形,可以不用管这行代码,但如果想上板验证,可以查看我的另一篇博客中关于test_data的介绍。点击此处进行跳转

    仿真图形
    写寄存器阶段
    在这里插入图片描述
    读寄存器阶段
    在这里插入图片描述在这里插入图片描述上板验证图
    在这里插入图片描述

    regfile模块结构框图
    在这里插入图片描述 寄存器堆设计实验的顶层模块大致框图
    在这里插入图片描述

    最后附上本实验用到的所有文件:

    可以使用百度云进行免费下载
    链接:https://pan.baidu.com/s/17x4MJ9VBMOF8MhVe9dWKOA
    提取码:itbo

    如果本博客对你有所帮助,欢迎使用CSDN下载来支持我
    链接:https://download.csdn.net/download/weixin_43074474/13728756

    展开全文
  • 【嵌入式系统】存储器映射与寄存器映射原理 一、存储器映射 图1 存储器映射 存储器在产家制作完成后是一片没有任何信息的物理存储器,而CPU要进行访存就涉及到内存地址的概念,因此存储器映射就是为物理内存按一定...

    【嵌入式系统】存储器映射与寄存器映射原理

    一、存储器映射

    在这里插入图片描述

    图1 存储器映射

    存储器在产家制作完成后是一片没有任何信息的物理存储器,而CPU要进行访存就涉及到内存地址的概念,因此存储器映射就是为物理内存按一定编码规则分配地址的行为。值得注意,存储器映射一般是由产家规定,用户不能随意更改。
    在这里插入图片描述

    图2 STM32芯片存储器映射

    注1

    STM32中,I-Code Bus与D-Code Bus默认映射到0x00000000 ~ 0x1FFFFFFF内存地址段;AHB系统总线默认映射到0x20000000 ~ 0xDFFFFFFF和0xE0100000 ~ 0xFFFFFFFF两个内存地址段;APB外设总线默认映射到0xE0040000 ~ 0xE00FFFFF内存地址段,但由于TPIU、ETM以及ROM表占用部分空间,实际可用地址区间为0xE0042000~0xE00FF000

    二、寄存器映射

    寄存器映射是在存储器映射的基础上进行的。

    以STM32为例,操作硬件本质上就是操作寄存器。在存储器片上外设区域,四字节为一个单元,每个单元对应不同的功能。当我们控制这些单元时就可以驱动外设工作,我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元。但若每次都是通过这种方式访问地址,不好记忆且易出错。这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名实质上就是寄存器名字。给已分配好地址(通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射
    在这里插入图片描述

    图3 寄存器映射

    下面以GPIO寄存器CRL为例,先给出CRL定义如下:

    typedef struct
    {
      __IO uint32_t CRL;
      __IO uint32_t CRH;
      __IO uint32_t IDR;
      __IO uint32_t ODR;
      __IO uint32_t BSRR;
      __IO uint32_t BRR;
      __IO uint32_t LCKR;
    } GPIO_TypeDef;
    

    在实际使用时,会有GPIOA->CRL=0x0000 0000这种写法,表示将16进制数0赋值给GPIOA的CRL寄存器所在的存储单元。而GPIOA->CRL就构造了一个寄存器映射。具体过程如下:

    #define PERIPH_BASE      ((uint32_t)0x40000000) 
    

    这里属于存储器级别的映射,将外设基地址映射到0x40000000,可对应图2

    #define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
    

    这里对外设基地址进行偏移量为0x10000的地址偏移,偏移到APB2总线对应外设区。

    #define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
    

    这里对APB2外设基地址进行偏移量为0x0800的地址偏移,偏移到GPIOA对应区域。

    #define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
    

    这里将GPIOA宏定义为GPIOA基地址经过强制类型转换为GPIO_TypeDef的指针,这样的作用是使GPIOA结构体内对应的成员按顺序填充内存区域,如图3所示。因此GPIOA的CRL寄存器就是作为GPIOA基地址后的第一个内存块,GPIOA->CRL的本质就是这个内存块的地址,或者说是用GPIOA->CRL给这个地址取了个形象的别名,即寄存器映射。

    展开全文
  • 基于寄存器实现1个LED亮灭 目标: 使用STM32F103R6芯片,PB8引脚接LED的阴极,通过C语言程序控制,从PB8引脚输出低电平,使LED点亮。 用Proteus设计第一个SYM32的LED控制电路 新建Proteus工程 添加元器件 放置元...

    嵌入式基于寄存器点亮一个LED和8个LED

    • 基于寄存器实现1个LED亮灭

    目标:

    使用STM32F103R6芯片,PB8引脚接LED的阴极,通过C语言程序控制,从PB8引脚输出低电平,使LED点亮。

    用Proteus设计第一个SYM32的LED控制电路

    • 新建Proteus工程
    • 添加元器件
    • 放置元器件
    • 调整元器件位置
    • 放置终端
    • 连线
    • 属性设置

    电路图

    img

    用到的C语言操作

    代码实现

    #include "stm32f10x.h"
    int main()
    {
        RCC->APB2ENR |=1<<3;
        GPIOB->CRH &=0xfffffff0;
        GPIOB->CRH |=0x00000003;
    
        while(1)
        {
            GPIOB->BRR |=0X0080;
    }
        }
    • 基于固件库实现1个LED亮灭

    • STM32固件库

    imgimgimg

    目标、电路图和实现寄存器的相同,下面是实现的代码

    实现代码

    #include "stm32f10x.h"
    int main()
    {
    
    
        GPIO_InitTypeDef strs;
    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        strs.GPIO_Pin =GPIO_Pin_8;
        strs.GPIO_Speed =GPIO_Speed_50MHz;
        strs.GPIO_Mode =GPIO_Mode_Out_PP;
    
        GPIO_Init(GPIOB,&strs);
    
        while(1)
        {
            GPIO_ResetBits(GPIOB,GPIO_Pin_8);
        }
    }
    • 8个LED全亮、全灭、间隔点亮

    电路图

    img

    代码实现

    #include "stm32f10x.h"
    
    void SystemInit()
    {}
    
    void delay(unsigned int i)
    {
        while(i--);
    }
    
    int main()
    {
        unsigned char i = 0;
    
        RCC_APB2ENR |= (1 << 3);
        GPIOB_CRL |= 0x33333333;
    
        GPIOB_BRR = 0xff;
        delay(300000);
    
        GPIOB_BSRR = 0xff;
        delay(300000);
    
        for(i = 0; i < 8; i+=2)
    {
        GPIOB_BRR = (0x01) << i;
        delay(300000);
        GPIOB_BSRR = 0xff;
    }
        while(1)
        {
    
    
            }
    
        }
    
    

    第一次在博客上记录学习与生活,写的太烂了(为什么自己会这么想,是因为我太菜),还请大佬请放过我

    日常苦逼状态

    3.jpg

    本文由博客一文多发平台 OpenWrite 发布!

    展开全文
  • 寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器: 逻辑功能分析: 1.异步端CR置0时,输出置0; 2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0~D3被同时并行置入。 3....
  • 东北大学软件学院,计算机组成原理实验--通用寄存器实现
  • 寄存器的基本原理

    千次阅读 2020-01-22 09:56:41
    那在这一节,我们就来分析这些寄存器是如何实现的。 在CPU当中用来存放信息的非常重要的部件就是通用寄存器。比如说零号通用寄存器,在mips的体系结构中,它就是一个32位的寄存器,从电路实现上来说这32个比特都是...
  • 调试寄存器原理

    千次阅读 2014-12-21 20:05:47
    下面介绍的知识性信息来自intel IA-32手册(可以在intel的开发手册或者官方网站查到),提示和补充来自学习调试器实现时的总结。 希望能给你带去有用的信息。 (DRx对应任意的一个调试寄存器。LENn对应任意一个...
  • proteus仿真软件安装教程链接 如果对我的实验报告感兴趣,可以考虑我的计组实验专栏 计算机组成原理专栏链接
  • 在数字电子产品中,移位寄存器是级联的触发器,其中一个触发器的输出引脚q连接到下一个触发器的数据输入引脚(d)。 因为所有触发器都在同一时钟上工作,所以存储在移位寄存器中的位阵列将移位一个位置。
  • Verilog --序列检测器(采用移位寄存器实现) 序列检测器就是将一个指定序列从数字码流中识别出来。本例中将设计一个“10010”序列的检测器。设X为数字码流的输入,Z为检测出标记输出,高电平表示发现指定的序列...
  • 通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里
  • GPIO寄存器原理与操作

    万次阅读 2018-08-05 22:01:46
    方式一:通过写操作直接控制位设置/清除寄存器而后到输出数据寄存器 方式二:通过读写操作直接到达输出数据寄存器 两种方式到达输出数据寄存器后到达输出控制(即一个锁存器),通过输出控制,可改变输出信号值。 ...
  • 红、绿、蓝分别使用不同的查找表,红色、绿色查找表入口都是32位(并分成8组),分别由REDVAL[31:0]、GREENVAL[31:0]寄存器指示,蓝色查找表入口为16位,由BLUEVAL[15:0] 寄存器指示,并分成4组。也就是说红色、绿色...
  • 寄存器

    千次阅读 2020-12-18 13:03:51
    1. 寄存器 集成8位寄存器【74HC/HCT374】 功能表 2. 移位寄存器 (1) 基本的移位寄存器 (2) 多功能双向移位寄存器 工作原理 典型的多功能4位双向移位寄存器
  • 这个文件详细的描述了一位寄存器实现过程还有testbench,主要是以word的形式存放的
  • 使用Logisim设计和实现mips寄存器堆(即,regFile),具体要求如下: 1,包含两个读寄存器号输入端口RD1和RD2,用来分别指定待读出数据的两个寄存器,这两个寄存器可能相同,也可能不同。读出的数据分别通过data1和...
  • 寄存器(cpu工作原理

    万次阅读 多人点赞 2016-12-02 21:06:37
    1、一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。 区别: 内部总线实现CPU内部各个器件之间的联系。 外部总线实现CPU和主板上其它器件的联系。 8086CPU有14个寄存器 它们...
  • 这是如何实现的呢? 下面给出Verilog HDL代码: 给出测试代码: 在Modelsim进行功能仿真: ISE中进行综合得到RTL Schematic: 边沿检测 顾名思义,就是检测一个信号的边沿,当信号上升沿或下降沿到来时,获取...
  • 实验七-八 寄存器堆实验姓名:陈衍席 学号:1205110125 ...【实验目的】本次实验要求掌握触发器的基本原理,掌握寄存器寄存器堆的组成原理。【实验要求】本次实验只需要设计并实现8位触发器和32位触发器。【实验原...
  • 线性反馈移位寄存器实现

    万次阅读 2016-04-23 15:04:58
    1、写出n阶线性反馈移位寄存器实现过程 2、假设一个GF(2)上的5阶线性反馈移位寄存器的反馈函数为 f(x1,x2,x3,x4,x5)=x1+x5 初始状态为10011,试写出该线性反馈移位寄存器的输出序列程序:#include #include ...
  • VHDL语言实现PC寄存器(程序计数器或IP寄存器)的模拟,可成功执行。
  • 寄存器(CPU工作原理)

    2016-09-01 07:14:25
    对汇编而言,寄存器是程序员可以通过指令读写的部件,通过改变寄存器中的内容来时实现对CPU的控制。 1.通用寄存器: 8086的所有寄存器都是16位的,可以存放2byte,能存储最大的数为2^16-1,通用寄存器有四个:AX,...
  • 寄存器概述: 1,一个典型的CPU由运算器,控制器,寄存器等器件组成,这些器件靠内部总线相连。 内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。 2,8086CPU简单介绍 通用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,748
精华内容 39,899
关键字:

寄存器实现原理