Overtone NSL Support

NSLサポートページ



4ビット 同期式リセット・レジスタ(多ビットバスサンプル)


機能

フリップフロップ4個を用いたレジスタ回路.同期リセット機能付き

信号機能

D_in[4] = データ入力信号
SR_in = 同期リセット入力信号
ENB_in = データ保持の有効入力信号

Q_out[4] = データ出力信号

解説

4個のフリップフロップを用いて,クロックに同期してD_in信号の値をQ_outに反映します.
SR_inがHレベルのときは同期リセットとして,初期値を保持します.
ENB_inがHレベルのときはD_inの値をQ_outに反映し,ENB_inがLレベルのときはQ_inは値を保持し続けます.

留意点

NSLではクロックと非同期リセットは暗黙で使用されます.
同期リセットを行なう場合には,reg構文で宣言されたレジスタに初期値を与えません.

非同期式リセットを行ないたい場合には,FF_4bit_AR.nslを参照してください.

Q_outのような出力信号に対して直接レジスタ記述は行なえません.
(I/OピンにF/Fがあるかどうかはシリコン次第であるため)
レジスタの値を出力したい場合には,内部で宣言したレジスタの値を出力信号に接続する論理式を書きます.

NSL記述例

/* ************************************************************ */
declare FF_4bit_sr {

    input       D_in[4] ;           // D input
    input       SR_in ;             // Synchronous RESET input
    input       ENB_in ;            // Data hold enable input

    output      Q_out[4] ;          // Flip-Flop data output

}

/* ************************************************************ */
// Declare module
module FF_4bit_sr {

/* ************************************************************ */
// Internal operation signals
    reg         Dtype_FF[4] ;           // Declare D-type F/F

/* ************************************************************ */
// Equation

    {
/* **** Data output **** */
        Q_out = Dtype_FF ;      // Q_out = Dtype_FF[3:0] ; is acceptable
                                // Q_out[3:0] = .... is not acceptable

/* **** Flip-Flop equation **** */

    // Statement variation #1
        if ( SR_in )
            Dtype_FF := 4'b0 ;              // Set INITIAL value
        else
            if ( ENB_in )
                Dtype_FF := D_in ;          // Capture NEW data

/*
    // Statement variation #2
        if ( SR_in ) {
            Dtype_FF := 4'b0 ;              // Set INITIAL value
        } else {
            if ( ENB_in ) {
                Dtype_FF := D_in ;          // Capture NEW data.
            }
        }
*/

/*
    // Statement variation #3 : Using ALTERNATE syntax
        alt {
            SR_in   : Dtype_FF := 4'b0 ;    // Set INITIAL value
            ENB_in  : Dtype_FF := D_in ;    // Capture NEW data.
        }
*/

    }
}
/* ************************************************************ */

Verilog変換例

/*
 Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:54:14 2010

 Licensed to :EVALUATION USER:
*/

module FF_4bit_sr ( p_reset , m_clock , D_in , SR_in , ENB_in , Q_out );
  input p_reset, m_clock;
  input [3:0] D_in;
  input SR_in;
  input ENB_in;
  output [3:0] Q_out;
  reg [3:0] Dtype_FF;

   assign  Q_out = Dtype_FF;
always @(posedge m_clock)
  begin

//synthesis translate_off
if (((~SR_in)&#038;ENB_in)&#038;SR_in)   Dtype_FF <= 4'bx;
  else
//synthesis translate_on
if ((~SR_in)&#038;ENB_in)
      Dtype_FF <= D_in;
else if (SR_in)
      Dtype_FF <= 4'b0000;
end

//synthesis translate_off
always @(posedge m_clock)
  begin
if ((((~SR_in)&#038;ENB_in)|SR_in=='b1) ||
 (((~SR_in)&#038;ENB_in)|SR_in=='b0) ) begin
 if (((~SR_in)&#038;ENB_in)&#038;SR_in)
 begin $display("Warning: assign collision(FF_4bit_sr:Dtype_FF) at %d",$time);

  end
 end
 else
 $display("Warning: register set hazard(FF_4bit_sr:Dtype_FF) at %d",$time);
  end
//synthesis translate_on
endmodule
/*
 Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:54:14 2010

 Licensed to
*/
PAGE TOP