移位寄存器专题(verilog HDL设计)

移位寄存器专题(verilog HDL设计)目录移位寄存器简介分类4位右移位寄存器工作原理1、16位右移位寄存器2、16位左移寄存器3、串行输入并行输出寄存器4、并行输入串行输出移位寄存器移位寄存器简介移位寄存器内的数据可以在移位脉冲(时钟信号)的作用下依次左移或右移。移位寄存器不仅可以存储数据,还可以用来实现数据的串并转换、分频,构成序列码发生器、序列码检测器,进行数值运算以及数据处理等,它也…

大家好,又见面了,我是你们的朋友全栈君。

目录

移位寄存器简介

分类

4位右移位寄存器工作原理

1、 16位右移位寄存器

2、 16位左移寄存器

 3、 串行输入并行输出寄存器

4、 并行输入串行输出移位寄存器


移位寄存器简介

移位寄存器内的数据可以在移位脉冲(时钟信号)的作用下依次左移或右移。移位寄存器不仅可以存储数据,还可以用来实现数据的串并转换、分频,构成序列码发生器、序列码检测器,进行数值运算以及数据处理等,它也是数字系统中应用非常广泛的时序逻辑部件之一。

分类

移位寄存器按数据移位方向可以分为左移寄存器、右移寄存器、也可以根据数据输入、输出方式分为并行输入/串行输出、串行输入/并行输出、串行输入/串行输出、并行输入/并行输出。

4位右移位寄存器工作原理

下图是一个4位右移位寄存器的逻辑电路图。其工作原理为:串行数据从触发器F_{A}D_{I}端输入,触发器FA的状态方程为:Q^{n+1}_{A}=Q^{n}_{I}。其余触发器的状态方程分别为Q^{n+1}_{B}=Q^{n}_{A}Q^{n+1}_{C}=Q^{n}_{B}Q^{n+1}_{D}=Q^{n}_{C}。可见,右移位寄存器的特点是右边寄存器的次态等于左边触发器的现态。串行输出数据从触发器FD的QD端输出,并行数据从个触发器的QA~QD端输出,两种输出方式都属于同向输出。各触发器都采用同一时钟信号,所以它们工作在同步状态。如果将FD的输出端QD接到FA的输入端DI,则可以构成循环移位的右移位寄存器。

 移位寄存器专题(verilog HDL设计)

                                     4位右移位寄存器逻辑电路

 

1、 16位右移位寄存器

下面描述的是一个位宽为16位的右移位寄存器,实际具有环形移位的功能,是在右移位寄存器的基础上将最低位的输出端接到最高位的输入端构成的。其功能为当时钟上升沿到达时,输入信号的最低位移位到最高位,其余各位依次向右移动一位。

 

其verilog HDL设计代码如下:

 

1. module register_right(clk, din, dout);  

2.     input clk;  

3.     input [15:0] din;  

4.     output [15:0] dout;  

5.     reg [15:0] dout;  

6.   

7.     always @(posedge clk)  

8.         begin  

9.             dout <= {din[0], din[15:1]};  

10.         end  

11. endmodule  

其测试文件为:

1. `timescale 1ns/1ps  

2. module register_right_tb;  

3.     reg clk;  

4.     reg [15:0] din;  

5.     wire [15:0] dout;  

6.     always  

7.         begin  

8.         #10 clk = ~clk;  

9.         end  

10.     initial  

11.         begin  

12.             clk = 1'b0;  

13.             din = 16'b0000_0000_0000_0000;  

14.             #10 din = 16'b0000_0000_0000_1011;  

15.             #20 din = 16'b0000_0000_0111_0000;  

16.             #20 din = 16'b0000_0000_0000_0011;  

17.             #100;  

18.         end  

19.     register_right U1(.clk(clk), .din(din), .dout(dout));  

20.   

21. endmodule  

在Modelsim中仿真得到的波形图如下:

  移位寄存器专题(verilog HDL设计)

2、 16位左移寄存器

同右移位寄存器原理一致,下面直接给出verilog HDL 设计代码:

1. module register_left(clk, din, dout);  

2.     input clk;  

3.     input [15:0] din;  

4.     output [15:0] dout;  

5.     reg [15:0] dout;  

6.       

7.     always @(posedge clk)  

8.         begin  

9.             dout <= {din[14:0], din[15]};  

10.         end  

11. endmodule  

测试文件为:

1. `timescale 1ns/1ps  

2. module register_left_tb;  

3.     reg clk;  

4.     reg [15:0] din;  

5.     wire [15:0] dout;  

6.       

7.     always  

8.         #10 clk = ~clk;  

9.           

10.     initial  

11.         begin  

12.             clk = 1'b0;  

13.             din = 16'b0000_0000_0000_0000;  

14.             #10 din = 16'b0000_0000_0000_0011;  

15.             #20 din = 16'b0000_0000_0011_0000;  

16.             #100;  

17.         end  

18.           

19.     register_left U1(.clk(clk), .din(din), .dout(dout));  

20. endmodule  

在Modelsim中仿真所得波形图如下:

 移位寄存器专题(verilog HDL设计)

 3、 串行输入并行输出寄存器

