機能
フリップフロップ1個を用いたレジスタ回路.非同期リセット機能付き
信号機能
D_in = データ入力信号
ENB_in = データ保持の有効入力信号
Q_out = データ出力信号
解説
1個のフリップフロップを用いて,クロックに同期してD_in信号の値をQ_outに反映します.
ENB_inがHレベルのときはD_inの値をQ_outに反映し,ENB_inがLレベルのときはQ_inは値を保持し続けます.
留意点
NSLではクロックと非同期リセットは暗黙で使用されます.
reg構文で宣言されたレジスタは,初期値を与えることが可能です.
この初期値は,非同期リセット(p_resetが標準の信号名)有効時にレジスタの出力がこの値に設定されます.
同期式リセットを行ないたい場合には,FF_1bit_SR.nslを参照してください.
Q_outのような出力信号に対して直接レジスタ記述は行なえません.
(I/OピンにF/Fがあるかどうかはシリコン次第であるため)
レジスタの値を出力したい場合には,内部で宣言したレジスタの値を出力信号に接続する論理式を書きます.
NSL記述例
/* ************************************************************ */
declare FF_1bit_ar {
input D_in ;
input ENB_in ;
output Q_out ;
}
/* ************************************************************ */
// Declare module
module FF_1bit_ar {
/* ************************************************************ */
// Internal operation signals
reg Dtype_FF = 1'b0 ; // Declare D-Type F/F with init value
/* ************************************************************ */
// Equation
{
/* **** Data output **** */
Q_out = Dtype_FF ;
/* **** Flip-Flop equation **** */
// Statement variation #1
if ( ENB_in )
Dtype_FF := D_in ; // Capture NEW data
// Statement variation #2
if ( ENB_in ) {
Dtype_FF := D_in ; // Capture NEW data
} else {
Dtype_FF := Dtype_FF ; // Hold current value
}
// Statement variation #3
any {
ENB_in : Dtype_FF := D_in ; // Capture NEW data
// else : Dtype_FF := Dtype_FF ;
// Hold current value ( Not need this statement )
}
}
}
/* ************************************************************ */
Verilog変換例
/*
Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:53:56 2010
Licensed to :EVALUATION USER:
*/
module FF_1bit_ar ( p_reset , m_clock , D_in , ENB_in , Q_out );
input p_reset, m_clock;
input D_in;
input ENB_in;
output Q_out;
reg Dtype_FF;
assign Q_out = Dtype_FF;
always @(posedge m_clock or posedge p_reset)
begin
if (p_reset)
Dtype_FF <= 1'b0;
else
//synthesis translate_off
if ((~ENB_in)&ENB_in) Dtype_FF <= 1'bx;
else
//synthesis translate_on
if (~ENB_in)
Dtype_FF <= Dtype_FF;
else if (ENB_in)
Dtype_FF <= D_in;
end
//synthesis translate_off
always @(posedge m_clock)
begin
if (((~ENB_in)|ENB_in=='b1) ||
((~ENB_in)|ENB_in=='b0) ) begin
if ((~ENB_in)&ENB_in)
begin $display("Warning: assign collision(FF_1bit_ar:Dtype_FF) at %d",$time);
end
end
else
$display("Warning: register set hazard(FF_1bit_ar:Dtype_FF) at %d",$time);
end
//synthesis translate_on
endmodule
/*
Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:53:56 2010
Licensed to
*/