移位寄存器在 Verilog HDL 中不起作用
Shift Register not working in Verilog HDL
我正在尝试在 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
此处ff[0] <= shift_in;
,您正在尝试将 64 位变量分配给 1 位变量。由于您在测试台中对 shift_in
使用偶数 (64'd34645767785344
),因此其 LSB 为 0
。因此,你一直在 ff
.
中插入 0
让你的 shift_in
输入 1 位并改变你的测试台,这样你将一次给出 1 位作为输入。
我正在尝试在 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
此处ff[0] <= shift_in;
,您正在尝试将 64 位变量分配给 1 位变量。由于您在测试台中对 shift_in
使用偶数 (64'd34645767785344
),因此其 LSB 为 0
。因此,你一直在 ff
.
让你的 shift_in
输入 1 位并改变你的测试台,这样你将一次给出 1 位作为输入。