先打个广告:《一图复习数字电路》已经完工,一张图带你复习一本数字电路,你值得拥有。这个我做了一个带超链接的pdf格式,发了网盘链接了,有爱自取。
做数电作业时,我们经常会遇到要求使用JK触发器、T触发器用次态K图法设计驱动方程。每次做这种题我们都会吐槽——明明现在Verilog只支持D触发器,谁还无聊到用JK触发器和T触发器设计电路啊。这种题不就是单纯地折腾我们吗?
对于2变量的状态Q1Q0,假设输入为一位X,设计JK触发器就得画J1/K1/J0/K0一共4个卡诺图,设计T触发器画2个,一共就是6个。这还不得累死我啊。
当然,有没有不画图的办法呢?当然有。按照我们老师的说法,设计JK触发器的J时,可以把对应Q=0的地方保留,将Q=1的地方脑补成x。设计JK触发器的K时,可以把对应Q=1的地方取反保留,将Q=0的地方脑补成x。设计T触发器时保留Q=0,对Q=1取反。这样就不需要画新的卡诺图了,我们就能脑补出这6个卡诺图了。
然而理想很美满,现实很骨感。对于我这种记忆力本就差还粗心的菜鸡,且不说这一串规则能不能记住了。就算是对着规则脑补,因为要算6个,经常脑补着脑补着就脑补错了,然后算错直接微笑GG,直接作业重做,一小时功夫白费。
于是我就寻思着:能不能设计得一样就能直观地看出来,最好就是直接可以画圈圈的卡诺图的模样,不要让我再脑补了。我脑子内存本来就有限,这不是为难我吗?
有想法就去做。经过我的观察,我总结出来了一个“伪卡诺图”,它包含所有这6个卡诺图的信息,而且是可以直观可提取的,直接可以在上面画圈的那种。可以起到1个顶6的效果。
我自己给这个“伪卡诺图”命了个名字,叫做“异或卡诺图”。我也把我自创的方法命名为“异或卡诺图法”。
既然咱是工科,那就不整理论这些花里胡哨的,直接从一个例子上手——
这里的行指标值得是第一列对应行在的元素。
比如第1行第2列的00、第1行第3列的01对应的行指标为第1行第1列的00
第2行第2列的00、第2行第3列的11对应的行指标为第2行第1列的01
以此类推
例如对于这样一个卡诺图:
计算出来得到:
这个操作是不是很简单?因为我们用到了异或运算,我们不妨称新的卡诺图为“异或卡诺图”。
再来看一次上面那个图。我们会发现J1、K1的卡诺图合并起来(忽略x)就是“异或卡诺图”的高位。J0、K0的卡诺图合并起来(忽略x)就是“异或卡诺图”的低位。T1、T0的卡诺图合并起来分别是“异或卡诺图”的高位、低位。这个操作看起来很平凡,但是在“异或卡诺图”上圈卡诺圈就变得直接多了,而且基本不会犯错。
当然,既然这个操作是如此地简单,那么证明其实也是相当简单的,使用驱动方程的定义立即可以证出。有兴趣的读者不妨将其作为习题练练手,没有兴趣的读者直接用即可,毕竟工科嘛,关键还是用。

彩蛋