数据寄存器

基于FPGA的SPI协议及设计实现

江枫思渺然 提交于 2020-01-01 05:19:06
基于FPGA的SPI协议及设计实现 博主微信:flm13724054952,不懂的有疑惑的也可以加微信咨询,欢迎大家前来投稿,谢谢! 引言介绍 在电子通信领域里采用的通信协议有IIC,SPI,UART,FSMC等协议。本文将基于FPGA来介绍并设计标准的SPI总线协议,实现FPGA与MCU的数据通信。SPI是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI是一种高速的、全双工、同步通信总线,标准的SPI也仅仅使用4个引脚,常用于FPGA和 EEPROM、FLASH、数字信号处理器等器件的数据通信。 SPI的原理介绍 SPI的通信方式是主从方式通信。这种模式通常只有一个主机和一个从机或者一个主机和多个从机;一般来说,标准的SPI协议是由4根线组成,分别是SSEL(从机片选使能信号,也写作 SCS,CSB)、SCLK(串行时钟,也写作SCK)、MOSI(主机输出从机输入Master Output/Slave Input)和MISO(主机输入从机输出Master Input/Slave Output)。有的SPI接口芯片带有中断信号INT,也有的SPI接口芯片只作为从机使用故只有MISO口,不过这里本文将基于FPGA来介绍并设计标准的SPI总线协议。 SPI的标准接口 CSB:从设备片选使能信号。注意的是

嵌入式Linux内核I2C子系统详解

萝らか妹 提交于 2019-12-31 19:44:41
1.1 I2C总线知识 1.1.1 I2C总线物理拓扑结构 I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。 1.1.2 I2C总线特征 I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。 I2C总线上可挂接的设备数量受总线的最大电容400pF 限制,如果所挂接的是相同型号的器件,则还受器件地址位的限制。 I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。 I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。 1.1.3 I2C总线协议 I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生

寄存器堆 (Register File)

偶尔善良 提交于 2019-12-30 16:21:34
作者:樱木花道 链接:https://www.zhihu.com/question/22619798/answer/27936513 寄存器堆(register file)是CPU中多个寄存器组成的阵列,通常由快速的静态随机读写存储器(SRAM)实现。这种RAM具有专门的读端口与写端口,可以多路并发访问不同的寄存器。  CPU的指令集架构总是定义了一批寄存器,用于在内存与CPU运算部件之间暂存数据。在更为简化的CPU,这些架构寄存器(architectural registers)一一对应与CPU内的物理存在的寄存器。在更为复杂的CPU,使用寄存器重命名技术,使得执行期间哪个架构寄存器对应于哪个寄存器堆的物理存储条目(physical entry stores)是动态改变的。寄存器堆是指令集架构的一部分,程序可以访问,这与透明的CPU高速缓存(cache)同。实现通常的设计布局是一个简单的阵列,在水平方向的一行就是寄存器的全字长宽度,一行的每一位元的存储单元(bit cell)通过位线(Bit Line)读/写其数据。在垂直方向把寄存器一次即能全字长读出。放大电路(Sense amplifier)通常设在底部,把读出的小幅值的两根位线(组成了一对差分电路)的电位差,放大为全幅值的逻辑值电位。更大的寄存器堆的设计是镜像与旋转后(tiling mirrored and rotated

算术运算单元ALU的设计与实现

拟墨画扇 提交于 2019-12-30 13:10:27
算术运算单元ALU的设计与实现 这是2018年大三时的一个课程设计,在这里把相关技术和用到的知识分享给大家。(由于编者水平有限可能存在错误的地方,欢迎大家指正)题目给出的要求如下: 一、设计题目及要求 要求: 1.进行两个四位二进制数的运算。 2.算术运算:A+B,A-B,A+1,A-1 3.逻辑运算:A and B,A or B,A not, A xor B 注意:从整体考虑设计方案,优化资源的利用 二、设计过程及内容 2.1总体设计 ALU算术运算单元由以下几个部分构成: 图1 ALU运算单元系统结构图 为了尽可能减少资源的使用(或以相同的资源增加更多的功能),在此系统的基础上,增加基于寄存器的分时复用输入模块进行改进。 图2 基于分时复用方法的ALU运算单元结构 ①输入模块 该模块用于两个四位二进制数的输入。通过使用实验箱的拨码开关,输入高低电平,表示二进制的 1和0,四组拨码开关组合可以表示一个四位二进制数。 ②逻辑运算单元 该模块用于两个四位二级制数的逻辑运算。通过列出一位二进制数逻辑运算的真值表(含有四种不同的逻辑运算功能),得出了一位二进制数逻辑运算单元的表达式(已使用卡诺图化简)。将按照逻辑表达式连接好的多个一位二进制逻辑运算单元进行组合,可得到多位二进制数逻辑运算单元。 通过使用“真值表+卡诺图”的方法将所有的逻辑运算的表达式融合在一起进行化简

