📅  最后修改于: 2023-12-03 15:10:17.598000             🧑  作者: Mango
约翰逊计数器是一种数字电路,用于按照固定模式生成递减输出序列。n 位约翰逊计数器是将多个约翰逊计数器连接起来构成的计数器,可以用于计数和控制多个设备、任务等。
n 位约翰逊计数器由 n 个约翰逊计数器级联构成,每个约翰逊计数器的输出是前一个计数器输出的反向。第一个约翰逊计数器的输出是固定的(例如全是 1),每当最后一个约翰逊计数器的输出变为 1 时,整个计数器的输出序列就会循环一次。
例如,当 n=3 时,n 位约翰逊计数器的计数序列为:
111 -> 110 -> 100 -> 010 -> 011 -> 001 -> 101 -> 111 -> 110 -> ...
下面是一个 n=4 的约翰逊计数器电路图示例:
使用门电路(例如:NAND)来实现 n 位约翰逊计数器相对繁琐。一种更方便的实现方法是使用 Flip-flop 和 XOR 门,其中 Flip-flop 用于存储当前计数器的状态,XOR 门来生成下一个状态。
下面是实现一个 4 位约翰逊计数器的 Python 代码片段(只有核心部分):
q0, q1, q2, q3 = False, False, False, False # 初始化第一个状态
while True:
yield (q0, q1, q2, q3)
q0 = not q3
q1 = q0 ^ q3
q2 = q1 ^ q3
q3 = q3 ^ True
其中,q0
到 q3
分别表示四个 Flip-flop 的输出,使用生成器将上一个状态的值作为下一个状态的输入,生成新状态。