Skip to content

Commit

Permalink
Add example of hamming generator and checker instances
Browse files Browse the repository at this point in the history
--089e01294e809a874205133faa19
Content-Type: text/plain; charset=UTF-8

<div dir="ltr"><br></div>
hutch31 authored and sbourdeauducq committed Apr 10, 2015
1 parent 5d07072 commit 181aeb4
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions examples/basic/hamming.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from migen.fhdl import verilog
from migen.fhdl.std import *
from migen.genlib.mhamgen import HammingGenerator, HammingChecker


# Instantiates Hamming code generator and checker modules back
# to back. Also creates an intermediate bus between generator
# and checker and injects a single-bit error on the bus, to
# demonstrate the correction.
class gen_check(Module):
def __init__(self, width=8):
# Save module parameters and instantiate generator and checker
self.width = width
hg = HammingGenerator(self.width)
hc = HammingChecker(self.width, correct=True)
self.submodules += hg
self.submodules += hc

# Create the intermediate bus and inject a single-bit error on
# the bus. Position of the error bit is controllable by the
# error_bit input.
data = Signal(width)
error_bit = Signal(bits_for(width))
self.comb += data.eq(hg.data_in ^ (1 << error_bit))
self.comb += hc.code_in.eq(hg.code_out)
self.comb += hc.data_in.eq(data)

# Call out I/O necessary for testing the generator/checker
self.io = set()
self.io.add(hg.data_in)
self.io.add(hc.enable)
self.io.add(error_bit)
self.io.add(hc.code_out)
self.io.add(hc.data_out)

gc = gen_check()
print(verilog.convert(gc, gc.io, name="gen_check"))

0 comments on commit 181aeb4

Please sign in to comment.