移位寄存器及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==1‘b1)   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{1‘b0}};                  //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{1‘b0}};
            else if(load)   data_out <= {data_in[word_size-2:0], data_in[word_size-1]};
        end
endmodule

原文地址:https://www.cnblogs.com/lizhiqing/p/12001748.html

时间: 2024-10-10 04:12:15

移位寄存器及verilog代码的相关文章

Verilog代码自动缩进和对齐Perl脚本

实验室做FPGA开发时经常用到Verilog,代码规范成为一个问题,于是乎写了一个Perl脚本对代码进行规范化,主要是进行自动缩进和对齐. 代码原理很简单,主要是使用了正则表达式进行匹配和替换. 代码如下,初学Perl,请读者赐教: ##################################################### # 代码缩进对齐脚本 # 功能:对Verilog代码进行自动缩进和对齐处理, # 该版本目前还没有对case语句进行处理 # 更改:增加了对assign的缩进

简易SDRAM控制器的verilog代码实现

SDRAM是每隔15us进行刷新一次,但是如果当SDRAM需要进行刷新时,而SDRAM正在写数据,这两个操作之间怎么进行协调呢? 需要保证写的数据不能丢失,所以,如果刷新的时间到了,先让写操作把正在写的4个数据(突发长度为4)写完,然后再去进行刷新操作: 而如果在执行读操作也遇到需要刷新的情况,也可以先让数据读完,再去执行刷新操作. 思路:SDRAM控制器包括初始化.读操作.写操作及自动刷新这些操作,给每一个操作写上一个模块独立开来,也便于我们每个模块的调试,显然这种思路是正确的: 虽然都是独立

Verilog代码可移植性设计(转自特权同学博客http://bbs.ednchina.com/BLOG_ARTICLE_1983188.HTM)

最近开始学习FPGA,之前项目中仅用过parameter,在CrazyBingo的<FPGA设计技巧与案例开发例程详解>中看到使用localparam,以及在366页中简单介绍了下‘define,parameter和localparam的区别.查找特权同学博客发现其曾经讲诉过.文中红色阴影处为文中错误. Verilog代码可移植性设计 1.       参数定义 localparam,实例代码如下: module tm1( clk,rst_n, pout ); input clk; input

verilog代码风格——PN序列产生代码

在编写Verilog代码时注意以下点: 1 .同一个模块中不同变量的赋值放在不同的always块里(这样可以便于程序的调试),一个always块的代码        尽量不要超过十行. 2.同一个变量的赋值不能放在多个always块中,只能放在同一always块 2.复位信号一定要干净,尽量不要与其他的信号进行逻辑运算 3.利用时钟信号(clk)和复位信号(rst)做触发,尽量避免用中间变量的上升或者下降沿触发 示例代码如下(PN序列的产生): //-----------------------

omsp430ikmcu verilog代码

<open msp430应用笔记>中对应的verilog代码 mcu core顶层:omsp430.v //---------------------------------------------------------------------------- // // *File Name: openMSP430.v // // *Module Description: // openMSP430 Top level file // // *Author(s): // - Olivier

寄存器,移位寄存器的电路原理以及verilog代码实现

寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器: 逻辑功能分析: 1.异步端CR置0时,输出置0: 2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0~D3被同时并行置入. 3.在置数端为1,CP端为0时,保持不变. 2.移位寄存器:具有存放数码和使数码逐位右移或左移的电路称为移位寄存器. 移位寄存器按照不同的分类方法可以分为不同的类型. 如果按照移位寄存器的移位方向来进行分类, 可以分为左移移位寄存器.移位寄存器和双向移位寄存器等:如果按照工作

fpga测频原理和verilog代码

总的来说,fpga测量频率有两种算法,就是常说的测频和测周.专门翻了一下<电子测量>课本找定义,测频是在一段闸门时间内对输入信号周期进行计数,而测周则相反,是在输入信号的时段内,对标准信号周期进行计数.可以理解为,测频是用慢时钟测高频,测周是用用快时钟测低频周期.这种理解也符合"高频测频,低频测周"的说法. 就以测频算法为例写程序.难点是对闸门开始和结束标志的捕获.那我们可以用低频信号时钟的两个上升沿之间的那段时间作为闸门,对上升沿时间内输入信号周期进行计数.所以这就转为对

【FPGA】【verilog代码】二进制转BCD [转]

BCD:Binary Coded Decimal 即用4位二进制编码表示1位的十进制数. 定义:BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行.这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算.相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间.此外,对于其他需要高精确度的计算,BCD编码亦很常用. 参考百度百科对BCD码的解释:http://baike.b

FPGA按键去抖verilog代码

按键去抖的原因及其分类就不罗嗦了. 在这里解释一段代码,代码是网上找的,看了半天没懂,无奈查了半天想了半天,终于明白了... module sw_debounce(clk,rst_n,sw1,sw2,sw3,//outputled_d3,led_d4,led_d5);input clk;input rst_n;input sw1,sw2,sw3; //Active lowoutput led_d3;output led_d4;output led_d5;// ------------------