1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
// license:GPL-2.0+
// copyright-holders:Couriersud
/*
* nld_74107.h
*
* DM74107: DUAL J-K FLIP-FLOPS WITH CLEAR
*
* +--------------+
* 1J |1 ++ 14| VCC
* 1QQ |2 13| 1CLRQ
* 1Q |3 12| 1CLK
* 1K |4 74107 11| 2K
* 2Q |5 10| 2CLRQ
* 2QQ |6 9| 2CLK
* GND |7 8| 2J
* +--------------+
*
*
* Function table 107
*
* +-----+-----+-----+---++---+-----+
* | 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 |
* +-----+-----+-----+---++---+-----+
* _
* * = _| |_
*
* This is positive triggered, J and K
* are latched during clock high and
* transferred when CLK falls.
*
* Function table 107A
*
* +-----+-----+-----+---++---+-----+
* | CLRQ| CLK | J | K || Q | QQ |
* +=====+=====+=====+===++===+=====+
* | 0 | X | X | X || 0 | 1 |
* | 1 | F | 0 | 0 || Q0| Q0Q |
* | 1 | F | 1 | 0 || 1 | 0 |
* | 1 | F | 0 | 1 || 0 | 1 |
* | 1 | F | 1 | 1 || TOGGLE |
* | 1 | 1 | X | X || Q0| Q0Q |
* +-----+-----+-----+---++---+-----+
*
* THe 107A is negative triggered.
*
* Naming conventions follow Texas instruments datasheet
*
* FIXME: Currently, only the 107A is implemented.
* The 107 uses the same model.
*
*/
#ifndef NLD_74107_H_
#define NLD_74107_H_
#include "../nl_base.h"
#define TTL_74107A(_name, _CLK, _J, _K, _CLRQ) \
NET_REGISTER_DEV(74107A, _name) \
NET_CONNECT(_name, CLK, _CLK) \
NET_CONNECT(_name, J, _J) \
NET_CONNECT(_name, K, _K) \
NET_CONNECT(_name, CLRQ, _CLRQ)
#define TTL_74107(_name, _CLK, _J, _K, _CLRQ) \
TTL_74107A(_name, _CLK, _J, _K, _CLRQ)
#define TTL_74107_DIP(_name) \
NET_REGISTER_DEV(74107_dip, _name)
NETLIB_SUBDEVICE(74107Asub,
netlist_ttl_input_t m_clk;
netlist_ttl_output_t m_Q;
netlist_ttl_output_t m_QQ;
netlist_sig_t m_Q1;
netlist_sig_t m_Q2;
netlist_sig_t m_F;
ATTR_HOT void newstate(const netlist_sig_t state);
);
NETLIB_DEVICE(74107A,
public:
NETLIB_NAME(74107Asub) sub;
netlist_ttl_input_t m_J;
netlist_ttl_input_t m_K;
netlist_ttl_input_t m_clrQ;
);
class NETLIB_NAME(74107) : public NETLIB_NAME(74107A)
{
public:
NETLIB_NAME(74107) ()
: NETLIB_NAME(74107A) () {}
};
NETLIB_DEVICE(74107_dip,
NETLIB_NAME(74107) m_1;
NETLIB_NAME(74107) m_2;
);
#endif /* NLD_74107_H_ */
|