多通道 移位寄存器 verilog

// Quartus II Verilog Template

// Basic 64-stage shift register with multiple taps



module basic_shift_register_with_multiple_taps

#(parameter WIDTH=8, parameter LENGTH=64)

(

	input clk, enable,

	input [WIDTH-1:0] sr_in,

	output [WIDTH-1:0] sr_tap_one, sr_tap_two, sr_tap_three, sr_out

);



	// Declare the shift register

	reg [WIDTH-1:0] sr [LENGTH-1:0];



	// Declare an iterator

	integer n;



	always @ (posedge clk)

	begin

		if (enable == 1'b1)

		begin

			// Shift everything over, load the incoming data

			for (n = LENGTH-1; n>0; n = n-1)

			begin

				sr[n] <= sr[n-1];

			end



			// Shift one position in

			sr[0] <= sr_in;

		end

	end



	assign sr_tap_one = sr[LENGTH/4-1];

	assign sr_tap_two = sr[LENGTH/2-1];

	assign sr_tap_three = sr[3*LENGTH/4-1];



	// Catch the outgoing data

	assign sr_out = sr[LENGTH-1];



endmodule

 

你可能感兴趣的:(Verilog)