移位寄存器及verilog代码

Posted lizhiqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移位寄存器及verilog代码相关的知识,希望对你有一定的参考价值。

通用移位寄存器

作用:后续补全

//通用移位寄存器
module
Universal_Shift_Reg#(parameter word_size = 8)( output reg[word_size-1:0] Data_out, output MSB_out, LSB_out, input [word_size-1:0] Data_in, input MSB_in, LSB_in, input s0, s1, clk, rst ); assign MSB_out = Data_out[word_size-1]; assign LSB_out = Data_out[0]; always @(posedge clk) begin if(rst==1b1) Data_out <= 0; else case({s1, s0}) 0: Data_out <= Data_out; //maintain 1: Data_out <= {MSB_in, Data_out[word_size-1:1]}; //MSB shift 2: Data_out <= {Data_out[word_size-2:0], LSB_in}; //LSB shift 3: Data_out <= Data_in; //parallel input endcase end endmodule

 

 

移位寄存器

作用

module shift_reg#(parameter word_size = 4)(
    output                      reg_out,
    input                       clk, rst,reg_in
);
    reg     [word_size-1:0]     reg_data;
assign reg_out = reg_data[0]; always @(posedge clk, negedge rst) if(!rst) reg_data <= {word_size{1b0}}; //nonblock assignment else reg_data <= {reg_in, reg_data[word_size-1:1]}; endmodule

 

 

桶形移位寄存器

作用

module barrel_reg #(parameter word_size = 8)(
    output reg      [word_size-1:0]     data_out,
    input           [word_size-1:0]     data_in,
    input                               load, clk, rst
);
always @(posedge clk, posedge rst) begin if(rst) data_out <= {word_size{1b0}}; else if(load) data_out <= {data_in[word_size-2:0], data_in[word_size-1]}; end endmodule

 

 

 

以上是关于移位寄存器及verilog代码的主要内容,如果未能解决你的问题,请参考以下文章

自定义移位寄存器模块

自定义移位寄存器模块

Verilog实验 6 利用移位寄存器实现随机数发生器

verilog问题 为下面的代码 写个测试信号(.vt文件) 用于modelsim仿真 (急用)

移位寄存器的设计(VHDL)及testbench的编写

verilog: 看代码时遇一问题:把两个12位的数扩展成13位相加,为啥在前面补最高位,不应该补0吗?