32位移位寄存器
VLSI电路系统与设计_32bit移位相加乘法器
《VLSI电路系统与设计》课程设计报告——32bit_32bit移位相加乘法器A 移位相加乘法器原理无符号二进制移位相加乘法器的基本原理是通过逐项移位相加来实现相乘的,从被乘数的最低为开始,若为1,则乘法左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
以下以4位二进制数为例进行说明:图1 移位相加乘法器原理图如图所示,就可以实现4位二进制数的相乘。
B 电路结构方案根据移位相加乘法器的基本原理,可以将整个电路划分为四个部分:32右移寄存器,32位加法器,乘1模块,64位锁存器。
原理框图如下所示:图2 移位相加乘法器原理框图在上图中,START信号的上跳沿及其高电平有两个功能,即32位寄存器清零和被乘数A[32:0]向移位寄存器SREG32B加载;它的低电平则作为乘法使能信号。
CLK为乘法时钟信号。
当被乘数被加载于32位右移寄存器SREG32B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,与门ANDARITH打开,32位乘数B[32:0]在同一节拍进入32位加法器,与上一次锁存在64位锁存器REG16B中的高32位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。
而当被乘数的移出位为0时,与门全零输出。
如此往复,直至32个时钟脉冲后,乘法运算过程中止。
此时REG64B的输出值即为最后的乘积。
此乘法器的优点是节省芯片资源,它的核心元件只是一个32位加法器,其运算速度取决于输入的时钟频率。
一、32位加法器模块的设计加法器模块是由8个四位全加器构成的,4位全加器是采用1位全加器构成的。
对于1位全加器,采用门级描述语言,使用了3个异或门和2个与门来实现的。
(1)1位加法器是采用门级描述语言,生成的库文件如图:仿真结果:图1 功能仿真图2 时序仿真(2)32位全加器32位全加器是采用8个4位全加器构成的,其电路原理图如下:图3-32位全加器原理图仿真结果:图4 功能仿真图5 时序仿真由以上的仿真结果可以看出,所设计电路在在功能上能满足要求,在时序上存在一定的时间延迟。
移位寄存器原理
移位寄存器原理引言移位寄存器是一种常见的数字电路元件,它用于在计算机和其他数字系统中处理串行数据的移位操作。
本文将介绍移位寄存器的原理和工作方式。
移位寄存器的定义移位寄存器是一种特殊的存储器元件,它可以在输入端和输出端之间进行数据移位操作。
移位寄存器通常是由触发器组成的,每个触发器都可以存储一个位(bit)的数据。
移位寄存器的输入端和输出端都是并行接口,但是数据在寄存器内部是以串行的方式传输的。
移位寄存器的工作原理并行加载移位寄存器最常见的操作之一是并行加载。
在这种操作模式下,通过并行输入引脚将数据加载到移位寄存器中。
当时钟信号到达时,移位寄存器将存储的数据向左或向右移位,并将其输出到并行输出引脚。
移位的方向由控制信号决定。
串行移位除了并行加载,移位寄存器还可以进行串行移位操作。
在串行移位模式下,输入数据通过串行输入引脚进入移位寄存器,并且顺序地从寄存器的一端移出。
当时钟信号到达时,移位寄存器会将存储的数据按位移动一个位置,并从另一端输出。
这种操作模式可以用于各种应用,例如数据的平移、数据的旋转等。
循环移位循环移位是移位寄存器的另一个重要特性。
在循环移位模式下,移位寄存器的输出会通过反馈引脚重新进入输入端,形成一个闭环。
当时钟信号到达时,移位寄存器将在输入和输出之间循环移动数据。
这种操作模式常用于数据的循环处理、数据的延时等应用场景。
移位寄存器的应用移位寄存器在数字系统中有广泛的应用。
以下是一些常见的应用场景:•移位寄存器常用于串行通信中的数据传输和接收。
通过移位寄存器,可以将并行数据转换为串行数据进行传输,并将接收到的串行数据重新转换为并行数据。
•移位寄存器可以用于数字时钟电路中。
通过串行输入信号和移位寄存器的移位操作,可以实现时钟信号的频率除法,从而生成不同的时钟信号。
•移位寄存器还可用于数据的处理和分析。
例如,在图像处理中,移位寄存器可以用来进行图像平移、旋转和缩放等操作。
总结移位寄存器是一种常见的数字电路元件,用于处理串行数据的移位操作。
移位寄存器工作原理
移位寄存器工作原理
移位寄存器是一种在数字电路中常用的重要元件,它可以将二进制数据按照一定的规律进行移位操作。
其工作原理如下:
1. 移位寄存器由多个触发器组成,常见的有D触发器、JK触
发器等。
每个触发器都可以存储一个二进制位。
2. 顺序移位寄存器中,触发器按照一定的顺序连接起来,每个触发器的输出接到下一个触发器的输入。
3. 并行移位寄存器中,所有的触发器的时钟信号都是相同的,即它们同时进行状态的更新。
4. 当时钟信号到达时,触发器按照一定的规则将输入数据传递给下一个触发器,并将上一个触发器的输出传递给自己的输出。
5. 移位操作可以是向左移位或向右移位,这取决于触发器的连接方式。
向左移位表示数据向高位移动,而向右移位表示数据向低位移动。
6. 移位寄存器还可以通过加载操作将特定的数据加载到触发器中,实现对寄存器的初始化或重置。
7. 移位寄存器常用于数据传输、数据序列生成、数字信号处理等领域,可以实现数据的移位、平移、循环移位等功能。
总之,移位寄存器的工作原理是利用触发器的连接方式和时钟
信号的控制,实现对二进制数据的移位操作。
它在数字电路中有着广泛的应用,是实现许多逻辑和运算功能的重要组成部分。
移位寄存器工作原理
移位寄存器工作原理移位寄存器是数字电路中常见的一种逻辑电路,它在数字信号处理、数据存储等领域有着广泛的应用。
在实际的电子设备中,移位寄存器能够实现数据的移位、存储和转换,其工作原理十分重要。
本文将从移位寄存器的定义、分类、工作原理以及应用等方面进行详细介绍。
首先,移位寄存器是一种能够将数据进行移位操作的寄存器,它由多个触发器组成,能够实现数据的平行移位。
根据移位方向的不同,移位寄存器可以分为左移寄存器和右移寄存器两种类型。
左移寄存器是将数据向左移位,右移寄存器则是将数据向右移位。
移位寄存器的工作原理主要依赖于触发器的状态变化和时钟信号的控制,通过时钟信号的触发,数据可以按照设定的规则进行移位操作。
其次,移位寄存器的工作原理可以通过时钟信号和触发器的状态变化来解释。
在移位寄存器中,每个触发器都有两个稳定的状态,分别是置位和复位状态。
当时钟信号触发时,触发器的状态会发生变化,数据就会按照设定的方向进行移位。
对于左移寄存器来说,数据会从右向左移动,而右移寄存器则是从左向右移动。
通过时钟信号的不断触发,数据可以连续进行移位操作,实现数据的平行移位。
此外,移位寄存器在数字信号处理和数据存储中有着广泛的应用。
在数字信号处理中,移位寄存器可以用来实现数字信号的滤波、延时等功能。
在数据存储中,移位寄存器可以用来进行数据的缓存和转换,提高数据的处理效率。
此外,移位寄存器还可以用来实现逻辑运算、乘法和除法等操作,具有很高的灵活性和可编程性。
总的来说,移位寄存器是一种十分重要的数字电路,它能够实现数据的移位、存储和转换,具有广泛的应用前景。
通过对移位寄存器的工作原理进行深入理解,我们可以更好地应用它来解决实际的工程问题,提高数字电路的设计和应用水平。
希望本文能够对读者有所帮助,谢谢阅读!。
32位桶式移位寄存器FPGA实现
维普资讯 http://www.ຫໍສະໝຸດ
・
10 ・ 0
该 电路 采 用 的思 想是 将输 入 的 3 2数据 根据 移
位的类型和特点 , 将不同的操作类 型中的移位的位 数重新编码 , 将可 以合并的情况合并在一起 , 扩展成
6 位 的数 据 。然后 根据要 移 动 的位 数 从这 6 4 4位 数
收 稿 日期 :07—0 20 6—2 1
作者简介 : 杜慧敏 (9 6 , , 16 一)女 山东潍坊人 , 西安邮 电学院计算机系教授 , 博士 ;
3 2位 桶 式 移 位 寄 存 器 F G 实 现 P A
杜 慧敏 , 明 明 , 子 杰 王 沈
( 西安邮电学院 计算机 系, 陕西 西安 70 2 ) 1 1 1
摘要 : 式移位寄存 器是 C U 中常 用的一个部件 , 集成电路设 计 中通 常用晶体管 实现 。随着 F G 桶 P 在 P A的性 能的提
1设 计 与 实现 方 法
11 6 . 4位 扩展方 法 实现移 位操作 1 1 1 设计 思 想 ..
图 1 扩 展 方 法
通过观察 , 我们发现逻辑左移和算术左移完成 的操 作是 一致 , 因此 , 扩展 的时候 , 3 高 2位是需 要移
位 数据 , 而低 3 扩 展成 0即可 ; 2位 逻辑 右 移 和算 术 右移 除 了算术 右 移最 高 位 的符 号 位保 持 不 便 以外 , 其余 的操 作 是一 致 , 因此 , 展 的 时候 低 3 扩 2是需 要 扩展 的数 据 , 高 3 则 扩展 成 0 在最 后 输 出数 而 2位 , 据 的时候 , 将算 术右移 的情况 单独考 虑 , 它 的符号 将
XILINX FPGA设计中如何更好的优化资源
XILINX FPGA设计中如何更好的优化资源在设计过程中我们只要注意一些要点,就可以节省下宝贵的芯片资源。
下面以XILINX FPGA为例阐述在设计中如何节约资源。
一从器件角度来理解如何节省资源FPGA是基于查找表技术的可编程逻辑器件,其内部包含丰富的资源:CLB,BlockRam 而有些器件还包含了DSP48等资源。
CLB是FPGA的基本逻辑单元,CLB模块不仅可以用于实现组合逻辑,时序逻辑,还可以配置为分布式RAM和分布式ROM。
每个CLB由2个或4个相同的Slice和附加逻辑构成,CLB内部结构如图1所示。
图1 . CLB内部结构每个Slice由2个LUT,2个FF和进位链构成。
图2即为6输入LUT的内部结构。
图2 . LUT6内部结构1.利用Slice来优化资源。
巧妙利用Slice可以节约很多的资源,典型的例子就是移位寄存器。
对比用代码编写的32位移位寄存器和用原语调用的32位移位寄存器,就可以看出怎样利用Slice节约资源。
用代码编写的32位移位寄存器:always@(posedge clk)beginQ <= {Q[30:0],D};end用原语调用一个32位移位寄存器:SRL32#(.INIT(32'h00000))U_DIV_LATENCY_OIF0[2:0](.CLK(Gclk), .D(Oif_base_q), .Q(Oi f_base_q0), .A0(1'b1), .A1(1'b1), .A2(1'b1), .A3(1'b1) , .A4(1'b1));综合之后可以发现,使用代码会消耗32个FF,而使用原语只要一个LUT6就可以完成。
用原语生成移位寄存器要比用代码生成寄存器节约32个触发器资源。
当然我们也可以例化IP核,但是,使用原语会比例化IP核在complier时候更加节省时间。
因为Verilog语言的IP核是由.v和.ngc文件构成的。
CS5532寄存器相关
CS5532寄存器相关1、ADC寄存器及操作模式2、转换器的每一个通道都包含一个32位增益校准寄存器一个32位偏移校准寄存器3、转换器具有一个32位的配置寄存器,其中10位被使用,用来设置操作模式,诸如掉电操作、ADC复位、模拟输入短路等等4、每个通道设置寄存器(CSR)为32位,保存两个16位的转换指令,此之为设置单元(Setup),上电时,这些寄存器可以由微控制器用转换指令初始化,然后用户可以根据所选设置单元(setup)设置的工作模式进行单次或连续模式转换,或进行校准。
在单次转换模式下,需要向串口写入一个8位的命令字,命令字中的指针位指向通道设置寄存器中将要执行的16位命令。
通过对16位设置单元(setup)编程可用ADC 的任一输入通道执行模数转换。
同一模拟输入通道可以使用多个16位设置单元(setup),因此用户可以对同一输入信号进行不同速度、不同增益的转换。
另一方面,用户也可以设置这些寄存器,对每一个输入通道执行不同的转换。
-----有点意思----可以设置几种转换模式----模数转换器有连续转换能力,通过设置16位设置单元(setup)内容进行连续转换。
在连续转换模式下,转换结果数据被转入一个移位寄存器中,转换结束时SDO引脚产生标志,用户可以读寄存器结果。
以下部分叙述1、如何初始化2、如何执行偏移及增益校准3、如何将ADC设置为不同的转换模式命令寄存器上电后的初始值CS5532不具有上电复位功能,要初始化模数转换器,必须执行软件复位,软件复位可以通过串口初始化程序对串口复位实现发送15byte SYNC1(0xff),然后发送1byte SYNC0(0xfe),可以将串口复位成命令模式。
上述两条程序可以随时发出,从而对串口再次进行初始化。
(只是完成了串口复位)再用户必须设置配置寄存器的系统复位(RS)位进而实现系统复位在以后的时间里也可随时设置RS位,进而复位系统,当一个复位周期完成后,RS 自动返回到0,(在这里可以循环等待)片内寄存器的初始值为配置寄存器00000000偏移寄存器00000000增益寄存器01000000通道设置寄存器00000000上面谈到一个复位周期------多长时间------系统初始化或复位后,片内控制器进入命令模式,等待接受一个有效的命令(8位数据)读写片内寄存器CS5532的偏移、增益、配置和通道设置寄存器均可读写,而转换数据寄存器只能读,不能写写操作:写入相应的写指令,后跟随32位的写入数据读操作:写入相应的读指令,后会收到32位读出数据读写完毕后,自动回到命令模式还可以对偏移、增益、配置和通道寄存器进行阵列式访问(就是连续读写,即用一个命令访问所有同类寄存器)。
80386的寄存器组成
80386共提供7种类型的32位寄存器,如下:1.通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)2.段寄存器(CS、SS、DS、ES、FS、GS)3.指令指针寄存器和标志寄存器(EIP、EFLAGS)4.系统表寄存器(GDTR、IDTR、LDTR、TR)5.控制寄存器(CR0、CR1、CR2、CR3、CR4)6.调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)7.测试寄存器(TR6、TR7)其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。
下图是前四类寄存器的大致示意图:本文只对这些寄存器做一个大致的介绍,其中有些特殊且有较大意义的寄存器,会另文介绍。
一、通用寄存器一组八个通用寄存器是对8086/80286通用寄存器的32位扩展,其用法与在8086/80286中相似,支持8位、16位、32位操作,进行32位操作是,寄存器名称前面冠以“E”。
这八个寄存器的名称如下:EAX(累加器)、EBX(基址)、ECX(计数)、EDX(数据)、ESP(栈指针)、EBP(基址指针)、ESI(源变址)、EDI(目的变址)。
二、段寄存器80386比8086/80286增加了两个段寄存器FS、GS。
除CS支持代码段,SS支持堆栈段外,程序员可以利用其它的所有段寄存器支持数据段。
每个段寄存器对应这一个64位高速缓存器(有些资料中说有96位,但值使用其中的64位),这在8086中是没有的(在80286中为48位),它的具体作用将另文介绍。
三、指令指针寄存器和标志寄存器指令寄存器EIP是对8086/80286指令指针寄存器的32位扩展,它包含着待执行指令的32位偏移量,该值总是相对CS所代表的段基址而言的。
标志寄存器也是对8086/80286标志寄存器的32位扩展,其定义如下(这张图截自Intel关于IA32架构的最新文档):其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已经存在,请参考相关资料。
单片机移位寄存器
单片机移位寄存器引言:在单片机的应用中,移位寄存器是一种非常常用的功能模块。
它能够实现数据的移位操作,常被用于串行通信、显示控制、数据传输等场景。
本文将介绍移位寄存器的工作原理、应用领域以及设计注意事项。
一、移位寄存器的工作原理移位寄存器是一种能够将数据按位进行移位操作的寄存器。
它内部由多个触发器组成,每个触发器都能存储一个二进制位。
移位寄存器的输入端可以接收一个数据位,通过控制线来选择是向左移位还是向右移位。
当移位方向选择为向左移位时,寄存器中的所有数据位都向左移动一位,最右边的数据位被丢弃,同时在最左边补入一个新的数据位。
当移位方向选择为向右移位时,寄存器中的所有数据位都向右移动一位,最左边的数据位被丢弃,同时在最右边补入一个新的数据位。
这样就实现了数据的移位操作。
二、移位寄存器的应用领域1. 串行通信:移位寄存器常被用于串行通信中,它可以将并行数据转换为串行数据进行传输。
通过不断地向右移位,将并行数据逐位发送出去,从而实现数据的串行传输。
在接收端,再通过向左移位将串行数据转换为并行数据进行处理。
2. 显示控制:在数码管显示、液晶显示等场景中,移位寄存器可以用来控制显示的内容。
将需要显示的数据按照一定的格式存储在移位寄存器中,然后通过移位操作将数据逐位输出到显示模块,实现显示效果。
3. 数据传输:移位寄存器还可以用于数据传输场景。
例如,将传感器采集到的数据存储在移位寄存器中,通过移位操作将数据传输到其他模块进行处理或存储。
三、移位寄存器的设计注意事项1. 移位方向的选择:在设计中需要明确移位的方向,根据实际需求选择向左移位还是向右移位。
2. 移位速度的控制:移位的速度需要根据具体应用场景进行控制,过快或过慢都可能导致数据错误。
3. 寄存器位数的选择:根据需要存储的数据位数选择合适的移位寄存器。
位数过少可能导致数据丢失,位数过多则会浪费资源。
4. 级联的设计:如果需要存储的数据位数超过一个移位寄存器所能存储的范围,可以通过级联多个移位寄存器来实现,需要合理设计级联的方式和控制信号。
单片机移位寄存器
单片机移位寄存器在单片机中,移位寄存器是一种重要的功能模块,用于实现数据的移位操作。
移位寄存器通过改变数据的位序,可以实现数据在寄存器内部的移动和重排。
它在数字电路和信号处理中具有广泛的应用,如数据压缩、图像处理、通信等领域。
1. 移位寄存器的基本概念移位寄存器是一种特殊的寄存器,它具有多个存储单元(位),每个存储单元可以存储一个二进制位。
移位寄存器可以实现数据的左移和右移操作,通过改变数据的位置,可以将数据位重新排列。
移位寄存器可以分为串行移位寄存器和并行移位寄存器两种类型。
2. 串行移位寄存器串行移位寄存器是由多个触发器级联而成的,数据在寄存器内部逐个位地移动。
通常情况下,串行移位寄存器有一个输入端和一个输出端,数据通过输入端进入寄存器,经过一系列的触发器后,从输出端输出。
串行移位寄存器具有较小的尺寸和较低的功耗,适用于复杂的移位操作。
3. 并行移位寄存器并行移位寄存器是由多个存储单元并列连接而成的,数据同时在所有存储单元内进行移动。
并行移位寄存器具有较高的并行性和处理速度,但尺寸较大且功耗较高。
并行移位寄存器适合于对数据进行快速处理和重排。
4. 移位寄存器的应用移位寄存器在数字电路和信号处理中有广泛的应用。
在数字电路中,移位寄存器用于实现数据的序列操作,如数据的移动、重排、加密等。
在信号处理中,移位寄存器用于数据的滤波、压缩、编码/解码等操作。
5. 移位寄存器的扩展移位寄存器可以通过级联或并行连接的方式进行扩展。
级联连接是通过将多个移位寄存器的输出端与下一个移位寄存器的输入端相连,形成一个更大的移位寄存器。
并行连接是通过将多个移位寄存器的输入端同时连接到数据源,以实现更高的处理速度和并行性。
6. 总结移位寄存器作为一种重要的功能模块,在单片机中具有广泛的应用。
它可以实现数据的移位操作,改变数据的位序,从而实现数据的移动和重排。
串行移位寄存器和并行移位寄存器是常见的两种类型,各有优缺点。
移位寄存器可以通过级联或并行连接进行扩展,以满足不同场景的需求。
32位移双向位寄存器的设计(DOC)
EDA课程设计报告题目:32位移位寄存器设计专业班级:电气工程及其自动化101 姓名:完成日期:2012年12月 30 日设计要求双向移位寄存器设计要求:完成以下功能特性的双向32 位移位寄存器。
同时要求有使能端,用1602 显示。
32位移位寄存器设计摘要:移位寄存器是基本的同步时序电路,基本的移位寄存器可以实现数据的串行/并行或并行/串行的转换、数值运算以及其他数据处理功能。
在本设计中使用硬件描述语言Verilog,在EDA 工具QuartussII中,设计32位双向移位寄存器硬件电路,根据设计语言进行功能时序仿真,验证设计的正确性与可行性。
关键词:Verilog QuartusII 移位寄存器1 引言随着社会的发展,科学技术也在不断的进步。
特别是计算机产业,可以说是日新月异,移位寄存器作为计算机的一个重要部件,从先前的只能做简单的左移或右移功能的寄存器到现在广泛应用的具有寄存代码、实现数据的串行-并行转换、数据运算和数据处理功能的移位寄存器。
移位寄存器正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言Verilog对移位寄存器进行编程实现。
现在各种装饰用的流水灯、广告彩灯、宣传画越来越多的出现在人民的生活当中,这些装饰控制设备多数要用移位寄存器来实现。
在计算机中常要求寄存器有移位功能。
如在进行乘法时,要求将部分积右移;在将并行传送的数转换成串行数时也需要移位。
因此,移位寄存器的设计是必要的。
2 总体设计方案移位寄存器的功能即是对每一个上升沿到来时,并且寄存器使能是时,对输入按照移位模式控制信号的要求实现输出的左移和右移。
首先,要完成双向的32位移位寄存器,就首先必须要实现8位移位寄存器作为基础。
其次,在4个8个移位寄存器的基础上达到32位移位寄存器的功能。
第一要有模式控制输入,来控制移位寄存器的移位方向;第二,有使能端,即在什么情况下移位寄存器才可以正常工作,才可以实现模式控制,什么时候置数,什么时候移位,是左移还是右移,这就要求使能是模式控制输入的前提;然后是脉冲控制信号,由要求可知,移位寄存器是在上升沿触发的,即在每一次上升沿到来时,移位寄存器使输入按照模式控制的要求向左或向右移一位;最后输入和输出,都要用到32位并行输入和输出。
计算机设计与实践——32位移位寄存器
// Wait 100 ns for global reset to finish CS=0; for(i=0;i<33;i=i+1) begin #8; reg_in = 32'hffffffff; sft_cnt = i; end #30; CS=1; for(i=0;i<33;i=i+1) begin #8; reg_in = 32'hffffffff; sft_cnt = i; end #30; CS=2; for(i=0;i<33;i=i+1) begin #8; reg_in = 32'h800ff000; sft_cnt = i; end // Add stimulus here
endcase 3: reg_out<=reg_in; endcase end endmodule
测试代码: module test; // Inputs reg [1:0] CS; reg clk; reg [31:0] reg_in; reg [5:0] sft_cnt; // Outputs wire [31:0] reg_out; // Instantiate the Unit Under Test (UUT) reg_shift1 uut ( .CS(CS), .clk(clk), .reg_in(reg_in), .sft_cnt(sft_cnt), .reg_out(reg_out) ); integer i; always #1 clk=~clk; initial begin // Initialize Inputs CS = 0; clk = 0; reg_in = 0; sft_cnt = 0;
end
endmodule
基于Verilog设计的双向32位移位寄存器
双向移位寄存器摘要:系统使用EDA技术设计了具有移位功能的寄存器,采用硬件描述语言VHDL进行设计,然后进行编程,时序仿真。
软件基于Verilog语言实现了双向32位移位寄存器的控制功能。
通过本设计熟悉QuartusII环境下的硬件描述操作流程,掌握基本的Verilog语法与编写风格。
关键字:EDA;Verilog;32位双向移位寄存器1.引言随着社会的发展,科学技术也在不断的进步。
特别是计算机产业,可以说是日新月异,移位寄存器作为计算机的一个重要部件,从先前的只能做简单的左移或右移功能的寄存器到现在广泛应用的具有寄存代码、实现数据的串行-并行转换、数据运算和数据处理功能的移位寄存器。
近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:(1)电子器件及其技术的发展将更多地趋向于为EDA服务;(2)硬件电路与软件设计过程已高度渗透;(3)电子设计技术将归结为更加标准、规范的EDA工具和硬件描述语言HDL的运用;(4)数字系统的芯片化实现手段已成主流。
因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。
移位寄存器正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对32位双向移位寄存器进行编程实现。
2.课程设计的目的在计算机中常要求寄存器有移位功能。
如在进行乘法时,要求将部分积右移;在将并行传送的数转换成串行数时也需要移位。
因此,移位寄存器的设计是必要的。
本次设计的目的就是利用计算机组成原理中移位寄存器的相关知识,通过课程设计更加深入的了解移位寄存器的功能。
了解EDA技术,并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合计算机组成原理中的相关知识理论联系实际,掌握所学的课程知识。
通过对移位寄存器的设计,巩固和综合运用所学知识,提高对计算机组成原理的理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四
一、实验名称
32位并进/并出移位寄存器设计
二、实验原理
用一个8位移位寄存器,再增加一些电路,如4个8位锁存器等,设计成为一个能为32位二进制数进行不同方式移位的移位寄存器。
三、实验步骤
1、建立一个工程项目,设置路径,项目名和顶层实体名一致;
2、设计一个8位移位寄存器电路;
3、设计一个8位锁存器电路;
4、运用元件调用声明语句和元件例化语句完成顶层设计。
四、实验程序
1、八位移位寄存器程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY jicun IS
PORT ( CLK,CO: IN STD_LOGIC; --时钟和进位输入
MD : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --移位模式控制字 D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- 待加载移位的数据 QB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --移位数据输出
CN : OUT STD_LOGIC); --- 进位输出
END jicun;
ARCHITECTURE behav OF jicun IS
SIGNAL REG : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL CY : STD_LOGIC;
BEGIN
PROCESS(CLK,CO,MD)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
CASE MD IS
WHEN "001"=> REG(0)<=CO; ---带进位循环左移
REG(7 DOWNTO 1)<= REG(6 DOWNTO 0);CY<=REG(7);
WHEN "010" => REG(0)<=REG(7); ---自循环左移
REG(7 DOWNTO 1)<= REG(6 DOWNTO 0);
WHEN "011"=>REG(7)<=REG(0); ---自循环右移
REG(6 DOWNTO 0)<=REG(7 DOWNTO 1);
WHEN "100" =>REG(7)<=CO; ---带进位循环右移
REG(6 DOWNTO 0)<=REG(7 DOWNTO 1);CY<=REG(0);
WHEN "101" =>REG(7 DOWNTO 0)<=D(7 DOWNTO 0); --加载待移数 WHEN OTHERS=>REG<=REG;CY<=CY;--保持
END CASE;
END IF;
END PROCESS;
QB(7 DOWNTO 0)<=REG(7 DOWNTO 0);CN<=CY;
END behav;
2、锁存器程序
library ieee ;
use ieee.std_logic_1164.all ;
entity suocun is
port(d : in std_logic_vector(7 downto 0) ;
q: out std_logic_vector(7 downto 0);
clk : in std_logic );
end suocun ;
architecture one of suocun is
signal q1: std_logic_vector(7 downto 0);
begin
process(clk,q1)
begin
if clk'event and clk='1'
then
q1<=d;
end if;
end process;
q<=q1;
end one;
3、顶层设计程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY jicun32 IS
PORT ( clk0,co: IN STD_LOGIC; --时钟和进位输入
md : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --移位模式控制字
db : IN STD_LOGIC_VECTOR(31 DOWNTO 0); -- 待加载移位的数据
qb : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); --移位数据输出 cn : OUT STD_LOGIC); --- 进位输出
END jicun32;
ARCHITECTURE one OF jicun32 IS
COMPONENT jicun
PORT ( CLK,CO: IN STD_LOGIC;
MD : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
QB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
CN : OUT STD_LOGIC);
END COMPONENT;
COMPONENT suocun
port(d : in std_logic_vector(7 downto 0) ;
q: out std_logic_vector(7 downto 0);
clk : in std_logic );
END COMPONENT;
SIGNAL e,f,g,h : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL l,m,n : STD_LOGIC;
BEGIN
u1: suocun PORT MAP(d=>db(7 DOWNTO 0),q=>e,clk=>clk0);
u2: jicun PORT MAP (D=>e,QB=>qb(7 DOWNTO 0),
CLK=>clk0,CO=>co,CN=>l,MD=>md);
u3: suocun PORT MAP(d=>db(15 DOWNTO 8),q=>f,clk=>clk0); u4: jicun PORT MAP(D=>f,QB=>qb(15 DOWNTO 8),
CLK=>clk0,CO=>l,CN=>m,MD=>md);
u5: suocun PORT MAP(d=>db(23 DOWNTO 16),q=>g,clk=>clk0); u6: jicun PORT MAP(D=>g,QB=>qb(23 DOWNTO 16),
CLK=>clk0,CO=>m,CN=>n,MD=>md);
u7: suocun PORT MAP(d=>db(31 DOWNTO 24),q=>h,clk=>clk0); u8: jicun PORT MAP(D=>h,QB=>qb(31 DOWNTO 24),
CLK=>clk0,CO=>n,CN=>cn,MD=>md);
END ARCHITECTURE one;
五、仿真结果
1、锁存器仿真
2、八位寄存器仿真
3、顶层设计仿真
4、32位并进并出移位寄存器RTL图。