数字电路设计之循环右移的verilog实现

来源:互联网 发布:淘宝香水的货源 编辑:程序博客网 时间:2024/06/05 18:03

循环右移这个在ARM的指令中也是比较常见的,今天想把之前没写的这条指令补上。

循环右移感觉上有很多方法,这里就说一些我做出来并仿真正确的做法吧!

module ROR( pre,later,shift);

    input wire [7:0]pre;
    input wire [2:0]shift;
    output wire [7:0]later;
    
    assign   later = (pre>>shift)|(pre<<(8-shift));  //这里只有这个连续赋值,但是不要小看这个,这里有一些要注意的

    //那里的符号要用“或”,不能用“加”,这个原理就是循环右移就是逻辑左移或上逻辑右移n位(n=数据位数-移位数)

    //如果想多些几行就用always语句来实现该组合逻辑,当然写个循环也是可以的,不过用循环综合出来的东西乱七八糟
endmodule                                                             //其实还可以用乘法实现移位,这个就看在资源方面哪一种资源更有利了
                                                                          
仿真文件:

module ROR_test;

    // Inputs
    reg [7:0] pre;
    reg [2:0] shift;

    // Outputs
    wire [7:0] later;
    // Instantiate the Unit Under Test (UUT)
    ROR uut (
        .pre(pre),
        .later(later),
        .shift(shift),
    );
    
    initial begin
        // Initialize Inputs
        pre = 8'b01111001;
        shift = 1;

        // Wait 100 ns for global reset to finish
        #100;
       shift = 2;
        #100;
       shift = 3;
        #100;
       shift = 4;
        #100;
       shift = 5;
        #100;
       shift = 6;
        #100;
       shift = 7;
        // Add stimulus here

    end
      
endmodule


0 0
原创粉丝点击