use STD.TEXTIO.all;
use work.COMPUTE_PACK.all;
use work.IO_PACK.all;
use work.INTERFACE_PACK.all;

entity sigdel is
end sigdel;

architecture sigdel of sigdel is

   component anavhdl
      port (v_output     : out VALUE_ARRAY;    -- Analog output.
            T_IN         : out TIME;      -- Circuit simulation Time.
            stop         : out TIME;      -- Simulation end time.
            incri        : out TIME;    -- Time incriment step.
            Vgs          : out real;
            extern_feed  : in boolean;
            FILE_FLAG    : in boolean;
            lowpass_feed  : in boolean;
            lowpass_input  : in VALUE_ARRAY;
            error_value  : in VALUE_ARRAY);
   end component;

   component A2D
      generic (hi_cutoff : real;
               lo_cutoff : real);
      port (LOGIC_OUTPUT : out SWITCH_LEVEL;  -- Digital voltage output.
            ANALOG_INPUT : in real;           -- Analog voltage output.
            T_input      : in TIME;           -- Circuit simulation time.
            stop_at      : in TIME;           -- Simulation end time.
            Vgate_src    : in real);
   end component;

   component D2A
      port (LOGIC_IN      : in SWITCH_LEVEL;  -- Digital voltage input.
            Time_in       : in TIME;          -- Simulation time from AnaVHDL.
            stop_after    : in TIME;          -- Simulation end time.
            ANALOG_OUTPUT : out real);        -- Analog voltage output.
   end component;

   component d_ff
      generic (nand_delay : time := 0 ns);
      port(clock, data : in SWITCH_LEVEL;
           q, qb : out SWITCH_LEVEL);
   end component;


for all : anavhdl use entity work.anavhdl(anavhdl);
for all : A2D use entity work.A2D(A2D);
for all : D2A use entity work.D2A(D2A);
for all : d_ff use entity work.d_ff(d_ff);

    signal v_output1     : VALUE_ARRAY(1 to 100);
    signal v_output2     : VALUE_ARRAY(1 to 100);
    signal T_IN1         : TIME;
    signal T_IN2         : TIME;
    signal stop_at1      : TIME;
    signal stop_at2      : TIME;
    signal LOGIC_OUTPUT : SWITCH_LEVEL;
    signal clock        : SWITCH_LEVEL;
    signal dff_out      : SWITCH_LEVEL;
    signal stop_sim     : boolean := false;
    signal anaout       : real;
    signal extern_feed1  : boolean := false;
    signal extern_feed2  : boolean := false;
    signal error_value  : VALUE_ARRAY (1 to 100);
    signal Vgs1          : real;
    signal Vgs2          : real;
    signal sigdel_real_out : VALUE_ARRAY (1 to 100);
    signal lowpass_feed1 : boolean := false;
    signal lowpass_feed2 : boolean := false;
    signal lowpass_input1  : VALUE_ARRAY (1 to 100);
    signal lowpass_input2  : VALUE_ARRAY (1 to 100);
    signal lowpass_out : real;
    signal FILE_FLAG1 : BOOLEAN := TRUE;
    signal FILE_FLAG2 : BOOLEAN := FALSE;


file FILE2 : TEXT is out "STD_OUTPUT";

begin

   ana1 : anavhdl
		port map (v_output => v_output1, T_IN => T_IN1,
                          stop => stop_at1, extern_feed => extern_feed1, 
                          error_value => error_value, Vgs => Vgs1,
                          lowpass_feed => lowpass_feed1,
                          lowpass_input => lowpass_input1,
                          FILE_FLAG => FILE_FLAG1);
                          
   ana2 : anavhdl
		port map (v_output => v_output2, T_IN => T_IN2,
                          stop => stop_at2,
                          extern_feed => extern_feed2,
                          error_value => error_value, Vgs => Vgs2,
                          lowpass_feed => lowpass_feed2,
                          lowpass_input => lowpass_input2,
                          FILE_FLAG => FILE_FLAG2);
			 
   a2d1 : A2D
		generic map (hi_cutoff => 3.7, lo_cutoff => 1.7)
		port map (LOGIC_OUTPUT => LOGIC_OUTPUT, ANALOG_INPUT 
            	        => v_output1(8),T_input => T_IN1, stop_at => stop_at1,
                           Vgate_src => Vgs1);

   d_ff1 : d_ff
                generic map (1 ns)
		port map (data => LOGIC_OUTPUT, clock => clock, q => dff_out);

   d2a1 : D2A
		port map (LOGIC_IN => dff_out, Time_in => T_IN2, stop_after =>
			  stop_at2, ANALOG_OUTPUT => anaout);


     
stop_control : process

  begin

     wait until stop_sim = true;
     assert false report "Stopping simulation"severity failure;

end process stop_control;


p1 : process
   
     variable K : LINE;
     variable t : time := 0 ns;
     variable i : integer := 1;
     variable j : integer := 1;
     variable l : integer := 1;

  begin

      loop1:
        for i in 1 to 100 loop
         write(K,"Time = ");
         write(K,T_IN1);
         write(K," ");
         clock <= '0', '1' after 2 ns, '0' after 3 ns;
         wait for 5 ns;
         if t < 195 ns then
            error_value(i) <= error1(anaout);
         elsif t > 195 ns then
            extern_feed1 <= true;
            error_value <= error_value;
            sigdel_real_out(l) <= anaout;
            j := j + 1;
            l := l + 1;
            lowpass_feed2 <= true;
            lowpass_input2 <= sigdel_real_out;
            lowpass_out <= v_output2(2);
         end if;
         write(K,"anaout = ");
         wait for 0 ns;
         write(K,anaout);
         writeline(OUTPUT,K);
         t := t + 5 ns;
         exit loop1 when t = 300 ns;
      end loop loop1;
      stop_sim <= true;

end process p1;

end sigdel;

<div align="center"><br /><script type="text/javascript"><!--
google_ad_client = "pub-7293844627074885";
//468x60, Created at 07. 11. 25
google_ad_slot = "8619794253";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />&nbsp;</div>