• SOC设计:关于reset的细节


    有如下几个信号

    1、时钟:clk_top

    2、总的reset信号:rstn_top

    3、scan的reset信号:scan_rstn

    4、软件复位信号:rstn_soft_sub

    5、scan模式信号:scan_mode

    6、reset bypass 信号:scan_rstn_sel

    功能:

    一:在非test模式时,也就是test_mode=1'd0时,如果rstn_soft_sub=1,则rstn_top直接透传过去给reset_soft_block里的rstn,然后rstn再经过2拍同步处理,然后产生rstn_sub。这里涉及到了异步复位,同步释放知识点。

    二:正常功能仿真时,scan_mode = 1'd0 和scan_rstn_sel=0,直观点讲,rstn_sub是由rstn_top同步处理2拍后产生。

    reset_soft_block u0_sub_rstn_gen (/*autoinst*/
        .clk                            (clk_top                                     ), // input  
        .rstn0                          (rstn_top                                    ), // input  
        .rstn1                          (scan_rstn                                  ), // input  
        .rstn_soft                      (rstn_soft_sub                            ), // input  
        .test_mode                      (scan_mode                                  ), // input  
        .rst_bypass                     (scan_rstn_sel                              ), // input  
        .rstn_out                       (rstn_sub                                )  // output
                    );
     

    reset_soft_block功能

    module reset_soft_block (
                    clk,
                    rstn0,
                    rstn1,
                    rstn_soft,
                    test_mode,
            rst_bypass,
                    rstn_out
            );

    input        clk;
    input        rstn0;
    input        rstn1;
    input        rstn_soft;
    input        test_mode;
    input        rst_bypass;
    output        rstn_out;

    wire        rstn;
    wire        rstnsync;

    //assign rstn = rstn0 & (rstn_soft | test_mode);
    macro_oa21 C1 ( .b0(rstn0), .a0(rstn_soft), .a1(test_mode), .o(rstn) );

    resetsync u_rstn_sync (.clk(clk), .rstn(rstn), .rstnsync(rstnsync));

    macro_mux C2 ( .d0(rstnsync), .d1(rstn1), .s(rst_bypass), .o(rstn_out) );
     
    endmodule

    module resetsync ( clk, rstn, rstnsync);
    input        clk;
    input        rstn;
    output        rstnsync;

    wire        rstnsync1;

    macro_sdfr u_rstnsync1(.CK(clk), .D(rstn), .RB(rstn), .Q(rstnsync1));
    macro_sdfr u_rstnsync2(.CK(clk), .D(rstnsync1), .RB(rstn), .Q(rstnsync));

    endmodule
     

  • 相关阅读:
    JavaWeb之HTTP、Tomcat、Servlet
    时序预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测(风电功率预测)
    一个简单的dw网页制作作业,学生个人html静态网页制作成品代码——怪盗基德动漫主题网页成品(15页)
    【考研高数】学习笔记分享
    地质学中 P-A 图(PA图)讲解并使用python实现 || plt绘图实现,一个坐标图共享两个左右y轴
    Flask框架——应用错误处理
    编译原理实验一:源程序的预处理及词法分析程序的设计与实现(python)
    【进程间通信:管道】
    STL String类详解(上)
    TensorRT快速上手指南
  • 原文地址:https://blog.csdn.net/seuwilson/article/details/136509736