Inhaltsverzeichnis

Snaiks Study

Signals and Systems from KiCad to Cpp

7.4.2016
For Updates please see Snaiks


Introduction

Signals and Systems is here a collection of Cpp classes on one hand, and a collection of corresponding KiCad components on the other hand.

It's purpose is to create complex systems by drawing them in KiCad's schematic editor and generate out of the netlist a working Cpp code, which also compiles for micro controllers without dynamic memory allocation.

It can be used to implement PLCs or digital signal processing like filtering.

The Cpp classes are based heavily on templates, so most of the components can be used either for floating point or for integer calculations.

Goals

Mini-Demo






Source Code

Blue Prints

Sampled vs. Transparent Systems

The Problem

For some systems it would be handy, if they are transparent from input to output.
This means, that they do not consume a whole clock cycle. An example could be a simple And-gate. Perhaps one do not want this gate to introduce an extra clock-cycle, until the combined signal is visible on the output.
The drawback of this method is, that the update-order of all the systems is very important. If the user is aware of this problem, he can shorten latencies of complex systems.

In Snaiks example test1 we had a undesired behaveour, because the And-gate befor the middle output indroduced a delay of one clock. In transitions from „within range“ to „too high“ and to „too low“ undesired states were produced, were either 2 outputs were true at the same time, or where no output was true for one clock cycle.
This made the antiGlitchDelays necessary.

The Proposal

Every System has a flag transparent which is by default false.
If it is true and sample() is called, update() is called from the sample() function:

class MySystem
{
	...
	bool transparent;
	bool sampled=false;
	...
	void sample()
	{
		sInput = *input;
		sampled = true;
		if(transparent)
		{
			update();
		}
	}
 
	void update()
	{
		if(sampled)  // avoid double update
		{
			sampled = false;
			output = ...
		}
	}
	...
}

This also makes the flag sampled necessary. Becaus the normal clock master calls every sample() and then every update(). A second update-run shouldn't change anything, but consumes perhaps unnecessay processing time.

Properties

A Snaiks component can have properties. For example:

A property consists of

Info-System

A system generated by Snaiks should be fully discoverable and manipulatable during runtime.

Use cases

Needed Features

Hierarchical Systems

It should be possible to combine a set of systems to a sub-system, where new inputs and outputs are defined.

KiCads hierarchical schematic structure could be used out of the box, but in Cpp we do not see anything from this. Similar to the KiCad PCB layout, which also doesn't know anything about a hierarchical sheets. Altium Designer has the so called rooms, which group and synchronize footprint arrangement and traces between multiple instances of one hierarchical sheet.

For the systems we should make something similar to the properties, which live in a SnsPropertyContainer. We should make a SnsSystemContainer, which provides on one hand memory for the different objects of a sub-system and on the other hand new inputs and outputs.

Any-Type Inputs/Outputs

Perhaps it would be useful, that not all inputs must have the same type. For example a mute gate, where the enable is bool and the signal is double.

Pros:

Cons:

Proposal