From 68750445cd5d0178796b01d0cd8731132d02f270 Mon Sep 17 00:00:00 2001 From: Florent Kermarrec Date: Sun, 26 Aug 2012 15:15:44 +0200 Subject: [PATCH] add truth table generator --- migScope/tools/__init__.py | 0 migScope/tools/truthtable.py | 29 +++++++++++++++++++++++++++++ top.py | 4 ++++ 3 files changed, 33 insertions(+) create mode 100644 migScope/tools/__init__.py create mode 100644 migScope/tools/truthtable.py diff --git a/migScope/tools/__init__.py b/migScope/tools/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/migScope/tools/truthtable.py b/migScope/tools/truthtable.py new file mode 100644 index 000000000..6f091080f --- /dev/null +++ b/migScope/tools/truthtable.py @@ -0,0 +1,29 @@ +import os +import re +import sys + +def get_operands(s): + return sorted(re.findall("[A-z0-9_]+",s)) + +def gen_truth_table(s): + operands = get_operands(s) + width = len(operands) + stim = [] + for i in range(width): + stim_op = [] + for j in range(2**width): + stim_op.append((int(j/(2**i)))%2) + stim.append(stim_op) + + truth_table = [] + for i in range(2**width): + for j in range(width): + exec("%s = stim[j][i]" %operands[j]) + truth_table.append(eval(s)) + return truth_table + +def main(): + print(gen_truth_table("(A&B&C)|D")) + +if __name__ == '__main__': + main() diff --git a/top.py b/top.py index 57b22cd95..d731a958c 100644 --- a/top.py +++ b/top.py @@ -8,6 +8,8 @@ from migen.bus import csr import migScope import spi2Csr +from migScope.tools.truthtable import * + # #Test Term # @@ -91,4 +93,6 @@ print(v) #v = verilog.convert(spi2csr0.get_fragment()) #print(v) +print(gen_truth_table("A&B&C")) +