移位寄存器(左移、右移、双向)的Verilog实现
移位寄存器的功能和电路形式较多,按移位方向分有左移、右移、和双向移位寄存器;按接收数据方式分为串行输入和并行输入;按输出方向分为串行输出和并行输出。
如果将若干个触发器级联成如下图所示电路,则构成基本的移位寄存器。图中是一个4位移位寄存器,串行二进制数据从输入端Dsi输入,左边触发器的输出作为右邻触发器的数据输入。若将串行数码D3D2D1D0从高位(D3)至低位(D0)按时钟脉冲间隔依次送到Dsi端,经过第一个时钟脉冲后,Q0=D3。由于跟随D3后面的是D2,因此经过第二个时钟脉冲后,触发器FF0的状态移入触发器FF1而FF0转变为新的状态,即Q1=D3,Q0=D2。以此类推,输入数码依次由左侧触发器移到右侧触发器。经过4个时钟脉冲后,4个触发器的输出状态Q3Q2Q1Q0与输入数码D3D2D1D0相对应。这样,就将串行输人数据转换为并行输出数据Dpo。

一般来说,N位移位寄存器要由N个触发器构成,需要N·Tcp来完成串行到并行的数据转换,同样也需要N・Tcp来实现并行到串行的数据输出。这里,Tcp为时钟周期。从上述操作可以看出,移位寄存器只能用脉冲边沿敏感的触发器,而不能用电平敏感的锁存器来构成,因为在时钟脉冲高电平期间,锁存器输出跟随输入变化的特性将使移位操作失去控制。显然,移位寄存器属于同步时序电路。
1.基本移位
首先说明“由于国家标准规定,逻辑图中最低有效位(LSB)到最高有效位(MSB)的电路排列顺序应从上到下,从左到右。因此定义移位寄存器中的数据从低位触发器移向高位为右移,反之则为左移。这一点与通常计算机程序中规定相反,后者从自然二进制数的排列考虑,将数据移向高位定义为左移,反之为右移。”此内容摘自《电子技术基础-数字部分》康华光主编教材。

module shifter( din, clk, rst, dout,done);
input din, clk, rst;
output [7:0] dout;
output reg done; //完成移位
reg [7:0] dout;
reg [3:0] cnt;
always @(posedge clk)
begin
if(rst) //清零
dout <= 8’b0;
else if(cnt<=4’d7)
begin
dout<=dout>>1; //左移
dout[7]<=din;
/*dout <= dout<<1;
dout[0] <= din; */ //右移
end
else
dout<=dout;
end

always@(posedge clk)
beginif(rst)begincnt<=4'd0;done<=1'b0;endelse if(cnt==4'd7)begincnt<=4'd0;done<=1'b1;            endelse begincnt<=cnt+1'b1;done<=1'b0;end
end

endmodule

仿真结果图

2.双向移位
双向移位实现数据保持、右移、左移、并行置数、并行输出。
module two_way(
input clk,
input rst,
input s0,s1, //选择输入端口
input din1,din2, //串行数据输入
input [3:0] d, //并行数据输入
output reg [3:0] q //输出端口
);

always@(posedge clk or negedge rst)
beginif(!rst)q<=4'd0;else begincase({s1,s0})2'b00:  q<=q;  //输出保持不变2'b01:  q<={q[2:0],din1};  //右移2'b10:  q<={din2,q[3:1]};  //左移2'b11:  q<=d;         //并行置数endcaseend
end

endmodule

仿真结果图
总结一般掌握左移、右移方法即可,并根据实际需求加以应用,串并转换也适用。

移位寄存器(左移、右移、双向)的Verilog实现相关推荐

  1. 8位并行左移串行转换电路_双向移位寄存器 8位双向移位寄存器电路设计

    目录 摘要 .............................................................................................. ...

  2. c语言左移15位,关于c语言中左移右移运算符的问题

    参照<c与指针>,在c语言中左移时,不论算术左移还是逻辑左移效果都是相同的.而且对于有符号和无符号类型执行相同的操作,即按照二进制位向左左移N位.例如: 1 clude 2 intmain ...

  3. python左移右移位运算_Python这些位运算的妙用,绝对让你大开眼界

    位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手 ...

  4. java中的 31 和左移右移的关系简述

    java中的 31 和左移右移的关系简述 任何数乘以31 等于 这个数左移 五位 减去这个数 ​ n * 31 == (n << 5) - n " << " ...

  5. 一维数组反转c语言_C语言实现数组的循环左移,右移,翻转的示例

    数组结合指针可以实现很多有趣的功能,比如下面这个程序: 假设数组为 : 12345 如果左移一次即为:23451 ,依次类推 如果右移一次即为:51234 ,依次类推 翻转则为:54321 我们来实现 ...

  6. 左移右移位运算_计算机硬件技术基础M2——计算机运算基础(二)

    在上一篇中,我们学习到了计算机底层的一些机器码,以及一些行业标准,这一章,我们将接着学习机器码的一些比较与相关计算. 一.浮点数表示和定点数的比较 ① 当字长相同时,浮点数表示的范围要大得多. ②浮点 ...

  7. 位运算之左移右移运算之详解

    先看如下一段左移右移的代码及其结果: 代码 #include "stdio.h" char leftshift(char i, int n) { if(n < 0) retu ...

  8. EASYUI- EASYUI左移右移 GRID中值

    EASYUI左移右移 GRID中值 $("#addAll").click(function(){var ids = [];var names = [];var srcrows = ...

  9. 图片放大缩小旋转左移右移镜像倒影android

    图片放大缩小旋转左移右移镜像倒影 demo: TestImage 1. 将 meinv.jpg 图片拷贝到以下目录TestImage\app\src\main\res\mipmap-hdpi 1.An ...

  10. jQuery实现左移右移

    1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title>完成左移右移</tit ...

最新文章

  1. 网关限流了,躲在后面的服务就能高枕无忧啦?
  2. PowerShell通过安全组创建计算机账号
  3. Shinning - 我所听过最棒的演讲
  4. 密码学研究-密钥长度限制
  5. poj3164(最小树形图朱刘算法模板)
  6. C语言实现魔方阵代码及解析
  7. 无废话WPF系列19:MVVM简单介绍
  8. freecodecamp_freeCodeCamp的学术诚信政策
  9. C语言模拟11答案,C语言模拟试题11答案.doc
  10. python进阶教程之异常处理
  11. 使用 anacoda 安装scrapy
  12. 再生核希尔伯特空间:Hilbert Space与RKHS基础
  13. 怎样在WORD里输入国际音标
  14. UltraVNC远程控制其他电脑
  15. 零基础制作平衡小车【连载】12---平衡小车控制原理
  16. android监控摄像头,监控其实很简单 给摄像头装个安卓系统
  17. DCC2022:高阶帧内预测
  18. 4月17日黑客攻击事件简讯
  19. JavaScript旋转数组
  20. 高数 | 多元函数求极限 使用极坐标代换的条件与细节

热门文章

  1. android 5.1 色盲,考驾照必看5色盲试题,要是第一张都能看错,这辈子和驾照无缘...
  2. java读取gxk文件_[Java]读取文件方法大全
  3. HTML5 的 video 标签,实现简易播放器
  4. Element UI 分页问题 this.pageSizes.map is not a function
  5. 记录:配置tf-openpose环境爬过的那些坑
  6. python小游戏 拼图小游戏设计与实现
  7. ROS学习笔记54《Arduino IDE 安装设置》
  8. 分享txt转换pdf格式具体转换方法
  9. 《智慧城市智慧多功能杆服务功能与运行管理规范》
  10. 【社招】快手_数据仓库_面试题整理