Veirlog学习记录(3),移位寄存器(左循环,右循环)的实现
2019-03-27 18:15
239 查看
移位寄存器的设计:
有三个模式:
- 左循环
- 右循环
- 加载预置的数
具体功能可以根据需要对程序做出一些修改即可
代码如下:
module shift1(clk,D,MD,QB); input clk; //时钟信号 input [7:0] D; //预置数,可以在测试文件中预置,或者在板子上选取 input [1:0] MD; //模式选择数值 output [7:0] QB; //输出的数值 reg [7:0] REG; //定义寄存器类型 always @ ( posedge clk ) begin //对时钟信号上升沿敏感 case (MD) //根据MD的数值,选择模式 2'b01: begin REG[0] <= REG[7] ; REG[7:1] <= REG[6:0]; end //循环左移 2'b10: begin REG[7] <= REG[0] ; REG[6:0] <= REG[7:1]; end //循环右移 2'b00: begin REG <= D; end //加载预置的数值 endcase end assign QB[7:0] = REG[7:0]; //把REG中的数值赋给QB endmodule
测试文件
module shift1_tb(); reg clk; reg [7:0] D; reg [1:0] MD; wire [7:0] QB; //输出 initial begin //初始化 clk = 0; D = 8'b11110000; //初始化待移数值(这样赋值只是为了最后好观察波形) MD = 2'b00; //以置数模式开始 end always #10 clk = ~clk; //时钟信号 always #100 MD = MD+1;//循环改变模式, shift1 test( .clk(clk), .D(D), .MD(MD), .QB(QB) ); endmodule
这里图形没有从一开始截取,而是选择能看到三个模式效果的时间段,MD=0时,一直在加载预置数,输出等于D 11110000.MD=1时,开始循环左移。MD=2时,开始循环右移。
基本的设计就是这样子,可以在它的基础上进行改进,以达到大家需要的功能,比如在shift1中的case加几个模式。D的值也可以随便赋值。
我也写了几篇关于Veirlog的文章,感兴趣的同学可以去看看。该模块链接如下:
https://blog.csdn.net/weixin_43877139/article/category/8778400
相关文章推荐
- Veirlog 学习记录(5),循环移位数码管的设计与实现
- 数据结构学习记录连载10(队列提高要求实现)
- 数据结构学习记录连载10(队列提高要求实现)
- JavaWeb学习记录(六)——用户登录功能之Session与验证码验证功能的实现
- 数据结构学习记录连载4(上一篇中提高要求实现)
- d3 学习记录-----network实现
- JavaWeb学习记录(二十六)——在线人数统计HttpSessionListener监听实现
- 经典算法学习——非循环双向链表实现冒泡排序(带头结点尾结点)
- 计算机网络,协议实现,学习记录
- 数据结构学习之循环队列c++实现
- Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器) 转
- Java 实现快速排序算法-学习记录
- php基于双向循环队列实现历史记录的前进后退等功能
- 我的Go语言学习之旅五:Go循环输出的另类实现
- 在实现安卓和ios的sdk中 c++,java,lua 混编学习记录
- Spring学习总结(13)——Spring+Log4j+ActiveMQ实现远程记录日志
- 循环SQL语句实现,将一个数字字段的商数拆分成多条记录
- Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器)
- 数据结构学习之循环队列的另一种c++实现
- HLSL学习实践记录: RenderMonkey实现(一):显示出模型和贴图