機能
フリップフロップ4個を用いたレジスタ回路.非同期リセット機能付き
信号機能
D_in[4] = データ入力信号
ENB_in = データ保持の有効入力信号
Q_out[4] = データ出力信号
解説
4個のフリップフロップを用いて,クロックに同期してD_in信号の値をQ_outに反映します.
ENB_inがHレベルのときはD_inの値をQ_outに反映し,ENB_inがLレベルのときはQ_inは値を保持し続けます.
留意点
NSLではクロックと非同期リセットは暗黙で使用されます.
reg構文で宣言されたレジスタは,初期値を与えることが可能です.
この初期値は,非同期リセット(p_resetが標準の信号名)有効時にレジスタの出力がこの値に設定されます.
同期式リセットを行ないたい場合には,FF_4bit_SR.nslを参照してください.
Q_outのような出力信号に対して直接レジスタ記述は行なえません.
(I/OピンにF/Fがあるかどうかはシリコン次第であるため)
レジスタの値を出力したい場合には,内部で宣言したレジスタの値を出力信号に接続する論理式を書きます.
reg構文で宣言されたレジスタは,下記のようにビットごとに分解して値の代入を行なうことはできません.
→ ”ERROR!!!!! Flip-Flop equation”を参照してください
if ( ENB_in ) {
Dtype_FF[3] := D_in[3] ; // Capture NEW data. Bit3
Dtype_FF[2] := D_in[2] ; // Capture NEW data. Bit2
Dtype_FF[1] := D_in[1] ; // Capture NEW data. Bit1
Dtype_FF[0] := D_in[0] ; // Capture NEW data. Bit0
}
NSL記述例
/* ************************************************************ */
declare FF_4bit_ar {
input D_in[4] ;
input ENB_in ;
output Q_out[4] ;
}
/* ************************************************************ */
// Declare module
module FF_4bit_ar {
/* ************************************************************ */
// Internal operation signals
reg Dtype_FF[4] = 4'b1010 ; // Declare D-Type F/F with init value
/* ************************************************************ */
// 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 ( ENB_in )
Dtype_FF := D_in ; // Capture NEW data
/*
// **** ERROR!!!!! Flip-Flop equation ****
if ( ENB_in ) {
Dtype_FF[3] := D_in[3] ; // Capture NEW data. Bit3
Dtype_FF[2] := D_in[2] ; // Capture NEW data. Bit2
Dtype_FF[1] := D_in[1] ; // Capture NEW data. Bit1
Dtype_FF[0] := D_in[0] ; // Capture NEW data. Bit0
}
*/
}
}
/* ************************************************************ */
Verilog変換例
/*
Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:54:09 2010
Licensed to :EVALUATION USER:
*/
module FF_4bit_ar ( p_reset , m_clock , D_in , ENB_in , Q_out );
input p_reset, m_clock;
input [3:0] D_in;
input ENB_in;
output [3:0] Q_out;
reg [3:0] Dtype_FF;
assign Q_out = Dtype_FF;
always @(posedge m_clock or posedge p_reset)
begin
if (p_reset)
Dtype_FF <= 4'b1010;
else if (ENB_in)
Dtype_FF <= D_in;
end
endmodule
/*
Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:54:10 2010
Licensed to
*/