[Cryptech-Commits] [user/sra/build-tools] branch master updated: More toys.
git at cryptech.is
git at cryptech.is
Sun Oct 4 19:34:34 UTC 2015
This is an automated email from the git hooks/post-receive script.
sra at hactrn.net pushed a commit to branch master
in repository user/sra/build-tools.
The following commit(s) were added to refs/heads/master by this push:
new 96c021c More toys.
96c021c is described below
commit 96c021c73197e09b39d367030c37ec404df56ed3
Author: Rob Austein <sra at hactrn.net>
Date: Sun Oct 4 15:33:44 2015 -0400
More toys.
---
verilog-integer.py | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
what-branches.py | 15 ++++++++++
2 files changed, 101 insertions(+)
diff --git a/verilog-integer.py b/verilog-integer.py
new file mode 100644
index 0000000..e9a1ba5
--- /dev/null
+++ b/verilog-integer.py
@@ -0,0 +1,86 @@
+# Code to parse Verilog's integer constant syntax so that we can
+# generate C headers from Verilog constants.
+#
+# Doesn't attempt to handle the analogue states ("x", "z", "?").
+#
+# Reference: http://verilog.renerta.com/source/vrg00020.htm
+
+class VerilogInteger(object):
+
+ radix = dict(b = 2, o = 8, d = 10, h = 16)
+
+ def __init__(self, input):
+ head, sep, tail = input.lower().translate(None, " \t_").partition("'")
+ self.input = input
+ self.code = tail[0] if tail else None
+
+ if not sep:
+ self.width = 32
+ self.value = int(head)
+
+ elif self.code in self.radix:
+ self.width = int(head) if head else 32
+ self.value = int(tail[1:], self.radix[self.code])
+ if self.width <= 0 or self.value < 0:
+ raise ValueError
+
+ else:
+ raise ValueError
+
+ if self.width is not None:
+ mask = (1L << self.width) - 1
+ if self.value > mask:
+ self.value &= mask
+ elif self.value < -mask:
+ self.value = -( -self.value & mask)
+
+ @property
+ def C(self):
+ if self.code is None:
+ return str(self.value)
+ elif self.code == "d":
+ return "{0:d}".format(self.value)
+ elif self.code == "o":
+ return "0{0:0{1}o}".format(self.value, (self.width + 2) / 3)
+ else:
+ return "0x{0:0{1}x}".format(self.value, (self.width + 3) / 4)
+
+ @property
+ def Verilog(self):
+ if self.code is None:
+ return str(self.value)
+ else:
+ fmt = "x" if self.code == "h" else self.code
+ return "{0.width}'{0.code}{0.value:{1}}".format(self, fmt)
+
+
+if __name__ == "__main__":
+
+ def show(*args):
+ print "{:20} | {:20} | {:20}".format(*args)
+
+ show("C", "Verilog", "Input")
+ show("-" * 20, "-" * 20, "-" * 20)
+
+ def test(x):
+ v = VerilogInteger(x)
+ show(v.C, v.Verilog, v.input)
+
+ test("15")
+ test("'h f")
+ test("'o 17")
+ test("'d 15")
+ test("'b 1111")
+ test("'b 1_1_1_1")
+ test("10 'd 20")
+ test("6'o 71")
+ test("8'b0")
+ test("8'b00000000")
+ test("8'b1")
+ test("8'b00000001")
+
+ try:
+ for line in open("/tmp/sample-verilog-numbers"):
+ test(line.strip())
+ except IOError:
+ pass
diff --git a/what-branches.py b/what-branches.py
new file mode 100755
index 0000000..4c90408
--- /dev/null
+++ b/what-branches.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+#
+# List branches in local repository tree.
+
+from subprocess import check_output
+from os import walk, listdir
+from sys import argv
+
+for root in argv[1:] or listdir("."):
+ for head, dirs, files in walk(root):
+ for dn in dirs:
+ if dn == ".git" and not head.endswith("/gitolite"):
+ print head
+ for line in check_output(("git", "branch", "-a"), cwd = head).splitlines():
+ print " ", line
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Commits
mailing list