From 98d76709e11fe361adbac4e065ee7196ee535bc7 Mon Sep 17 00:00:00 2001 From: couriersud Date: Wed, 1 May 2019 22:26:08 +0200 Subject: netlist: provide example for state in truthtable. The truthtable implementation of 74107 (JK-Flipflop) is included for educational purposes to demonstrate how to implement state holding devices as truthtables. It will completely nuke performance for pong and therefore is disabled. --- src/lib/netlist/devices/net_lib.cpp | 2 + src/lib/netlist/devices/nld_74107.cpp | 4 +- src/lib/netlist/devices/nld_74107.h | 3 ++ src/lib/netlist/macro/nlm_ttl74xx.cpp | 78 +++++++++++++++++++++++++++++++++++ src/lib/netlist/macro/nlm_ttl74xx.h | 15 +++++++ src/lib/netlist/nl_config.h | 9 ++++ 6 files changed, 110 insertions(+), 1 deletion(-) diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index 4964306f55a..4fe03f81534 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -93,8 +93,10 @@ namespace devices LIB_ENTRY(7493_dip) LIB_ENTRY(7497) LIB_ENTRY(7497_dip) +#if (!USE_TRUTHTABLE_74107) LIB_ENTRY(74107) LIB_ENTRY(74107_dip) +#endif LIB_ENTRY(74107A) // FIXME: implement missing DIP LIB_ENTRY(74123) LIB_ENTRY(74123_dip) diff --git a/src/lib/netlist/devices/nld_74107.cpp b/src/lib/netlist/devices/nld_74107.cpp index a9c9b12c178..8bc6ca4bc7a 100644 --- a/src/lib/netlist/devices/nld_74107.cpp +++ b/src/lib/netlist/devices/nld_74107.cpp @@ -145,9 +145,11 @@ namespace netlist m_clk.activate_hl(); } +#if (!USE_TRUTHTABLE_74107) NETLIB_DEVICE_IMPL(74107, "TTL_74107", "+CLK,+J,+K,+CLRQ,@VCC,@GND") - NETLIB_DEVICE_IMPL(74107A, "TTL_74107A", "+CLK,+J,+K,+CLRQ,@VCC,@GND") NETLIB_DEVICE_IMPL(74107_dip, "TTL_74107_DIP", "") +#endif + NETLIB_DEVICE_IMPL(74107A, "TTL_74107A", "+CLK,+J,+K,+CLRQ,@VCC,@GND") } //namespace devices } // namespace netlist diff --git a/src/lib/netlist/devices/nld_74107.h b/src/lib/netlist/devices/nld_74107.h index fe0bfbe2fab..ae1adf33546 100644 --- a/src/lib/netlist/devices/nld_74107.h +++ b/src/lib/netlist/devices/nld_74107.h @@ -75,10 +75,13 @@ NET_CONNECT(name, K, cK) \ NET_CONNECT(name, CLRQ, cCLRQ) +#if (!USE_TRUTHTABLE_74107) #define TTL_74107(name, cCLK, cJ, cK, cCLRQ) \ TTL_74107A(name, cCLK, cJ, cK, cCLRQ) #define TTL_74107_DIP(name) \ NET_REGISTER_DEV(TTL_74107_DIP, name) +#endif + #endif /* NLD_74107_H_ */ diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp index aca01bf6a8b..f264b0ff220 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.cpp +++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp @@ -604,6 +604,34 @@ static NETLIST_START(TTL_7486_DIP) ) NETLIST_END() +#if (USE_TRUTHTABLE_74107) +#ifndef __PLIB_PREPROCESSOR__ +#define TTL_74107_TT(name) \ + NET_REGISTER_DEV(TTL_74107, name) +#endif + +static NETLIST_START(TTL_74107_DIP) + TTL_74107_TT(A) + TTL_74107_TT(B) + + NET_C(A.VCC, B.VCC) + NET_C(A.GND, B.GND) + + DIPPINS( /* +--------------+ */ + A.J, /* 1J |1 ++ 14| VCC */ A.VCC, + A.QQ, /* 1QQ |2 13| 1CLRQ */ A.CLRQ, + A.Q, /* 1Q |3 12| 1CLK */ A.CLK, + A.K, /* 1K |4 74107 11| 2K */ B.K, + B.Q, /* 2Q |5 10| 2CLRQ */ B.CLRQ, + B.QQ, /* 2QQ |6 9| 2CLK */ B.CLK, + B.GND, /* GND |7 8| 2J */ B.J + /* +--------------+ */ + ) + +NETLIST_END() +#endif + + /* * DM74155/DM74156: Dual 2-Line to 4-Line Decoders/Demultiplexers * @@ -1179,6 +1207,53 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() +#if (USE_TRUTHTABLE_74107) + /* + * +-----+-----+-----+---++---+-----+ + * | CLRQ| CLK | J | K || Q | QQ | + * +=====+=====+=====+===++===+=====+ + * | 0 | X | X | X || 0 | 1 | + * | 1 | * | 0 | 0 || Q0| Q0Q | + * | 1 | * | 1 | 0 || 1 | 0 | + * | 1 | * | 0 | 1 || 0 | 1 | + * | 1 | * | 1 | 1 || TOGGLE | + * +-----+-----+-----+---++---+-----+ + */ + TRUTHTABLE_START(TTL_74107, 6, 4, "+CLK,+J,+K,+CLRQ,@VCC,@GND") + TT_HEAD("CLRQ, CLK, _CO, J, K,_QX | Q, QQ, CO, QX") + TT_LINE(" 0, 0, X, X, X, X | 0, 1, 0, 0 | 16, 25, 1, 1") + TT_LINE(" 0, 1, X, X, X, X | 0, 1, 1, 0 | 16, 25, 1, 1") + + TT_LINE(" 1, 0, X, 0, 0, 0 | 0, 1, 0, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 1, X, 0, 0, 0 | 0, 1, 1, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 0, X, 0, 0, 1 | 1, 0, 0, 1 | 25, 16, 1, 1") + TT_LINE(" 1, 1, X, 0, 0, 1 | 1, 0, 1, 1 | 25, 16, 1, 1") + + TT_LINE(" 1, 0, 1, 1, 0, X | 1, 0, 0, 1 | 25, 16, 1, 1") + TT_LINE(" 1, 0, 0, 1, 0, 0 | 0, 1, 0, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 0, 0, 1, 0, 1 | 1, 0, 0, 1 | 25, 16, 1, 1") + TT_LINE(" 1, 1, X, 1, 0, 0 | 0, 1, 1, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 1, X, 1, 0, 1 | 1, 0, 1, 1 | 25, 16, 1, 1") + + TT_LINE(" 1, 0, 1, 0, 1, X | 0, 1, 0, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 0, 0, 0, 1, 0 | 0, 1, 0, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 0, 0, 0, 1, 1 | 1, 0, 0, 1 | 25, 16, 1, 1") + TT_LINE(" 1, 1, X, 0, 1, 0 | 0, 1, 1, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 1, X, 0, 1, 1 | 1, 0, 1, 1 | 25, 16, 1, 1") + + // Toggle + TT_LINE(" 1, 0, 0, 1, 1, 0 | 0, 1, 0, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 0, 0, 1, 1, 1 | 1, 0, 0, 1 | 25, 16, 1, 1") + TT_LINE(" 1, 1, 0, 1, 1, 0 | 0, 1, 1, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 1, 0, 1, 1, 1 | 1, 0, 1, 1 | 25, 16, 1, 1") + TT_LINE(" 1, 1, 1, 1, 1, 0 | 0, 1, 1, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 1, 1, 1, 1, 1 | 1, 0, 1, 1 | 25, 16, 1, 1") + + TT_LINE(" 1, 0, 1, 1, 1, 1 | 0, 1, 0, 0 | 16, 25, 1, 1") + TT_LINE(" 1, 0, 1, 1, 1, 0 | 1, 0, 0, 1 | 25, 16, 1, 1") + TRUTHTABLE_END() +#endif + TRUTHTABLE_START(TTL_74155A_GATE, 4, 4, "") TT_HEAD("B,A,G,C|0,1,2,3") TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13") @@ -1308,6 +1383,9 @@ NETLIST_START(TTL74XX_lib) LOCAL_LIB_ENTRY(TTL_7448_DIP) #endif LOCAL_LIB_ENTRY(TTL_7486_DIP) +#if (USE_TRUTHTABLE_74107) + LOCAL_LIB_ENTRY(TTL_74107_DIP) +#endif LOCAL_LIB_ENTRY(TTL_74155_DIP) LOCAL_LIB_ENTRY(TTL_74156_DIP) LOCAL_LIB_ENTRY(TTL_74260_DIP) diff --git a/src/lib/netlist/macro/nlm_ttl74xx.h b/src/lib/netlist/macro/nlm_ttl74xx.h index 38a08f99e03..8afc465490d 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.h +++ b/src/lib/netlist/macro/nlm_ttl74xx.h @@ -240,6 +240,21 @@ #define TTL_7486_DIP(name) \ NET_REGISTER_DEV(TTL_7486_DIP, name) +#if (USE_TRUTHTABLE_74107) +#define TTL_74107(name, cCLK, cJ, cK, cCLRQ) \ + NET_REGISTER_DEV(TTL_74107, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, J, cJ) \ + NET_CONNECT(name, K, cK) \ + NET_CONNECT(name, CLRQ, cCLRQ) + +#define TTL_74107_DIP(name) \ + NET_REGISTER_DEV(TTL_74107_DIP, name) + +#endif + #define TTL_74155_DIP(name) \ NET_REGISTER_DEV(TTL_74155_DIP, name) diff --git a/src/lib/netlist/nl_config.h b/src/lib/netlist/nl_config.h index 1ef79af3c07..f2005602443 100644 --- a/src/lib/netlist/nl_config.h +++ b/src/lib/netlist/nl_config.h @@ -65,6 +65,15 @@ #define USE_TRUTHTABLE_7448 (0) +/* + * FIXME: The truthtable implementation of 74107 (JK-Flipflop) + * is included for educational purposes to demonstrate how + * to implement state holding devices as truthtables. + * It will completely nuke performance for pong. + */ + +#define USE_TRUTHTABLE_74107 (0) + //============================================================ // DEBUGGING //============================================================ -- cgit v1.2.3