接口与总线 考点整理

删除回忆录丶 提交于 2019-12-29 23:11:06
说明 以下内容为个人整理,答案也是个人回答,不一定对,所以你对答案有任何问题,都欢迎与我讨论。 Q01:51单片机P0、P1、P2、P3口功能作用? 答: P0可做地址口的低8位也可以做数据口和I/O口 P1可做普通的I/O口 P2除了做I/O口,也是作为地址口的高8位(总共16位) P3 既可以是普通IO口,也可以是外部中断、定时、外部输入的端口 Q02:当串口发送一个数据或接收数据时,哪两个位会置位? 答: 接收数据时,RI 会置位 发送数据时,TI 会置位 Q03:81单片机的累加器是什么? 答: ACC Q04:当晶振频率为12MHz,定时器的频率为多少? 答: 频率为1Mhz 说明: 机器频率 = 晶振频率/12 Q05:LED的显示分为几种? 答: 两种,动态扫描和静态扫描 说明: 动态扫描中LED的调度是放在定时器中 Q06:51单片机内存划分 答: 低128个字节 从00H~1FH(32字节):寄存器区,四组寄存器区,一组有8个寄存器 从20H~2FH(16字节 128位):位寻址区 剩下:普通内存 高128个字节 特殊功能寄存器 Q07:ex0、ex1、et0的含义 答: ex0 = 1; //允许外部中断0 ex1 = 1; //允许外部中断1 et0 = 1; //允许定时器0中断 1 2 3 说明: 在这里插入图片描述 上图为IE(中断允许寄存器) EA

《计算机是怎样跑起来的》 || 第三章 • 体验一次手工汇编(中)

怎甘沉沦 提交于 2019-12-28 21:11:07
作者:矢泽久雄 —————————————————————————————————————— 第三章 • 体验一次手工汇编(中) —————————————————————————————————————— 【03】Z80 CPU的寄存器结构 CPU寄存器简介 数据运算是在CPU中进行的,所以CPU内部有存储数据的地方,叫做“寄存器” 与I/O寄存器不同,CPU寄存器不仅能存储数据,还具备运算能力 CPU带有怎样的寄存器取决于CPU种类 不同寄存器的类型用途自然不同 图示 IX、IY、SP、PC的大小是16bit,其他的是8bit A寄存器:累加器,运算的核心 F寄存器:标志寄存器,用于存储运算结果的状态,比如是否发生进位、数字大小比较结果 PC寄存器:程序指针,存储着指向CPU接下来要执行指令的地址 PC寄存器的值会随着时钟信号自动更新,可以说程序就是依靠不断变化的PC寄存器从而运行起来的 SP寄存器:栈顶指针,在内存中创建出名为“栈”的临时数据存储区域 【04】汇编操作 设定Z80 PIO 应该用怎样的数字设定端口,在本身的资料上有 207表示设定端口为输入输出模式 255表示设定端口为输入模式 0表示设定端口为输出模式​​ 01 设定端口A为输入模式 操作数是必须已存储在CPU寄存器中的数字先把207,255加载到A寄存器再把数据写入I/O地址所对应的寄存器,其中(2

什么是寄存器

杀马特。学长 韩版系。学妹 提交于 2019-12-28 04:06:49
存储器映射: 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射 寄存器: 给有特定功能的内存单元取一个别名,这个别名就是我们经常说的寄存器 寄存器映射: 给寄存器取别名的过程 STM32F03ZET6丝印解读: ARM:表示采用ARM公司的内核 ST :SOC厂商 STM32F10xx系统框图 ICode总线 Dcode总线 System总线:读取寄存器 DMA总线 STM32芯片架构简图 Flash:存储程序 SRAM:存储变量 让GPIOB端口的16个引脚输出高电平 1.通过绝对地址访问内存单元 //GPIOB端口全部输出高电平 *(unsigned int*)(0x40010c0c)=0xFFFF; //0x40010c0c是GPIOB输出数据寄存器ODR的地址 2.通过寄存器别名方式访问内存单元 //GPIOB端口全部输出高电平 #define GPIOB_ODR (unsigned int *)(0x40010c0c) * GPIOB_ODR=0xFFFF; 来源: CSDN 作者: 一块敷铜板 链接: https://blog.csdn.net/Qinlong_Stm32/article/details/103736523

8086的内存分段机制

北慕城南 提交于 2019-12-27 01:23:08
文章目录 1 代码段和数据段 2 8086的分段机制 2.1 8086的分段机制 1 代码段和数据段 对于我们的程序来说,通常分为代码段和数据段: 对于上面的代码使用的是绝对地址,当我们的操作系统把数据段不是加载在0x0100的地址时,就会出现访问数据的错误。这其实就是重定位的问题,需要借用段寄存器解决: 我们需要知道如下几点: 指令中的地址是数据在段内的偏移地址。 数据段寄存器DS中的值是数据段的段地址。 段地址+偏移地址=物理地址,也就是数据实际所在的地址。 重定位就是通过改变数据寄存器DS中的值来实现的。 2 8086的分段机制 2.1 8086的分段机制 8086的处理器地址引线:20根,那么逻辑地址就是20位。而我们的寄存器只有16位,为了解决这个问题:段地址实际上也是20位,将段寄存器中的值左移4位(每个分段必须加载到地址最低位为0的位置,相对于16进制表示而言)。偏移地址仍然是16位,也就意味着每个段的最大长度为65536个字节。 参考资料: 深度学习:C/C++、计算机体系 来源: CSDN 作者: SlowIsFastLemon 链接: https://blog.csdn.net/SlowIsFastLemon/article/details/103709407

CAN总线(一)

邮差的信 提交于 2019-12-26 19:14:02
原文出处: http://www.cnblogs.com/jacklu/p/4729638.html 嵌入式的工程师一般都知道CAN总线广泛应用到汽车中,其实船舰电子设备通信也广泛使用CAN,随着国家对海防的越来越重视,对CAN的需求也会越来越大。这个暑假,通过参加苏州社会实践,去某船舶电气公司实习几周,也借此机会,学习了一下CAN总线。 概述 CAN(Controller Area Network)即控制器局域网,是一种能够实现 分布式实时控制的 串行 通信网络 。 想到CAN就要想到德国的Bosch公司,因为CAN就是这个公司开发的(和Intel) CAN有很多优秀的特点,使得它能够被广泛的应用。比如:传输速度最高到 1Mbps ,通信距离最远到 10km ,无损位仲裁机制, 多主结构 。 近些年来,CAN控制器价格越来越低,很多MCU也集成了CAN控制器。现在每一辆汽车上都装有CAN总线。 一个典型的CAN应用场景: CAN总线标准 CAN总线标准只规定了 物理层 和 数据链路层 ,需要 用户自定义应用层 。不同的CAN标准仅物理层不同。 CAN收发器负责逻辑电平和物理信号之间的转换。 将逻辑信号转换成物理信号(差分电平),或者将物理信号转换成逻辑电平。 CAN标准有两个,即 IOS11898 和 IOS11519 ,两者 差分电平特性不同 。 高低电平幅度低

SIMD指令集

▼魔方 西西 提交于 2019-12-25 05:50:11
概述 SIMD,即Single Instruction, Multiple Data,一条指令操作多个数据。是CPU基本指令集的扩展。主要用于提供fine grain parallelism,即小碎数据的并行操作。如说图像处理,图像的数据常用的数据类型是RGB565, RGBA8888, YUV422等格式,这些格式的数据特点是一个像素点的一个分量总是用小于等于8bit的数据表示的。如果使用传统的处理器做计算,虽然处理器的寄存器是32位或是64位的,处理这些数据确只能用于他们的低8位,似乎有点浪费。如果把64位寄存器拆成8个8位寄存器就能同时完成8个操作,计算效率提升了8倍.SIMD指令的初衷就是这样的,只不过后来慢慢cover的功能越来越多. 好多处理器都有SIMD指令,我们先仅关注Intel的SIMD。Intel的初代SIMD指令集是MMX,Multi-Media Extension, 即多媒体扩展,因为它的首要目标是为了支持MPEG视频解码.MMX将64位寄存当作2X32或8X8来用,只能处理整形计算.这样的64位寄存器有8组,分别命名为MM0~MM7.这些寄存器不是为MMX单独设置的,而是借用的FPU的寄存器,也就是说MMX指令执行的时候,FPU就没有办法工作。后来Intel进一步实现了SSE, SSE2~SSE4指令集,给了他们单独的寄存器,之后MMX就被停掉了。