设计四位移位寄存器shifter_4

Posted 飞翔的梦的窝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计四位移位寄存器shifter_4相关的知识,希望对你有一定的参考价值。

四位移位寄存器:由四个D触发器组成,当每来一个时钟上升沿时,四个触发器分别执行一次移位

 

要求
每个周期通过数据输入端din送入一比特数据
每个周期通过数据输出端dout串行移出一比特数据
异步复位后四位寄存器的值为4’b0101LSb优先移出

感觉移位寄存器也没什么太难的地方,自己唯一的收获是了解了如何既简便有快速的进行移位,这里就提到了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的主要内容,如果未能解决你的问题,请参考以下文章

FPGA综合实验 03 - | 8位硬件乘法器设计

ARM NEON:如何对整个 64 位 d 寄存器进行位移?

ARM指令的一般编码格式如下

[保护模式]段描述符属性_P位_G位

汇编 LEA 指令

单片机 怎么用位移的方法实现乘除法