移位寄存器之右移位寄存器(Verilog HDL语言描述)
【摘要】 目录
背景
测试一
Verilog HDL语言描述
测试代码
仿真波形图
测试二
Verilog HDL语言描述
测试代码
仿真图
ISE综合
RTL Schematic
测试三
环形移位寄存器(右移)
Verilog HDL描述
测试代码
仿真波形图
ISE综合
背景
之所以单独把这个简单的东西拿出来,就是因为这个东西我可能要用到,不...
目录
背景
之所以单独把这个简单的东西拿出来,就是因为这个东西我可能要用到,不能眼高手低,以为简单就一眼带过,之后,用的时候就不能快速地拿出来,处于这个简单的目的,这个知识点贴出来遛遛。
之所以强调非环形移位,很简单,我不想让它具有环形移位的功能呗,我不需要,需要的时候直接改一行代码即可。
以一个位宽为10的右移位寄存器为例吧(解读ADC采样芯片(EV10AQ190A)的采样(工作)模式(双通道模式)这篇博文中用到的ADC芯片采样数据就是10位的,这里是有实际背景的!)
测试一
这种移位寄存器,给一个输入数据之后,在一个时钟上升沿到来时,输出等于输入右移1位,高位补零,然后如果没有输入数据的话,输出就不在变化了,直到又给一个输入,然后时钟上升沿到来时,输入信号右移1位作为输出,如此下去。
Verilog HDL语言描述
-
//10 bit right shift register
-
module register(clk, din, dout);
-
-
input clk;
-
input [9:0] din;
-
output [9:0] dout;
-
reg [9:0] dout;
-
-
always@(posedge clk)
-
begin
-
dout <= {1'b0, din[9:1]};
-
end
-
-
-
endmodule
测试代码
-
//testbench file for 10 bit right shift register
-
`timescale 1ns/1ps
-
module register_tb;
-
-
reg clk;
-
reg [9:0] din;
-
wire [9:0] dout;
-
-
//clock generation of period 20 ns
-
always
-
begin
-
#10 clk = ~clk;
-
end
-
-
//initialization
-
initial
-
begin
-
clk = 1'b0;
-
din = 10'b0010110110;
-
#200 din = 10'b1110001010;
-
end
-
-
register u1(.clk(clk),.din(din), .dout(dout));
-
-
-
endmodule
-
仿真波形图
测试二
如果需要右移3位,则
Verilog HDL语言描述
-
//10 bit right shift register
-
module a(clk, din, dout);
-
-
input clk;
-
input [9:0] din;
-
output [9:0] dout;
-
reg [9:0] dout;
-
-
always@(posedge clk)
-
begin
-
dout <= {3'b000, din[9:3]};
-
end
-
-
-
endmodule
测试代码
-
//testbench file for 10 bit right shift register
-
`timescale 1ns/1ps
-
module register_tb;
-
-
reg clk;
-
reg [9:0] din;
-
wire [9:0] dout;
-
-
//clock generation of period 20 ns
-
always
-
begin
-
#10 clk = ~clk;
-
end
-
-
//initialization
-
initial
-
begin
-
clk = 1'b0;
-
din = 10'b0010110110;
-
#200 din = 10'b1110001010;
-
end
-
-
register u1(.clk(clk),.din(din), .dout(dout));
-
-
-
endmodule
仿真图
ISE综合
RTL Schematic
测试三
环形移位寄存器(右移)
Verilog HDL描述
-
//10 bit right shift register
-
module register(clk, din, dout);
-
-
input clk;
-
input [9:0] din;
-
output [9:0] dout;
-
reg [9:0] dout;
-
-
always@(posedge clk)
-
begin
-
dout <= {din[0], din[9:1]};
-
end
-
-
-
endmodule
测试代码
-
//testbench file for 10 bit right shift register
-
`timescale 1ns/1ps
-
module register_tb;
-
-
reg clk;
-
reg [9:0] din;
-
wire [9:0] dout;
-
-
//clock generation of period 20 ns
-
always
-
begin
-
#10 clk = ~clk;
-
end
-
-
//initialization
-
initial
-
begin
-
clk = 1'b0;
-
din = 10'b0010110110;
-
#200 din = 10'b1110001010;
-
end
-
-
register u1(.clk(clk),.din(din), .dout(dout));
-
-
-
endmodule
仿真波形图
ISE综合
RTL Schematic
事实上,我以前做过移位寄存器的总结:移位寄存器专题
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/81410761
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)