/* ************************************************************ */
#include "CNT4.nsl" // Instanciate lower module
/* ************************************************************ */
declare CNT8_instanciate {
input PARAM_in[8] ; // Initial parameter.
input LOAD_in ; // Synchronous PARAM_in load request.
input ENB_in ; // Count enable
output Q_out[8] ; // Flip-Flop data output
func_out CARRY_out() ; // Carry-output at internal counter is all-H.
}
/* ************************************************************ */
// Declare module
module CNT8_instanciate {
/* ************************************************************ */
// Instanciate lower-module
CNT4 lower_CNT4 ; // Instanciate CNT[3:0]
CNT4 upper_CNT4 ; // Instanciate CNT[7:4]
/* ************************************************************ */
// Internal operation signals
/* ************************************************************ */
// Pallarel operation equation
{
// Lower 4bit counter
lower_CNT4.PARAM_in = PARAM_in[3:0] ;
lower_CNT4.LOAD_in = LOAD_in ;
lower_CNT4.ENB_in = ENB_in ;
lower_CNT4.CARRY_in() ;
// -> Call lower 4bit counter carry-in() procedure.
// Upper 4bit counter
upper_CNT4.PARAM_in = PARAM_in[7:4] ;
upper_CNT4.LOAD_in = LOAD_in ;
upper_CNT4.ENB_in = ENB_in ;
if ( lower_CNT4.CARRY_out ) {
// Check lower 4bit counter value is %1111 ( Carry-up )
upper_CNT4.CARRY_in() ;
// -> Call upper 4bit counter carry-in() procedure.
}
// Output signals
Q_out = { upper_CNT4.Q_out , lower_CNT4.Q_out } ;
// 4bit + 4bit => 8bit bus width.
// Generate CARRY-OUT to more higher counter.
if ( upper_CNT4.CARRY_out & lower_CNT4.CARRY_out ) {
CARRY_out() ;
}
}
}
/* ************************************************************ */