simulator lang=spectre
global 0

{% for file in includes %}
ahdl_include "{{ file }}"
{% endfor %}

{% for option in options %}
{{ option }}
{% endfor %}

* Power Supply
VGND vgd 0 vsource dc={{ vgd }} type=dc
VDD vdd 0 vsource dc={{ vdd }} type=dc
VSG vsgd 0 vsource dc= {{ vsgd }} type=dc

* Clock
VCLK clk vgd vsource type=pulse val0={{ vgd }} val1={{ vdd }} period={{ clock['period'] }} rise={{ clock['rise_time'] }} fall={{ clock['fall_time'] }}

* Input Signal
{% for i in range(input_signals|length) %}
VS{{i}} u_{{i}} vgd vsource type=sine sinedc={{  input_signals[i]['offset'] }} ampl={{ input_signals[i]['amplitude'] }} freq={{ input_signals[i]["freq"] }} sinephase={{ input_signals[i]["phase"] }}
{% endfor %}

* Analog frontend
analog_frontend{% for input in analog_frontend['inputs'] %} {{ input }}{% endfor %}{% for output in analog_frontend['outputs'] %} {{ output }}{% endfor %} {{ analog_frontend['name'] }}

// Example analysis commands
//
// stop=(1 << 14) * clock_period
// strobefreq = 1 / clock_period
// strobedelay = clock_period / 4
//
tran tran cmin=0 stop={{ t_stop }} strobefreq={{ strobefreq }} strobedelay={{ strobedelay }} skipdc=yes {% for param, value in tran_options.items() %}{{param}}={{value}} {% endfor %}

{% for key, value in sim_options.items() %}
{{key}} options {% for param, value in sim_options[key].items() %}{{param}}={{value}} {% endfor %}
{% endfor %}

// Save analog frontend outputs
//save {% for var in save_variables[0] %}{{ var }} {% endfor %}

save *
