本文来自课程《From Nand to Tetris》
文中提到的所有实现都可以参考:nand2tetris_sol,但是最好还是自己学习课程实现一遍,理解更深刻。
基础逻辑门
基础逻辑门满足一些定律,都可以用真值表证明。
Nand Not And Or Xor
我们可以用 HDL(硬件描述语言)定义硬件<忽略物理实现,所有元件的抽象都是相同的>,Not,And,Or 都可以从一个 Nand 门构建。
更复杂的逻辑门 Xor,也可以通过 Not,And,Or 构建,所以 Xor 也可以用 Nand 门构建。
/**
* 16-bit multiplexor:
* for i = 0..15 out[i] = a[i] if sel == 0
* b[i] if sel == 1
*/
/**
* 4-way 16-bit multiplexor:
* out = a if sel == 00
* b if sel == 01
* c if sel == 10
* d if sel == 11
*/
/**
* 8-way 16-bit multiplexor:
* out = a if sel == 000
* b if sel == 001
* etc.
* h if sel == 111
*/
多路选择器(multiplexer)Mux
/**
* 16-bit multiplexor:
* for i = 0..15 out[i] = a[i] if sel == 0
* b[i] if sel == 1
*/
/**
* 4-way 16-bit multiplexor:
* out = a if sel == 00
* b if sel == 01
* c if sel == 10
* d if sel == 11
*/
/**
* 8-way 16-bit multiplexor:
* out = a if sel == 000
* b if sel == 001
* etc.
* h if sel == 111
*/
多路分配器(Demultiplexor)DMux
/**
* 8-way Or:
* out = (in[0] or in[1] or ... or in[7])
*/
/**
* 16-bit Not:
* for i=0..15: out[i] = not in[i]
*/
/**
* 16-bit bitwise And:
* for i = 0..15: out[i] = (a[i] and b[i])
*/
/**
* 16-bit bitwise Or:
* for i = 0..15 out[i] = (a[i] or b[i])
*/
到这里,我们实现了上述的组合逻辑单元,接下来我们会利用这些单元实现 ALU。