16位移位寄存器设计与FPGA实现(逻辑左移、逻辑右移、算术右移、循环左移、循环右移)

module shift_reg
(
    input clk,
    input rst_n,
    input Logic_L,//逻辑位移使能信号
    input Arith_L,//算术位移使能信号
    input Circu_L,//循环位移使能信号
    output [15:0]data_0//输出数据
);


reg [15:0]data;//原数据
always@(posedge clk or negedge rst_n) 
begin
if(~rst_n)
  data<=0;
else
    data<=16'b1010101010101010;//data_i;
end


reg Logic_L1,Arith_L1,Circu_L1;//使能信号打三排,消抖和为检测沿做准备
reg Logic_L2,Arith_L2,Circu_L2;
reg Logic_L3,Arith_L3,Circu_L3;


always@(posedge clk or negedge rst_n) 
begin
if(~rst_n)
begin
    Logic_L1<=0;
    Arith_L1<=0;
    Circu_L1<=0;
    
    Logic_L2<=0;
    Arith_L2<=0;
    Circu_L2<=0;
    
    Logic_L3<=0;
    Arith_L3<=0;
    Circu_L3<=0;
end
else
begin
    Logic_L2<=Logic_L;
    Arith_L2

你可能感兴趣的:(16位移位寄存器设计与FPGA实现(逻辑左移、逻辑右移、算术右移、循环左移、循环右移))