通用移位寄存器可以加载并行数据,将其内容向左移位(向高位移)、向右移位(向低位移)或保持原有状态。它可以实现并转串(首先加载并行输入,然后移位)或串转并(首先移位,然后并行输出)。实现这种操作需要两位控制信号ctrl,如下:
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2019/01/03 14:24:23
// Design Name:
// Module Name: univ_shift_reg
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module univ_shift_reg
#(parameter N = 8)
(
input clk,
input reset,
input [1:0] ctrl,
input [N - 1 : 0] d,
output [N - 1 : 0] q
);
reg [N - 1 : 0] r_reg,r_next;
always @(posedge clk, posedge reset)
begin
if(reset)
r_reg <= 0;
else
r_reg <= r_next;
end
always @*
begin
case(ctrl)
2'b00: r_next = r_re