基于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.串并转换模块:将对应的串行数据转换为并行数据。

用Verilog+HDL语言设计分频器和32位计数器

用Verilog+HDL语言设计分频器和32位计数器

i<i+1l
end
cs)∥有片选信号
end endrnodule
begin if(addr)
aceuh<2data}
该模块已通过软件仿真,符合设计要求。并已将程序下载到FPGA芯片,在电路板上与 系统进行联调,已证明设计达到预期功能,正式投入使用。
参 考 文 献
1夏宇闻.复杂数字电路与系统的VerilogHDL设计技术.北京t北京航空航天大学出版杜,1999.1—86 2阎石鼓字电子技术基础.北京:高等教育出版社.1 997.224--295 3束万焘·罗 车,吴顺军.CPI,D技术及其盥用西安:西安电子科技大学出版社,1999.30】oo
end end
output
elkl.c}//输出时钟和计数进位信号

wirte[15
reg
பைடு நூலகம்
O]data—reg·dataI
c,clkl{
if(i>=119) 计数值的高16位数和低
begin
∥对输人时钟进行J20分频
reg[1 5:O]aceub.aecul;

6位数
j<=0; clkl<=~clkl;
第23卷第6期 2002年1 1月
微计算机应用
MICROCOMPUTER APPLICATIONS
Vol
23.N。.6
Nov-,2002
用Ver|log
HDL语言设计分频器和32位计数器
谈艳云 罗志强
100083)
仍局
(北京航空航天大学电子工程东北京
擅要t介绍一种软件实现分频器和32位计数器的设计思路.即采用大规模可编程逻辑芯片.
+PLUS
II仿真正是一种实用的EDA软件,它具有原理图输入和文本输入(采用硬件描述语

32位移双向位寄存器的设计(DOC)

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位并行输入和输出。

Verilog实验三原理3:寄存器组原理 (1)

Verilog实验三原理3:寄存器组原理 (1)

寄存器组工作原理一、电路基本原理寄存器的外部电路接口如下图所示,各接口功能如下:•Clk:时钟信号;•Rst:复位信号,可将所有的寄存器值复位为0.与寄存器写操作相关的信号有下面3个:•L_S:控制信号,仅当L_S值为1时,才能对寄存器进行写操作。

•Wt_addr(4:0):写寄存器地址。

由于Wt_addr有5位,因此共有寄存器32个。

若Wt_addr(4:0)=0011,则要写入的寄存器为:register[3].•Wt_data(31:0):写入到寄存器中的数据。

由于Wt_data有32位,因此寄存器数据为32位。

举例:若L_S =1,Wt_addr(4:0)=0011,Wt_data(31:0)=0x12345678,则表示要将32位数据0x12345678写入到寄存器register[3]中。

与寄存器读操作相关的信号有下面4个:•R_addr_A(4:0):读寄存器地址信号,指定要读取的寄存器。

•rdata_A(31:0):读数据输出端口,将R_addr_A(4:0)指定的寄存器中数值读出后送至rdata_A(31:0)。

•R_addr_B(4:0):读寄存器地址信号,指定要读取的寄存器。

•rdata_B(31:0):读数据输出端口,将R_addr_B(4:0)指定的寄存器中数值读出后送至rdata_B(31:0)。

举例:若R_addr_A(4:0)=0011,则表示读出寄存器register[3]中的32位数据,并将读出的数据输出至rdata_A(31:0)中。

若register[3]中存放的数据是0x12345678,则端口rdata_A(31:0)中的值将为0x12345678。

二、寄存器组Verilog编程实现(蓝色部分为verilog代码,黑色部分为注释)module Regs( input clk,input rst, //置位信号input [4:0] R_addr_A, //寄存器A读地址选择input [4:0] R_addr_B, //寄存器B读地址选择input [4:0] Wt_addr, //写地址选择input [31:0]Wt_data, //写入数据input L_S, //载入信号output [31:0] rdata_A, //寄存器A读出数据output [31:0] rdata_B //寄存器B读出数据);// 下面为verilog变量定义操作reg [31:0] register [1:31]; // 定义寄存器数组:数组类型为reg[31:0],也即寄存器为32位的寄存器。

移位寄存器,verilog[整理版]

移位寄存器,verilog[整理版]

对读者的假设
已经掌握:
∙可编程逻辑基础
∙Verilog HDL基础
∙使用Verilog设计的Quartus II入门指南
∙使用Verilog设计的ModelSIm入门指南
内容
free-running移位寄存器
自由运行移位寄存器,即在每一个时钟周期内,寄存器的内容会被左移或右移一位。

该寄存器没有其他的控制信号。

代码1 free-running移位寄存器
次态(next-state)逻辑是一位移位器,作用是将r_reg右移一个位置,然后在最高位(MSB)插入串型输入s_in。

由于1位移位器仅需要重新连接输入和输出信号,因此不需要任何实际的逻辑电路。

Universa shift register
通用移位寄存器可以载入并行数据,然后左移或者右移,抑或保持原有状态。

它可实现并串操作(先载入并行输入,然后移位输出),或者串并转换(先移位输入,然后一并输出)。

代码2 万用移位寄存器
次态逻辑使用了一个4选1的多路选择器来选择寄存器所需的次态值。

注意:d的最低位和最高位(d[0]和d[N-1)被用作左移操作和右移操作的串型输入。

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

基于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语言结合计算机组成原理中的相关知识理论联系实际,掌握所学的课程知识。

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

双向移位寄存器VHDL设计

双向移位寄存器VHDL设计

双向移位寄存器1.引言移位寄存器就是指具有移位功能的触发器组,它是在普通寄存器的基础上添加了移位功能的一种特殊的寄存器。

通常,移位功能就是指在寄存器里面存储的二进制数据能够在时钟信号的控制下依次左移或者右移。

移位寄存器是一种非常有用的时序逻辑电路,它常用于数据的串/并转换、并/串转换、数值运算、数据处理以及乘法移位操作等。

移位寄存器按照移位方向来进行分类,可以分类左移移位寄存器、右移移位寄存器和双向移位寄存器等。

本文将介绍双向移位寄存器。

2.VHDL 程序双向移位寄存器的VHDL程序如下:LIBRARY ieee; --打开需要用到的库USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;ENTITY rom_shift IS --实体说明PORT(clk : IN STD_LOGIC;d : IN STD_LOGIC;dir : IN STD_LOGIC;q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END rom_shift;ARCHITECTURE behave OF rom_shift IS --结构体定义SIGNAL qn : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS (clk)BEGINIF (clk'EVENT AND clk='1') THENIF dir='0' THENqn(0)<=d; --将输入数据d赋给最低位FOR i IN 1 TO 3 LOOP --数据由低位向高位移qn(i)<=qn(i-1);END LOOP;ELSEqn(3)<=d; --若dir=‘1’将输入数据d赋给最高位FOR i IN 2 DOWNTO 0 LOOP --数据由高位向低位移qn(i)<=qn(i+1);END LOOP;END IF;END IF;END PROCESS;q<=qn;END behave;3.仿真结果如下:实现功能:由程序可以看出,输入信号有clk,dir,d,其中clk为时钟信号,dir为移位方向控制信号。

计算机设计与实践——32位移位寄存器

计算机设计与实践——32位移位寄存器

8:reg_out<=reg_in<<8; 9:reg_out<=reg_in<<9; 10:reg_out<=reg_in<<10; 11:reg_out<=reg_in<<11; 12:reg_out<=reg_in<<12; 13:reg_out<=reg_in<<13; 14:reg_out<=reg_in<<14; 15:reg_out<=reg_in<<15; 16:reg_out<=reg_in<<16; 17:reg_out<=reg_in<<17; 18:reg_out<=reg_in<<18; 19:reg_out<=reg_in<<19; 20:reg_out<=reg_in<<20; 21:reg_out<=reg_in<<21; 22:reg_out<=reg_in<<22; 23:reg_out<=reg_in<<23; 24:reg_out<=reg_in<<24; 25:reg_out<=reg_in<<25; 26:reg_out<=reg_in<<26; 27:reg_out<=reg_in<<27;
32位移位寄存器veriloghdl语言该设计的32位移位寄存器可以实现左移右移逻辑右移代码如下
32位移位寄存器
——Verilog HDL语言
该设计的32位移位寄存器,可以 实现左移、右移、逻辑右移
代码如下:

32位移双向位寄存器的设计

32位移双向位寄存器的设计

河南科技学院新科学院EDA课程设计报告题目:32位移位寄存器设计专业班级:电气工程及其自动化106姓名:程琦指导教师:付广春完成日期:2013年01月01 日32位双向移位寄存器设计设计要求:完成以下功能特性的双向 32 位移位寄存器。

同时要求有使能端,用 1602 显示。

摘要:移位寄存器的功能即是对每一个上升沿到来时,并且寄存器使能是0时,对输入按照移位模式控制信号的要求实现输出的左移和右移。

32位移位寄存器可有4个八位的移位寄存器的逻辑关系来实现关键词:寄存器,上升沿,使能端1 引言移位寄存器使我们学习生活包括开发研究道路上不可或缺的一部分。

随着社会的发展,社会主义市场经济不断繁荣,各种装饰用的流水灯、广告彩灯、宣传画越来越多的出现在人民的生活当中,在大型晚会的现场,更是用的淋漓尽致,这些装饰控制设备多数要用移位寄存器来实现,因此,移位寄存器的研究和设计就变的至关重要。

2 总体设计方案因移位寄存器由多种不同的描述和设计方案,我们可以依据要求设列出最好最简单的设计方案。

首先,要完成双向的32位移位寄存器,就首先必须要实现8位移位寄存器作为基础。

其次,在4个8个移位寄存器的基础上达到32位移位寄存器的功能。

第一要有模式控制输入,来控制移位寄存器的移位方向;第二,有使能端,即在什么情况下移位寄存器才可以正常工作,才可以实现模位控制,是左移还是右移,这就要求使能是模式控制输入的前提;然后是脉冲控制信号,由题意可知,移位寄存器是在上升沿触发的,即在每一次上升沿到来时,移位寄存器使输入按照模位控制的要求向左或向右移一位;最后输入和输出,都要用到32并行输入和输出。

2.1 设计思路① 8位移位寄存器由设计要求可知,要实现8位的双向移位寄存器,并且还有使能端。

我们可令CLK为移位时钟信号,D为8位并行预臵数据端口,LOAD为并行数据预臵使能信号,QB为串行输出端口,LEFT_RIGHT 为移位模式控制数。

此移位寄存器的工作方式是:当CLK得上升沿到来时,过程被启动,如果这时预臵使能端LOAD为低电平,且移位模式控制数LEFT_RIGHT为1时,则最高位被移入寄存器中,其他7位依次左移一位同步并行臵入移位寄存器中;如果移位模式控制数LEFT_RIGHT为0时,则最低位被移入寄存器中,其他7位依次左移一位同步并行臵入移位寄存器中。

  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等相关知识很不了解的状态,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次试验的成功都会让我兴奋好一段时间。

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

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

相关文档
最新文档