下面描述一个位宽为8的串行输入并行输出的寄存器,其实现的功能为:1位数据的串行输入,8位数据的并行输出。当时钟上升沿到达时,1位输入数据din进入qtemp的最低位,qtemp的其余各位依次向左移动1位,在assign 赋值语句中,将qtemp连续赋值给dout,实现8位的数据并行输出。

 其verilog HDL设计代码为:

1. module left_shifter_reg(clk, din, dout);  

2.     input clk;  

3.     input din;  

4.     output [7:0] dout;  

5.     wire [7:0] dout;  

6.     reg [7:0] qtemp;  

7.     always @ (posedge clk)  

8.         begin  

9.             qtemp <= {qtemp[6:0], din}; //每次输入一位  

10.         end  

11.     assign dout = qtemp; //并行输出  

12.   

13. endmodule  

测试文件为:

1. module left_shifter_reg_tb;  

2.     reg din;  

3.     reg clk;  

4.     wire [7:0] dout;  

5.       

6.     always   

7.         #10 clk = ~clk;  

8.       

9.     initial  

10.         begin  

11.             clk = 1'b0;  

12.             #100 din = 1'b1;  

13.             #100 din = 1'b1;  

14.             #100 din = 1'b0;  

15.         end  

16.           

17.     left_shifter_reg U1(.din(din), .clk(clk), .dout(dout));  

18. endmodule  

 在Modelsim中仿真所得波形图:

  移位寄存器专题(verilog HDL设计)

移位寄存器专题(verilog HDL设计)

4、 并行输入串行输出移位寄存器

 

下面描述一个位宽为8的并行输入串行输出的寄存器,其实现的功能为:当使能端 en = 1时,将输入数据din存入一个8位的中间变量,然后在每个时钟上升沿到来时,将qtemp的最低端输出,然后再将qtemp右移一位,从而实现将din输入数据从最低位到最高位依次串行输出。

 

其verilog HDL设计代码为:

1. module right_shifter_reg(clk, en, din, dout);  

2.     input [7:0] din;  

3.     input en,clk;  

4.     output dout;  

5.     reg dout;  

6.     reg [7:0] qtemp;  

7.     always @(posedge clk)  

8.         begin  

9.             if(en == 1)  

10.                 qtemp <= din;  

11.             else  

12.                 begin  

13.                     dout <= qtemp[0];  

14.                     qtemp <= {qtemp[0], qtemp[7:1]};  

15.                 end  

16.         end  

17.   

18. endmodule 

测试文件为:

1. `timescale 1ns/1ps  

2. module right_shifter_reg_tb;  

3.     reg [7:0] din;  

4.     reg clk;  

5.     reg en;  

6.     wire dout;  

7.       

8.     always  

9.         #10 clk = ~clk;  

10.       

11.     initial  

12.         begin  

13.             clk = 0;  

14.             en = 1'b0;  

15.             #10 en = 1'b1;  

16.             din = 8'b1110_0010;  

17.             #20 en = 1'b0;  

18.             #100;  

19.         end  

20.     right_shifter_reg U1(.clk(clk), .en(en), .din(din), .dout(dout));  

21.   

22. endmodule  

在Modelsim中仿真所得波形图如下:

 移位寄存器专题(verilog HDL设计)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160221.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android之ViewStub的简单使用

    Android之ViewStub的简单使用1.viewstub就是动态加载试图;也就是在我们的app启动绘制页面的时候,他不会绘制到view树中;当在代码中执行inflate操作后,她才会被添加到试图中。其实ViewStub就是一个宽高都为0的一个View,它默认是不可见的,只有通过调用setVisibility函数或者Inflate函数才会将其要装载的目标布局给加载出来,从而达到延迟加载的效果,这个要被加载的布局通过android:l…

  • android imageButton 透明图片

    android imageButton 透明图片

  • 团队分工

    团队分工

    2021年11月18日
  • Ubuntu安装yum失败

    Ubuntu安装yum失败先看一下虚拟机可以上网;那么联网没有问题;yum-ylistjava*;查看jdk版本;提示yum没有安装;那么先要安装yum;输入rpm-qayum,查看yum的安装情况,rpm也没有安装;输入apt-getinstallyum安装yum,提示权限不足,areyouroot?当前是root用户;在命令前加sudo就对了;sudoapt-getinstallyum;然后提示不能定位yum包;需要先执行apt-getupdate;前面还

  • c语言韦达定理求方程解,高一上韦达定理,高次,多元方程解法.doc

    c语言韦达定理求方程解,高一上韦达定理,高次,多元方程解法.doc实用文档PAGE文案大全一元二次方程根与系数关系(韦达定理),多元方程解法,高次方程解法一元二次方程根与系数的关系现行初中数学教材主要要求学生掌握一元二次方程的概念、解法及应用,而一元二次方程的根的判断式及根与系数的关系,在高中教材中的二次函数、不等式及解析几何等章节有着许多应用.本节将对一元二次方程根的判别式、根与系数的关系进行阐述.一)、一元二次方程的根的判断式一元二次方程,用配方法将其变形为…

    2022年10月26日
  • Teahour 以太坊专访-文字版

    Teahour 以太坊专访-文字版原文地址:http://ethfans.org/shaoping/articles/talk-with-jan-about-ehtereum本文是播客Teahour以太坊专访文字版,收听地址 http://teahour.fm/2016/01/19/talk-with-jan-about-ehtereum.html ,也可以在喜马拉雅、iTunes搜索Teahour收听。(前边的开

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号