首页 > 代码库 > 设计四位移位寄存器shifter_4
设计四位移位寄存器shifter_4
四位移位寄存器:由四个D触发器组成,当每来一个时钟上升沿时,四个触发器分别执行一次移位
要求
? 每个周期通过数据输入端din送入一比特数据
?每个周期通过数据输出端dout串行移出一比特数据
? 异步复位后四位寄存器的值为4’b0101, LSb优先移出
感觉移位寄存器也没什么太难的地方,自己唯一的收获是了解了如何既简便有快速的进行移位,这里就提到了verilog中的一个很方便的运算符号——拼接运算{},在以下代码中会用到,下来附上代码一段。
1)、shifter_4.v module shifter_4(din,clk,rst,dout); input din; input clk; input rst; output dout; wire dout; reg [3:0] t; assign dout = t[0]; always @(posedge clk or negedge rst) begin if(!rst) begin t <= 4‘b0101;//赋初值 end else begin t = {din,t[3],t[2],t[1]};//利用拼接符进行移位运算 end end endmodule
测试程序:
2)、shifter_4_tb.v `timescale 1ns/1ps module shifter_4_tb(); reg din; reg clk; reg rst; wire dout; always #10 clk = ~clk; shifter_4 shifter_4_inst( .din(din), .clk(clk), .rst(rst), .dout(dout) ); initial begin clk = 1‘b0; rst = 1‘b1; din = 1‘b1;//第一个移进的数 #10 rst = 1‘b0; #10 rst = 1‘b1; #15 din = 1‘b0;//第二个移进的数 #20 din = 1‘b1;//第三个 #20 din = 1‘b0;//第四个 #20 din = 1‘b1;//第五个 #20 din = 1‘b0; //第六个 end endmodule
写移位寄存器可以奔着流水灯去,下一篇我将会为大家呈上流水灯的程序。我们程序员也会玩出精彩的花样。
设计四位移位寄存器shifter_4
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。