移位寄存器之右移位寄存器(Verilog HDL语言描述)

举报
李锐博恩 发表于 2021/07/15 01:38:01 2021/07/15
【摘要】 目录 背景 测试一 Verilog HDL语言描述 测试代码 仿真波形图 测试二 Verilog HDL语言描述 测试代码 仿真图 ISE综合 RTL Schematic 测试三 环形移位寄存器(右移) Verilog HDL描述 测试代码 仿真波形图 ISE综合 背景 之所以单独把这个简单的东西拿出来,就是因为这个东西我可能要用到,不...

目录

背景

测试一

Verilog HDL语言描述

测试代码

仿真波形图

测试二

Verilog HDL语言描述

测试代码

仿真图

ISE综合

RTL Schematic

测试三

环形移位寄存器(右移)

Verilog HDL描述

测试代码

仿真波形图

ISE综合


背景

之所以单独把这个简单的东西拿出来,就是因为这个东西我可能要用到,不能眼高手低,以为简单就一眼带过,之后,用的时候就不能快速地拿出来,处于这个简单的目的,这个知识点贴出来遛遛。

之所以强调非环形移位,很简单,我不想让它具有环形移位的功能呗,我不需要,需要的时候直接改一行代码即可。

以一个位宽为10的右移位寄存器为例吧(解读ADC采样芯片(EV10AQ190A)的采样(工作)模式(双通道模式)这篇博文中用到的ADC芯片采样数据就是10位的,这里是有实际背景的!)

测试一

这种移位寄存器,给一个输入数据之后,在一个时钟上升沿到来时,输出等于输入右移1位,高位补零,然后如果没有输入数据的话,输出就不在变化了,直到又给一个输入,然后时钟上升沿到来时,输入信号右移1位作为输出,如此下去。

Verilog HDL语言描述


  
  1. //10 bit right shift register
  2. module register(clk, din, dout);
  3. input clk;
  4. input [9:0] din;
  5. output [9:0] dout;
  6. reg [9:0] dout;
  7. always@(posedge clk)
  8. begin
  9. dout <= {1'b0, din[9:1]};
  10. end
  11. endmodule

测试代码


  
  1. //testbench file for 10 bit right shift register
  2. `timescale 1ns/1ps
  3. module register_tb;
  4. reg clk;
  5. reg [9:0] din;
  6. wire [9:0] dout;
  7. //clock generation of period 20 ns
  8. always
  9. begin
  10. #10 clk = ~clk;
  11. end
  12. //initialization
  13. initial
  14. begin
  15. clk = 1'b0;
  16. din = 10'b0010110110;
  17. #200 din = 10'b1110001010;
  18. end
  19. register u1(.clk(clk),.din(din), .dout(dout));
  20. endmodule

仿真波形图

测试二

如果需要右移3位,则

Verilog HDL语言描述


  
  1. //10 bit right shift register
  2. module a(clk, din, dout);
  3. input clk;
  4. input [9:0] din;
  5. output [9:0] dout;
  6. reg [9:0] dout;
  7. always@(posedge clk)
  8. begin
  9. dout <= {3'b000, din[9:3]};
  10. end
  11. endmodule

测试代码


  
  1. //testbench file for 10 bit right shift register
  2. `timescale 1ns/1ps
  3. module register_tb;
  4. reg clk;
  5. reg [9:0] din;
  6. wire [9:0] dout;
  7. //clock generation of period 20 ns
  8. always
  9. begin
  10. #10 clk = ~clk;
  11. end
  12. //initialization
  13. initial
  14. begin
  15. clk = 1'b0;
  16. din = 10'b0010110110;
  17. #200 din = 10'b1110001010;
  18. end
  19. register u1(.clk(clk),.din(din), .dout(dout));
  20. endmodule

仿真图

ISE综合

RTL Schematic

测试三

环形移位寄存器(右移)

Verilog HDL描述


  
  1. //10 bit right shift register
  2. module register(clk, din, dout);
  3. input clk;
  4. input [9:0] din;
  5. output [9:0] dout;
  6. reg [9:0] dout;
  7. always@(posedge clk)
  8. begin
  9. dout <= {din[0], din[9:1]};
  10. end
  11. endmodule

测试代码


  
  1. //testbench file for 10 bit right shift register
  2. `timescale 1ns/1ps
  3. module register_tb;
  4. reg clk;
  5. reg [9:0] din;
  6. wire [9:0] dout;
  7. //clock generation of period 20 ns
  8. always
  9. begin
  10. #10 clk = ~clk;
  11. end
  12. //initialization
  13. initial
  14. begin
  15. clk = 1'b0;
  16. din = 10'b0010110110;
  17. #200 din = 10'b1110001010;
  18. end
  19. register u1(.clk(clk),.din(din), .dout(dout));
  20. endmodule

仿真波形图

ISE综合

RTL Schematic

事实上,我以前做过移位寄存器的总结:移位寄存器专题

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/81410761

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。