# Simulating a combinatorial network [closed]

I have various Boolean functions in the sum of products format. I "convert" these via combinatorial logic synthesis into a combinatorial network as an And-Inverter Graph - therefore this network only consists of 2-input, 1-output And-Gates and inverters. Every sum of products function is therefore "responsible" for a certain single output. The network is a multi-input and multi-output network, in- and outputs are Boolean (0 or 1). This network is also parsed as file, so it can be read from.

I know, that such a network can be proven to be correct, but I want to simulate this combinatorial network with certain inputs. My problem is, that I only find ways to simulate a sequential network - nothing for combinatorial networks. SAT-provers might be helpful, but because of the nature of this network and its functions, I already know the functions are satisfiable. I need to know, what output will be generated using certain inputs.

Is there any way to simulate and test a combinatorial network with certain inputs and save the outputs? I know there a SAT-provers out there, but I don't think I can really use those, as I need specific outputs and the Inputs have to be in a specific order. Logic Simulation might be the way to go, as the network is derived from Boolean functions, but I didn't find a way to simulate this network via anything.

Short Example: Network is some sort of adder, 4 inputs, 5 outputs. I then go through the inputs (0000, 0001, 0010, ...) and save the outputs of the network. I can't compare the outputs to a tables of "expected" outputs, because I don't know what the outputs will be (I only know them for certain test cases - the network probably won't be as easy as an adder).

Is there any way to simulate a network like this?

• Well ok, I thought the question was not about the ABC software itself but more about how it could be done, just in general. But if this is off-topic here, I would be grateful if someone could point me to a better place to ask because I don't find anything at all. – BloShadow Apr 30 '15 at 13:30
• If you edit the question so it's not software-specific, I think it would be on-topic here. But I think that would involve deleting all of the first two paragraphs and there's the danger that the question becomes so vague or broad as to be unanswerable. – David Richerby Apr 30 '15 at 14:26
• Ok, I deleted the first two paragraphs and added a bunch of description, I hope this question now fits better and is still at least partially answerable. – BloShadow Apr 30 '15 at 17:05
• Looks much better to me. I hope somebody with the appropriate expertise can answer it! – David Richerby Apr 30 '15 at 17:24

The algorithm to simulate a combinational circuit is completely straightforward. Given a combinational circuit $C$ and an input $x$, it is easy to compute the output $y=C(x)$, simply by simulating each gate, one gate at a time. Each gate in the combinational circuit is either an AND gate or an inverter. Both can be implemented in software. So, to simulate such a circuit, you just iterate through the gates in topologically sorted order, compute the effect of each gate, and store the value of its output wire. This is a trivial, linear-time algorithm. There's no need for SAT solvers or anything fancy like that.