// Verilog HDL for "gates.lib", "psr1" "_functional"
// Module Parallel Shift Register 1
module psr1 (sin, pin, clk, sout, pout);

input
	sin, pin, clk;

output
	sout, pout;
wire
	sout, pout;

parameter
	t_hold	= -14,
	t_setup	= 23,
	delay	= 20,
	t_separation = 10;

defparam
	psr1conf.t_separation = t_separation,
	psr1conf.delay  = 15,
	psr1split.delay = 10,
	psr1dro.t_hold 	= t_hold + 15,
	psr1dro.t_setup = t_setup - 15,
	psr1dro.delay 	= delay - 10;

wire
	din, dout;

conf_buff psr1conf(sin, pin, din);
dro_cell  psr1dro(din, clk, dout);
splitter  psr1split(dout, sout, pout);

endmodule
	


[ [ [ 'module',
      'psr1',
      '(',
      [['sin'], ['pin'], ['clk'], ['sout'], ['pout']],
      ')',
      ';'],
    [ ['input', 'sin', 'pin', 'clk', ';'],
      ['output', 'sout', 'pout', ';'],
      ['wire', ['sout', 'pout'], ';'],
      [ 'parameter',
        ['t_hold', '=', '-', '14'],
        ['t_setup', '=', '23'],
        ['delay', '=', '20'],
        ['t_separation', '=', '10'],
        ';'],
      [ 'defparam',
        ['psr1conf.t_separation', '=', ['t_separation']],
        ['psr1conf.delay', '=', '15'],
        ['psr1split.delay', '=', '10'],
        ['psr1dro.t_hold', '=', ['t_hold'], '+', '15'],
        ['psr1dro.t_setup', '=', ['t_setup'], '-', '15'],
        ['psr1dro.delay', '=', ['delay'], '-', '10'],
        ';'],
      ['wire', ['din', 'dout'], ';'],
      [ 'conf_buff',
        [['psr1conf'], ['(', ['sin'], ['pin'], ['din'], ')']],
        ';'],
      [ 'dro_cell',
        [['psr1dro'], ['(', ['din'], ['clk'], ['dout'], ')']],
        ';'],
      [ 'splitter',
        [['psr1split'], ['(', ['dout'], ['sout'], ['pout'], ')']],
        ';']],
    'endmodule']]
