zoukankan      html  css  js  c++  java
  • 2时序逻辑电路移位寄存器

    2.3.1 自动右移寄存器

      信号由s_in进入8位寄存器最高位,寄存器最低位由s_out输出,代码如下

    View Code
     1 module free_run_shift
    2 (
    3 input clk,
    4 input rst_n,
    5 input s_in,
    6 output s_out
    7 );
    8
    9 reg [7:0] r_reg;//现态寄存器
    10 wire [7:0] r_next;//次态寄存器
    11
    12 always @(posedge clk or negedge rst_n)//时钟上升沿将次态寄存器值赋给现态寄存器,更新数据
    13 if(!rst_n)
    14 r_reg<=0;
    15 else r_reg<=r_next;
    16
    17 assign r_next={s_in,r_reg[7:1]};
    18 assign s_out=r_reg[0];
    19
    20 endmodule

    2.3.2通用移位寄存器

    可以并入并出,串入并出,并入串出。ctrl=11时,次态寄存器r_next得到输入值Q。 ctrl=00时,次态值等于现态值,不变。ctrl=01时,次态值左移移位,最低位填充D[0]。ctrl=11时,次态值右移移位,最高位填充D[N]。

    View Code
     1 module free_run_shift
    2 #(parameter N=8)
    3 (
    4 input clk,
    5 input rst_n,
    6 input [1:0] ctrl,
    7 input [N-1:0] D,
    8 output [N-1:0] Q
    9 );
    10
    11 reg [N-1:0] r_reg;
    12 reg [N-1:0] r_next;
    13
    14 always @(posedge clk or negedge rst_n)
    15 if(!rst_n)
    16 r_reg<=0;
    17 else r_reg<=r_next;
    18
    19 always @(*)
    20 case(ctrl)
    21 2'b00:r_next=r_reg;
    22 2'b01:r_next={r_reg[N-2:0],Q[0]};
    23 2'b10:r_next={Q[N-1],r_reg[N-1:1]};
    24 2'b11:r_next=D;
    25 default:;
    26 endcase
    27
    28 assign Q=r_reg;
    29
    30 endmodule
  • 相关阅读:
    js和java中使用join来进行数组元素的连接
    java的fail-fast 和 fail-safe机制
    chrome上表单的用户名密码autofill
    InnoDB索引底层是如何查询数据的?
    浏览器允许的并发请求资源数是什么意思?
    async/await的使用
    java获取HttpServletRequest 的客户端ip
    Free software
    Linux 配置 mysql 5.7.32 实操记录
    mysql 帮助手册翻译
  • 原文地址:https://www.cnblogs.com/yuesheng/p/2125402.html
Copyright © 2011-2022 走看看