基于Verilog设计的双向32位移位寄存器

合集下载

verilog移位寄存器的写法

verilog移位寄存器的写法

verilog移位寄存器的写法Verilog语言是一种数字电路描述语言,广泛应用于数字电路设计和仿真。

在Verilog语言中,移位寄存器是一种常用的数字电路,用于将输入信号按位移动到输出信号中。

本文将介绍Verilog移位寄存器的写法,以帮助读者更好地理解和应用该电路。

一、左移移位寄存器的实现左移移位寄存器将在输入数据中选择若干位左移一定的位数,从而输出一组新的数据。

其中,左移的位数由移位寄存器的控制信号指定。

在Verilog中,左移寄存器可以使用逻辑左移运算符<<实现。

module left_shift_reg( input clk, //时钟信号input [7:0] data_in, //输入数据input [3:0] shift, //左移位数output [7:0] data_out //输出数据);reg [7:0] reg_data; //寄存器数据//左移运算always @(posedge clk)beginreg_data <= data_in << shift;end//输出信号assign data_out = reg_data;endmodule在上面的Verilog代码中,使用reg_data寄存器存储移位操作后的数据。

输入信号data_in和shift分别表示输入数据和移位位数。

使用always@(posedge clk)语句表示该逻辑运算在时钟信号的上升沿时触发。

在该语句中,左移运算符<<用于执行逻辑左移运算。

最后,输出信号data_out被赋予reg_data的值。

二、右移移位寄存器的实现右移移位寄存器将在输入数据中选择若干位右移一定的位数,从而输出一组新的数据。

其中,右移的位数由移位寄存器的控制信号指定。

在Verilog中,右移寄存器可以使用逻辑右移运算符>>实现。

module right_shift_reg( input clk, //时钟信号input [7:0] data_in, //输入数据input [3:0] shift, //右移位数output [7:0] data_out //输出数据);reg [7:0] reg_data; //寄存器数据//右移运算always @(posedge clk)beginreg_data <= data_in >> shift;end//输出信号assign data_out = reg_data;endmodule在上面的Verilog代码中,使用reg_data寄存器存储移位操作后的数据。

32位移位寄存器

32位移位寄存器

实验四一、实验名称32位并进/并出移位寄存器设计二、实验原理用一个8位移位寄存器,再增加一些电路,如4个8位锁存器等,设计成为一个能为32位二进制数进行不同方式移位的移位寄存器。

三、实验步骤1、建立一个工程项目,设置路径,项目名和顶层实体名一致;2、设计一个8位移位寄存器电路;3、设计一个8位锁存器电路;4、运用元件调用声明语句和元件例化语句完成顶层设计。

四、实验程序1、八位移位寄存器程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY jicun ISPORT ( 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 ISSIGNAL REG : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL CY : STD_LOGIC;BEGINPROCESS(CLK,CO,MD)BEGINIF CLK'EVENT AND CLK='1' THENCASE MD ISWHEN "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 isport(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 issignal q1: std_logic_vector(7 downto 0);beginprocess(clk,q1)beginif clk'event and clk='1'thenq1<=d;end if;end process;q<=q1;end one;3、顶层设计程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY jicun32 ISPORT ( 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 ISCOMPONENT jicunPORT ( 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 suocunport(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;BEGINu1: 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图。

Verilog实验三原理2:ALU工作原理 (1)

Verilog实验三原理2:ALU工作原理 (1)

ALU工作原理ALU是算术逻辑运算单元,能执行的功能包含算术运算(加减乘除)以及逻辑运算(与、或、异或、或非、移位等)。

一、基本电路结构分析图中A(31:0)和B(31:0)分别代表2个32位的操作数,A与B进行何种操作由控制信号ALU_operation(2:0)决定,两个操作数进行ALU算术逻辑运算操作后的结果输出至32位res(31:0)端口。

图中各逻辑运算组件功能如下:1)and32组件:对A与B 进行逻辑“与”操作。

2)or32组件:对A与B 进行逻辑“或”操作。

3)ADC32组件:对A与B 进行算术“加”操作。

4)xor32组件:对A与B 进行逻辑“异或”操作。

5)nor32组件:对A与B 进行逻辑“或非”操作。

6)srl32组件:对操作数B 进行移位操作。

