| #!/usr/bin/env python3 |
| # Run: python3 -m unittest ice40.utils.fasm_icebox.tests.test_fasm_icebox_utils |
| |
| import unittest |
| from ..ice40_feature import Feature, FasmEntry, IceDbEntry |
| from .. import fasm_icebox_utils |
| |
| |
| class TestConversion(unittest.TestCase): |
| def helper(self, icedb, fasm_repr): |
| fi = Feature.from_icedb_entry(icedb) |
| ff = Feature.from_fasm_entry(fasm_repr) |
| self.assertEqual(fasm_repr, fi.to_fasm_entry()) |
| self.assertEqual(icedb, ff.to_icedb_entry()) |
| |
| def test_lc_x_lut(self): |
| test_vec = [xx for xx in range(20)] |
| lut, ctrl = fasm_icebox_utils._lc_to_lut(test_vec) |
| lc = fasm_icebox_utils._lut_to_lc(lut, ctrl) |
| self.assertEqual(lc, test_vec) |
| |
| def test_nibble_x_bits(self): |
| test_vec = "0123456789abcd" |
| bits = fasm_icebox_utils._nibbles_to_bits(test_vec) |
| nibbles = fasm_icebox_utils._bits_to_nibbles(bits) |
| self.assertEqual(nibbles, test_vec) |
| |
| def test_ram(self): |
| |
| self.helper( |
| IceDbEntry("RAMB", [3, 15], ["B10[49]"], ["INITA"], 49), |
| FasmEntry("RAMB_X3_Y15.INITA[49]", ["10_49"]), |
| ) |
| |
| self.helper( |
| IceDbEntry("RAMB", [3, 15], ["!B10[49]"], ["INITA"], 49), |
| FasmEntry("RAMB_X3_Y15.INITA[49]", ["!10_49"]), |
| ) |
| |
| def test_logic(self): |
| self.helper( |
| IceDbEntry( |
| "LOGIC", |
| [7, 3], |
| ["!B0[31]", "B0[32]", "!B0[33]", "!B0[34]", "!B1[31]"], |
| ["buffer", "carry_in_mux", "lutff_0/in_3"], |
| None, |
| ), |
| FasmEntry( |
| "LOGIC_X7_Y3.buffer.carry_in_mux.lutff_0_in_3", |
| "!0_31 0_32 !0_33 !0_34 !1_31".split(), |
| ), |
| ) |
| |
| def test_io(self): |
| self.helper( |
| IceDbEntry( |
| "IO", |
| [10, 17], |
| ["B1[17]"], |
| ["buffer", "io_0/D_IN_0", "span12_horz_0"], |
| None, |
| ), |
| FasmEntry("IO_X10_Y17.buffer.io_0_D_IN_0.span12_horz_0", ["1_17"]), |
| ) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |