移位寄存器在Verilog HDL中不工作

移位寄存器在Verilog HDL中不工作,verilog,hdl,shift-register,Verilog,Hdl,Shift Register,我试图在Verilog HDL中设计一个64位移位寄存器,但是当我用测试台测试代码时,所有的位都是零。我不知道我错在哪里。以下是我的代码和测试台结果: module ShiftRegister (shift_out, clk, shift_in, rst); //module ports parameter n = 64; //Parameter n declared to store 64 input rst; input [n-1:0] shift_in; //64-bit input

我试图在Verilog HDL中设计一个64位移位寄存器,但是当我用测试台测试代码时,所有的位都是零。我不知道我错在哪里。以下是我的代码和测试台结果:

module ShiftRegister (shift_out, clk, shift_in, rst); //module ports
 parameter n = 64; //Parameter n declared to store 64
 input rst;
 input [n-1:0] shift_in; //64-bit input shift_in
 input clk; //Input clock
 output [n-1:0] shift_out; //64-bit output shift_out
 reg [n-1:0] ff; //64-bit flipflop
  assign shift_out = ff [n-1:0]; //give the output of the 64th bit
  //The operation of verilog: 
   always @ (posedge clk or posedge rst) //Always at the rising edge of the clock
   begin
     if (rst) begin
     ff <= 0;
   end else begin
     ff <= ff << 1;  //Shift bits to the left by 1
     ff[0] <= shift_in; //Take the input bits and give it to the first flipflop
   end
   end
 endmodule


 module ShiftRegister_tb; //Module shiftRegister_tb
  parameter n = 64; //Parameter n declared to store 64
  reg [n-1:0] shift_in; //64-bit register input shift_in
  reg clk, rst; //register clock
  wire [n-1:0] shift_out; //64-bit wire output shift_out
  ShiftRegister DUT(shift_out, clk, shift_in,rst); //Calling the module
   initial
   begin
     clk = 0; //clock = 0 initally
     rst = 1;
     shift_in = 64'd34645767785344; //Random decimal number to test the code 
     #100;
     rst = 0;
     #50_000 $finish;
   end   
  always #50 clk =~clk; //invert the clock input after 50ps
 endmodule //ShiftRegister testbench 
模块移位寄存器(移出、clk、移入、rst)//模块端口
参数n=64//参数n声明为存储64
输入rst;
输入[n-1:0]档位输入//64位输入移位输入
输入时钟//输入时钟
输出[n-1:0]移出//64位输出移位输出
注册号[n-1:0]ff//64位触发器
分配shift_out=ff[n-1:0]//给出第64位的输出
//verilog的操作:
始终@(posedge clk或posedge rst)//始终位于时钟的上升沿
开始
如果(rst)开始

ff这里
ff[0]谢谢您的回复。所以我也可以一次发送一个这样的输入位?我试过这样做,但没有达到预期效果。有没有办法只插入64位?我想输入随机二进制,比如10101011110111等等。然后,您需要定义一种“初始化”寄存器的方法。例如,定义一个名为
load
的输入端口。然后,您可以通过使load为1并提供64位输入来初始化寄存器。当
load
为0时,您的电路应移位
ff
。当我发送1位输入“1”时,它会移位。但是在那之后我不能再发送一个位了,就像它没有输入,
shift\u in=1
10
shift\u in=0
10
shift\u in=1
,它只接受第一个“1”,而不接受其他位