Ø问题:为什么图中四则运算实现电路没有减法和乘除法部分?答:因为在计算机中,减法是通过补码的加法来实现的,乘除法是通过加法和移位操作来实现的。

二、如何确定操作数A与B是执行何种运算操作对操作数A与B进行何种操作,由3根控制信号ALU_operation(2:0)决定。

ALU_operation(2:0) 连接至下图8选1多路选择器MUX8T1控制信号线上。

多路选择器原理:左边的8根输入线I0~I7代表输入数据,右边的o线代表输出数据,括号(31:0)代表输入与输出数据为32位。

上面s(2:0)代表3位控制信号:•当s(2:0) = 000时,输出o = I0.•当s(2:0) = 001时,输出o = I1.•当s(2:0) = 010时,输出o = I2.•当s(2:0) = 011时,输出o = I3. 依次类推.由于输入有8根线,因此,控制信号s需要3根选择线。

由于ALU_operation(2:0)连接至多路选择器的控制信号线s(2:0)上,因此,ALU_operation(2:0)的不同取值将决定多路选择器的输出,也即决定ALU电路的最终输出结果res(31:0)。

基于Verilog HDL的32位分频计数器的设计

基于Verilog HDL的32位分频计数器的设计
• Vrilog HDL的设计流程及QuartusⅡ简介。 • 32位分频器计数器的原理。 • 32为分频计数器的源代码和仿真。
分频计数器的基本原理
• 选择合适频率的晶振,然后对其分频,得到 系统需要的时钟频率,再对这一频率时钟进行计 数据。一般的计数器都有输入时钟信号,这里以 晶振的输出时钟作为分频计数据器的输入时钟 CLK。复位信号对各信号进行复位。片选信号用 于选通芯片,以备读写计数值。写信号用于写计 数初始值。读信号用于读取计数值。地址信号 ADDR决定读写计数值的高位还是低位。CLKl为 分频输出的时钟信号。c为输出的进位信号。 DATA为双向数据信号+当系统为分频计数器写 入初始值时是输入,当系统读取计数值时是输出。
基于Verilog HDL的32位分频计 数器的设计
微电子 高翔
Verilog HDL的优点
• Verilog HDL是一种通用的硬件描述语言,易 • 学易用
• Verilog HDL允许在同一个电路模型内进行不 • 同抽象层次的描述
• Verilog HDL 绝大多数流行的综合工具都支持
• 所有的制造厂商都提供用于Verilog HDL综合 • 之后的逻辑仿真的元件库
原理图
实现功能综合
程序仿真
总结
• 首先本文介绍了硬件描述语言的发展状况,并对国内发展 提出了建议,然后对本
• 文要用的硬件语言VerilogHDL进行了详细介绍,并对仿真 所用的软件进行了介

绍。
• 其次介绍了32位分频器计数器的原理,并介绍了其它的 分频器,讨论了优缺点,
• 并且详细介绍了本文所用的分频计数器的原理和介绍、分 析。
HDL语言的发展。基于Verilog HDL的优越性,IEEE于

VHDL实验双向移位寄存器(完整版)

VHDL实验双向移位寄存器(完整版)

VHDL实验双向移位寄存器(完整版)实验课名称:VHDL硬件描述语言实验项目名称:双向移位寄存器专业名称:电子科学与技术班级:电科二班学号:***** 学生姓名:****教师姓名:****__2010__年_11_月_14_日组别_____________________同组同学_______________________ 实验日期_____年___月___日实验室名称______________成绩_____一、实验名称:双向移位寄存器二、实验目的与要求:实验目的:设计一个双向移位寄存器,理解移位寄存器的工作原理,掌握串入\并出端口控制的描述方法。

实验要求:通过VHDL编程,实现双向移位寄存器,要求有1个方向控制端、1个时钟脉冲输入、1个异步清零端、1个数据输入端以及8位的并行数据输出端,具体接口说明如下图所示。

clk:移位寄存器时钟脉冲输入,上升沿有效;din:串行数据输入端;clr:异步清零信号,高电平有效;dir:方向控制端,要求低电平左移,高电平右移;dout[7..0]:8位数据并行输出端;首先在QuartusII上进行功能和时序仿真,之后通过器件及其端口配置下载程序到SOPC开发平台中。

在硬件实现中,要求:1. 用实验平台的按键实现时钟控制(clk)、方向控制(dir)、清零(clr)以及数据输入(din):端口名按键名功能clk 键7 时钟控制din 键8 数据输入clr 键1 异步清零dir 键5 方向控制2. 用实验平台的LED发光阵列的LED1,LED8显示并行数据的输出。

三、实验内容:, 新建工程:1、打开Quartus,新建工程,选择好路径,工程顶层名为d_reg ;2、新建工程,如果包含已编好的文件则可以添加,如果无则可以略过 ;3、选择我们的器件信息:型号为:EP2C36F484C84、单击Next>,指定第三方工具,这里我们不指定第三方EDA工具,单击Next>后结束工程建立。

verilog中移位寄存器写法

verilog中移位寄存器写法

verilog中移位寄存器写法在Verilog中,移位寄存器可以使用不同的语法来实现。

以下是一些常见的写法:1. 使用“<<”和“>>”运算符:在Verilog中,可以使用“<<”和“>>”运算符来进行逻辑左移和逻辑右移操作。

例如,如果要实现一个8位的移位寄存器,可以使用以下语法:reg [7:0] shift_reg;// 逻辑左移。

shift_reg = shift_reg << 1;// 逻辑右移。

shift_reg = shift_reg >> 1;2. 使用“{ }”拼接符号:另一种常见的写法是使用“{ }”拼接符号来实现移位寄存器。

例如,如果要实现一个4位的移位寄存器,可以使用以下语法:reg [3:0] shift_reg;// 逻辑左移。

