[Cryptech-Commits] [core/platform/novena] 11/21: Sorted out reset pins (I think). Seems our various core authors have different opinions about whether reset should be high or low, and the core selector code is responsible for making this right. Hmm.
git at cryptech.is
git at cryptech.is
Tue Sep 29 05:24:35 UTC 2015
This is an automated email from the git hooks/post-receive script.
sra at hactrn.net pushed a commit to branch config_core_selector_sra
in repository core/platform/novena.
commit 19e4044fcf47360dcc5aa68f6eae5a62a6cdb61b
Author: Rob Austein <sra at hactrn.net>
Date: Sat Sep 26 13:21:01 2015 -0400
Sorted out reset pins (I think). Seems our various core authors have
different opinions about whether reset should be high or low, and the
core selector code is responsible for making this right. Hmm.
Address map may still be wrong, as addressing scheme seems to have
changed while the core_select branch was gathering dust.
---
config/config.py | 69 ++++++++++++++++++--------------------------------
config/core_selector.v | 4 +--
config/core_vfiles.mk | 34 +++++++++++++++++++++++++
3 files changed, 60 insertions(+), 47 deletions(-)
diff --git a/config/config.py b/config/config.py
index ddf7d0b..970b339 100755
--- a/config/config.py
+++ b/config/config.py
@@ -101,6 +101,10 @@ class Core(object):
def upper_instance_name(self):
return self.instance_name.upper()
+ @property
+ def reset_pin(self):
+ return ".rst(sys_rst)"
+
def createInstance(self):
return createInstance_template_generic.format(core = self)
@@ -114,14 +118,15 @@ class Core(object):
return "".join(" \\\n\t$(CORE_TREE)/" + vfile for vfile in self.vfiles)
-class BoardCore(Core):
+class InvertedResetCore(Core):
"""
- Board-level cores have a slightly different API, which we handle
- with a different template, at least for now.
+ Core which inverts the reset signal. Seems to vary by author.
+ No, I don't know why we don't just pick one convention or the other.
"""
- def createInstance(self):
- return createInstance_template_board.format(core = self)
+ @property
+ def reset_pin(self):
+ return ".reset_n(~sys_rst)"
class SubCore(Core):
@@ -137,7 +142,7 @@ class SubCore(Core):
return createMux_template.format(core = self, core0 = self.parent)
-class TRNGCore(Core):
+class TRNGCore(InvertedResetCore):
"""
The TRNG core has an internal mux and a collection of sub-cores.
Mostly this means that our method calls have to iterate over all
@@ -166,12 +171,16 @@ class TRNGCore(Core):
def createMux(self):
return super(TRNGCore, self).createMux() + "".join(subcore.createMux() for subcore in self.subcores)
-# Hook special classes in as handlers for the cores that require them
+# Hook special classes in as handlers for the cores that require them.
Core.special_class.update(
- board_regs = BoardCore,
- comm_regs = BoardCore,
- trng = TRNGCore)
+ trng = TRNGCore,
+ aes = InvertedResetCore,
+ chacha = InvertedResetCore,
+ sha1 = InvertedResetCore,
+ sha256 = InvertedResetCore,
+ sha512 = InvertedResetCore,
+ modexp = InvertedResetCore)
# Templates (format strings), here instead of inline in the functions
@@ -191,14 +200,14 @@ createInstance_template_generic = """\
//----------------------------------------------------------------
// {core.upper_instance_name}
//----------------------------------------------------------------
- wire enable_{core.instance_name} = sys_ena && (addr_core_num == CORE_ADDR_{core.upper_instance_name});
+ wire enable_{core.instance_name} = (addr_core_num == CORE_ADDR_{core.upper_instance_name});
wire [31: 0] read_data_{core.instance_name};
wire error_{core.instance_name};
{core.name} {core.instance_name}_inst
(
.clk(sys_clk),
- .reset_n(~sys_rst),
+ {core.reset_pin},
.cs(enable_{core.instance_name} & (sys_eim_rd | sys_eim_wr)),
.we(sys_eim_wr),
@@ -211,41 +220,9 @@ createInstance_template_generic = """\
"""
-# Template used by BoardCore.createInstance(). This has minor
-# differences from the generic template, maybe we can merge them, or
-# maybe we can do something about the (gratuitous?) differences that
-# make this necessary.
-
-createInstance_template_board = """\
- //----------------------------------------------------------------
- // {core.upper_instance_name}
- //----------------------------------------------------------------
- wire enable_{core.instance_name} = sys_ena && (addr_core_num == CORE_ADDR_{core.upper_instance_name});
- wire [31: 0] read_data_{core.instance_name};
- wire error_{core.instance_name};
-
- {core.name} {core.instance_name}_inst
- (
- .clk(sys_clk),
- .rst(sys_rst),
-
- .cs(enable_{core.instance_name} & (sys_eim_rd | sys_eim_wr)),
- .we(sys_eim_wr),
-
- .address(addr_core_reg),
- .write_data(sys_write_data),
- .read_data(read_data_{core.instance_name}),
- .error(error_{core.instance_name})
- );
-
-
-"""
-
# Template used by TRNGCore.createInstance(); this is different enough
# from the generic template that it's (probably) clearer to have this
# separate.
-#
-# Should this also be checking sys_ena? Not obvious to me either way.
createInstance_template_TRNG = """\
//----------------------------------------------------------------
@@ -259,7 +236,7 @@ createInstance_template_TRNG = """\
{core.name} {core.instance_name}_inst
(
.clk(sys_clk),
- .reset_n(~sys_rst),
+ {core.reset_pin},
.cs(enable_{core.instance_name} & (sys_eim_rd | sys_eim_wr)),
.we(sys_eim_wr),
@@ -353,6 +330,8 @@ endmodule
# Template for makefile snippet listing Verilog source files.
listVfiles_template = """\
+# NOTE: This file is generated; do not edit by hand.
+
vfiles +={vfiles}
"""
diff --git a/config/core_selector.v b/config/core_selector.v
index 4debd60..731b494 100644
--- a/config/core_selector.v
+++ b/config/core_selector.v
@@ -51,7 +51,7 @@ module core_selector
board_regs board_regs_inst
(
.clk(sys_clk),
- .reset_n(~sys_rst),
+ .rst(sys_rst),
.cs(enable_board_regs & (sys_eim_rd | sys_eim_wr)),
.we(sys_eim_wr),
@@ -72,7 +72,7 @@ module core_selector
comm_regs comm_regs_inst
(
.clk(sys_clk),
- .reset_n(~sys_rst),
+ .rst(sys_rst),
.cs(enable_comm_regs & (sys_eim_rd | sys_eim_wr)),
.we(sys_eim_wr),
diff --git a/config/core_vfiles.mk b/config/core_vfiles.mk
new file mode 100644
index 0000000..bd1c6d4
--- /dev/null
+++ b/config/core_vfiles.mk
@@ -0,0 +1,34 @@
+# NOTE: This file is generated; do not edit by hand.
+
+vfiles += \
+ $(CORE_TREE)/hash/sha256/src/rtl/sha256.v \
+ $(CORE_TREE)/hash/sha256/src/rtl/sha256_core.v \
+ $(CORE_TREE)/hash/sha256/src/rtl/sha256_k_constants.v \
+ $(CORE_TREE)/hash/sha256/src/rtl/sha256_w_mem.v \
+ $(CORE_TREE)/cipher/aes/src/rtl/aes.v \
+ $(CORE_TREE)/cipher/aes/src/rtl/aes_core.v \
+ $(CORE_TREE)/cipher/aes/src/rtl/aes_decipher_block.v \
+ $(CORE_TREE)/cipher/aes/src/rtl/aes_encipher_block.v \
+ $(CORE_TREE)/cipher/aes/src/rtl/aes_inv_sbox.v \
+ $(CORE_TREE)/cipher/aes/src/rtl/aes_key_mem.v \
+ $(CORE_TREE)/cipher/aes/src/rtl/aes_sbox.v \
+ $(CORE_TREE)/rng/avalanche_entropy/src/rtl/avalanche_entropy.v \
+ $(CORE_TREE)/rng/avalanche_entropy/src/rtl/avalanche_entropy_core.v \
+ $(CORE_TREE)/rng/rosc_entropy/src/rtl/rosc.v \
+ $(CORE_TREE)/rng/rosc_entropy/src/rtl/rosc_entropy.v \
+ $(CORE_TREE)/rng/rosc_entropy/src/rtl/rosc_entropy_core.v \
+ $(CORE_TREE)/rng/trng/src/rtl/trng.v \
+ $(CORE_TREE)/rng/trng/src/rtl/trng_csprng.v \
+ $(CORE_TREE)/rng/trng/src/rtl/trng_csprng_fifo.v \
+ $(CORE_TREE)/rng/trng/src/rtl/trng_mixer.v \
+ $(CORE_TREE)/math/modexp/src/rtl/adder.v \
+ $(CORE_TREE)/math/modexp/src/rtl/blockmem1r1w.v \
+ $(CORE_TREE)/math/modexp/src/rtl/blockmem2r1wptr.v \
+ $(CORE_TREE)/math/modexp/src/rtl/blockmem2r1w.v \
+ $(CORE_TREE)/math/modexp/src/rtl/blockmem2rptr1w.v \
+ $(CORE_TREE)/math/modexp/src/rtl/modexp.v \
+ $(CORE_TREE)/math/modexp/src/rtl/modexp_core.v \
+ $(CORE_TREE)/math/modexp/src/rtl/montprod.v \
+ $(CORE_TREE)/math/modexp/src/rtl/residue.v \
+ $(CORE_TREE)/math/modexp/src/rtl/shl.v \
+ $(CORE_TREE)/math/modexp/src/rtl/shr.v
More information about the Commits
mailing list