如何以抽象的方式思考设计数字逻辑芯片?
我目前正在研究“计算系统的要素”我在第一章中,我从Nand开始实现了以下门。
不
和
或者
异或
复用器
DMUX
16位不
16位和
16bit或
16位Mux
8路或
我现在卡住了尝试实现16位四路复用器。
我已经尝试将真值表转换为规范表示法,但最终我得到了一个巨大的混乱。使用规范表示对于“较小”的芯片效果很好,但现在非常复杂。如何以一种不涉及将随机芯片混合在一起的方式组装“复杂”芯片?
编辑:
我对4路Mux的16位部分并不感到困惑。我计划在阵列中使用一堆四路多路复用器。 4路多路复用器是我坚持的部分。
答案 0 :(得分:4)
让我们从两个输入多路复用器开始。
两个输入A& B和选择线S.当A或B为'1'且选择线选择该输入时输出为'1',否则为'0'。所以:
A=1 and S=0
B=1 and S=1
把它写成门:
(A and (not S)) or (B and S)
将其扩展到4路(S现在是2位):
A = 1 and S=0
B = 1 and S=1
C = 1 and S=2
D = 1 and S=3
(A and (not S1) and (not S0)) or
(B and (not S1) and ( S0)) or
(C and ( S1) and (not S0)) or
(D and ( S1) and ( S0))
我们可以看到一种模式正在出现,即每个输入都与一些“启用术语”进行AND运算,该启用术语可以打开或关闭该输入。由于启用条件是独占的(任何时候只能有一个条件),效果是将输出切换到所需的输入。
这可以扩展到任何大小的MUX。
答案 1 :(得分:2)
我赞赏你的“从底层开始并开始工作”的方法,它将帮助你了解随着时间推移越来越复杂的电路所涉及的内容。
也许值得指出的是,一旦你以更大的比例来到designing digital logic chips
,这些天通常会在更高的水平上完成。通常使用硬件描述语言(通常是Verilog或VHDL),甚至在某些域中使用C作为芯片的一部分。
一旦你在那个级别工作,你很少编写MUX的代码,但是当你写出你要求综合工具为你生成一个文本描述时,知道非常有用,并且你对于它可能会有多大的“大门”有所了解。
另一点值得注意的是,如果你转向使用FPGA设计,你的基本构建模块不是与非门,而是4或6个输入查找表(带有各种其他辅助模块)。这改变了你的观点,因为4个(或6个)输入的任何函数的成本相同......