shift_reg = {shift_reg[2:0], 1'b0};// 逻辑右移。

shift_reg = {1'b0, shift_reg[3:1]};3. 使用for循环实现多位移位:如果需要实现多位移位,可以使用for循环来实现。

例如,如果要实现一个16位的移位寄存器,可以使用以下语法:reg [15:0] shift_reg;integer i;// 逻辑左移。

for (i = 0; i < 15; i = i + 1) begin. shift_reg[i] = shift_reg[i+1];end.shift_reg[15] = 1'b0;// 逻辑右移。

for (i = 15; i > 0; i = i 1) begin. shift_reg[i] = shift_reg[i-1];end.shift_reg[0] = 1'b0;这些是在Verilog中实现移位寄存器的一些常见写法。

根据具体的应用场景和需求,可以选择适合的写法来实现移位寄存器功能。

实验1 双向移位寄存器的设计

实验1 双向移位寄存器的设计

实验1 双向移位寄存器的设计一 、实验目的1.学习时序逻辑电路;2.学习寄存器的原理; 二 、实验内容1.编写一个清零输入,可以双向移位的寄存器的Verilog 代码并仿真,编译下载验证。

三、 实验要求1.根据参考内容,用Verilog HDL 语言进行双向移位寄存器的设计。

2.用Quartus II 或 Modelsim 对其进行功能或时序进行波形仿真验证;3.下载到FPGA 开发板验证; 四、 实验环境Quartus prime 五、 实验原理移位寄存器是基本的同步时序电路,基本的移位寄存器可以实现数据的串行/并行或并行/串行的转换、数值运算以及其他数据处理功能。

但有时候需要对移位寄存器的数据流向加以控制,实现数据的双向移动,其中一个方向称为右移,另一个方向称为左移,这种移位寄存器就称为双向移位寄存器。

根据国家标准规定,逻辑图中的最低有效位(LSB)到最高有效位(MSB)的电路排列顺序应从上到下,从左到右。

因此定义移位寄存器中的数据从低位触发器移向高位为右移,移向低位为左移。

为了扩展逻辑功能和增加使用的灵活性,某些双向移位寄存器集成电路产品又附加了并行输入、并行输出等功能。

下图所示是上述几种工作模式的简化示意图。

并行输入 并行输出右移串行输入(D IR 左移串行输出(D OL 右移串行输出(D OR ) D IL )0123图1 双向移位寄存器工作模式简图表1 双向移位寄存器功能表表2 8位双向移位寄存器真值表六、实验步骤1.打开Quartus prime软件,进入系统页面后点击“New Project Wizard”新建一个工程;2.创建工程后,在工程中再新建一个文件。

在这个文件中编写实验程序,其步骤是选择菜单File-New-Verilog HDL file3. 编译前对整个工程进行参数设置。

首先在工程名称上右键,单击“Settings”,选择“Simulation”,进行一系列的参数设置。

交换网络32路复用模块设计verilog

交换网络32路复用模块设计verilog

电子科技大学ASIC课程设计报告二学号:201222240937 姓名:周恒课题题目:交换网络32路复用模块设计2013年5月题目要求Develop, verify (before and after synthesis), and synthesize a Verilog module that encapsulates the functionality shown in Fig.2, where the outputs of the A/D converters are inputs to a module that interleaves the sample bytes, with separate sub-modules for the control unit, the mux, the demux, the parallel to serial converter, and the serial to parallel converter. Define additional interface signals as needed to complete the design. Model the multiplexer so that its outputs will be registered. Carefully document your work.图1-2 一个简单的交换控制系统组成本次设计的主要内容为交换网络复用与解复用模块,在下文做出详细设计,包括设计规格书、设计框图、仿真波形和设计结论。

一、设计框图整个系统由5个模块组成,其顶层模块如下图所示:1.控制模块:用于对整个系统的控制,包括复用控制,串并转换控制,并串转换控制和解复用控制。

2.复用模块:对32路输入数据进行复用,依次输入系统。

3.并串转换模块:将8bit的并行数据转换为串行数据。

4.串并转换模块:将对应的串行数据转换为并行数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

双向移位寄存器摘要:系统使用EDA技术设计了具有移位功能的寄存器,采用硬件描述语言VHDL进行设计,然后进行编程,时序仿真。

软件基于Verilog语言实现了双向32位移位寄存器的控制功能。

通过本设计熟悉QuartusII环境下的硬件描述操作流程,掌握基本的Verilog语法与编写风格。

关键字:EDA;Verilog;32位双向移位寄存器1.引言随着社会的发展,科学技术也在不断的进步。

特别是计算机产业,可以说是日新月异,移位寄存器作为计算机的一个重要部件,从先前的只能做简单的左移或右移功能的寄存器到现在广泛应用的具有寄存代码、实现数据的串行-并行转换、数据运算和数据处理功能的移位寄存器。

近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:(1)电子器件及其技术的发展将更多地趋向于为EDA服务;(2)硬件电路与软件设计过程已高度渗透;(3)电子设计技术将归结为更加标准、规范的EDA工具和硬件描述语言HDL的运用;(4)数字系统的芯片化实现手段已成主流。

因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。

移位寄存器正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对32位双向移位寄存器进行编程实现。

2.课程设计的目的在计算机中常要求寄存器有移位功能。

如在进行乘法时,要求将部分积右移;在将并行传送的数转换成串行数时也需要移位。

因此,移位寄存器的设计是必要的。

本次设计的目的就是利用计算机组成原理中移位寄存器的相关知识,通过课程设计更加深入的了解移位寄存器的功能。

了解EDA技术,并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合计算机组成原理中的相关知识理论联系实际,掌握所学的课程知识。

通过对移位寄存器的设计,巩固和综合运用所学知识,提高对计算机组成原理的理解。

3.课程设计的内容本课程设计是带有32位双向移位寄存器。

CLK是移位时钟信号,load是并行数据预置使能信号,QB是串行输出端口。

此移位寄存器的工作方式是:当CLK的上升沿到来时过程被启动,如果这时预置使能load为低电平,LEFT_RIGHT为低电平,循环右移;如果预置使能load为低电平,LEFT_RIGHT 为高电平,循环左移。

4 Verilog HDL介绍4.1Verilog语言的特点(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。

强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。

符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

4.2 .Verilog HDL的设计流程4.2.1设计规范的定义明确设计的目的,进行设计的总体规划。

分析设计要求,以及自己要达到的设计目的和目标。

4.2.2 采用Verilog HDL进行设计描述这部分包括设计规划和程序的编写。

设计规划主要包括设计方式的选择及是否进行模块划分。

设计方式一般包括直接设计,自顶向下和自底向下设计。

4.2.3 Verilog HDL程序仿真对于某些人而言,仿真这一步似乎是可有可无的。

但是对于一个可靠的设计而言,任何设计最好都进行仿真,以保证设计的可靠性。

另外,对于作为一个独立的设计项目而言,仿真文件的提供足可以证明你设计的完整性。

4.2.4 综合优化和布局布线综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。

4.2.5 仿真这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求。

5.总体设计方案5.1移位寄存器的工作原理用VHDL语言描述任意分频数的分频器,并实现占空比任意设置.每当系统时钟上升沿到来时,计数器就加计数一位(可任意设置为N位),当计数值到达预定值时就对分频时钟翻转.这样就会得到一个连续的时钟脉冲.当移位信号到来时,移位寄存器就对存储的二进制进行移位操作.移位寄存方式可自行设置(可左移,右移,一位移,多位移位寄存)。

移位寄存器需要将寄存器中的各位数据在移位控制信号的作用下,依次向高位或是低位移动移位。

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

5.2基本设计思路在EDA课程学习过程中,我们学习了移位寄存器的设计,从而实现但方向的数据移动;也学习模式可控制的移位寄存器的设计。

该设计是设计一个双向的32位的移位寄存器。

要求,该寄存器有一个异步清零端,低电平有效。

还有一个load装载数据的信号输入,用于预置数据,还有一个控制左移或是右移的信号输入LEFT_RIGHT。

因此,我们可以通过所学知识,设置CLK为移位时钟信号,LOAD为数据预置使能信号,QB是串行输出信号。

三十二位双向移位寄存器工作原理框图如表一。

表一双向32位移位寄存器功能表6.32双向移位寄存器的设计6.1 双向移位寄存器的设计双向移位寄存器可以在移位寄存器的基础之上添加移位模式控制数来控制。

通过移位模式控制数的工作时序来控制其移位方向。

本设计中预置的移位模式控制数为LEFT_RIGHT,若上升沿到来时,LEFT_RIGHT送入的是低电平,则循环右移;LEFT_RIGHT送入的是高电平,则循环左移。

这样通过控制端LOAD的的控制,以及移位模式控制数LEFT_RIGHT的时序显示,即可实现双向移位寄存器的功能。

如图一所示为双向移位寄存器工作模式简图D1 D2 D3 D4 D5 …D31 D32LEFT_RIGHT=0 右移输入输出LEFT_RIGHT=1 左移输出输入图一双向移位寄存器工作模式简图6.2 32位双向移位寄存器的设计根据设计要求以及功能表可做如下设计:当移位时钟信号CLK的上升沿到来时过程被启动,如果这时预置使能LOAD为高电平,LEFT_RIGHT 为低电平,则输入端口处的32位二进制数被同步置入移位寄存器中,用作循环右移输出的初始值;如果这时预置使能LOAD为高电平,LEFT_RIGHT为高电平,则输入端口处的32位二进制数被同步置入移位寄存器中,用作循环左移的初始值;如果预置使能LOAD为低电平,则执行以下语句: REG[30:0]<=REG[31:1];此语句表明:一个时钟周期后将上一时钟周期移位寄存器中的高32位二进制数,即以当前值REG[7:1]更新此寄存器的低七位REG[30:0]。

他们并不会自我覆盖,且其串行移空的最高位始终由最初预置数的最高位填补。

将上一时钟周期移位寄存器中的最低位,即当前值REG[0]向QB输出。

随着CLK脉冲的连续到来,就完成了将预置输入的数据逐位向左或向右串行输出的功能,即将寄存器中的最低位首先输出。

所编程序见附录一。

由功能表可知设计需满足:当使能端LOAD为高电平时,寄存器内数不移动,即输出Q为输入D 的预置数,也就是说使能端LOAD为低电平有效。

当CLK有上升沿来到时,使能信号LOAD为低电平,LEFT_RIGHT为低电平时,系统循环右移;当LEFT_RIGHT为高电平时,系统循环左移。

图二所示为其综合RTL图打包后的原理图wanglei instCLK LOAD C0LEFT_RIGHT D[31..0]QB[31..0]CN图二 32位双向移位寄存器由原理图可得,双向32位移位寄存器输入、输出引脚分别为 CLK:移位时钟输入信号 LOAD:预置是能信号 C0:进位输入D:待加载移位数据输入LEFT_RIGHT:移位模式控制字 D[31..0]:数据输入总线端口 QB[31..0]:数据输出总线端口 CN:进位输出由程序生成的内部RTL 电路图如下图3所示:图3 三十二位双向移位寄存器RTL电路图7.系统仿真在QuartuaII中建立shift工程,添加Verilog文件,编写源代码后,进行全编译。

编译成功后,即可对定义的模块进行功能仿真。

仿真步骤查看相关QuartusII书籍。

本设计中,将所有定义的引脚添加入仿真环境中,对输入数据进行强制设定,运行后观察输出波形及其时序图见图4。

图4 仿真波形时序图对其仿真图进行仿真分析:这里我们通过考察其带进位循环左移操作的工作模式来了解此次双向移位寄存器的设计。

Case语句中的两个语句,尽管属于并行执行的顺序语句,但它们的赋值不会发生原数据的覆盖情况。

例如,当顺序执行REG[0]<=C0和REG[31:0]<=REG[30:0]后,并不会发生REG[1]=C0的情况,因为他们是同时被更新的。

对于其仿真波形,在CLK的第一个上升沿处,LEFT_RIGHT=101,此边沿将D的数据加载于寄存器中;在此后的三个上升沿,LEFT_RIGHT都等于001,即执行带进位循环左移操作。

在第二个上升沿后,将进位输入的C0的1移入寄存器最低位,其余左移一位,最高位被移出,进入CN。

另需注意最后一个上升沿后执行的是自循环右移,即将此前寄存器中的数据右移一位,期间将移出的最低位补入右移结果的最高位。

8.总结与体会经过一学期的学习以及在课下对相关知识的查阅,我终于完成了32位双向移位寄存器的设计和实现及相关论文。

从开始接到课程设计题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在大学期间独立完成的一项比较大的项目。

在这段时间里,我学到了很多知识也有很多感受,从课程设计,EDA,VHDL等相关知识很不了解的状态,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次试验的成功都会让我兴奋好一段时间。

虽然我的论文作品不是很成熟,还有很多不足之处,但我可以自豪的说,这里面的每一段代码,都有我的劳动。

为了编写程序,我把课本读了好多遍,当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。

相关文档
最新文档