本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
cs:comp_n_arch:courses:fnti_i:week_1 [2024/02/17 06:42] – [DMux Gate] codinghare | cs:comp_n_arch:courses:fnti_i:week_1 [2025/03/28 14:00] (当前版本) – [DMux Gate] codinghare | ||
---|---|---|---|
行 41: | 行 41: | ||
\\ \\ | \\ \\ | ||
可见逻辑函数可以用函数或真值表的方式来表达。 | 可见逻辑函数可以用函数或真值表的方式来表达。 | ||
- | ==Boolean | + | ==Boolean |
<code cil> | <code cil> | ||
# Commutative | # Commutative | ||
行 305: | 行 305: | ||
a = a[0]; | a = a[0]; | ||
</ | </ | ||
- | 下边是一个 4bit 按位 | + | 下边是一个 4bit ,对所有输入进行 |
<code nand2tetris-hdl> | <code nand2tetris-hdl> | ||
/* ANDs together all 4 bits of the input*/ | /* ANDs together all 4 bits of the input*/ | ||
行 354: | 行 354: | ||
IN lsb[8], msb[8]; | IN lsb[8], msb[8]; | ||
OUT a[16]; | OUT a[16]; | ||
+ | //specifies the sub range for lsb[8] and msb[8] | ||
Add16[a[0..7] = lsb, a[8..15] = msb, b=..., out =...); | Add16[a[0..7] = lsb, a[8..15] = msb, b=..., out =...); | ||
+ | Add16(..., out[0..3]=t1, | ||
</ | </ | ||
==buses 的几个惯例== | ==buses 的几个惯例== | ||
- | sub-buses 输出时,允许基于 output buses 的带宽来进行重叠: | + | * sub-buses 输出时,允许输出的 sub-bus 在选择带宽位时有重叠。 |
+ | * 内部 pin 的带宽会被自行的推断,比如下面两种情况: | ||
<code nand2tetris-hdl> | <code nand2tetris-hdl> | ||
// 16bits input is truncated in 14bits output | // 16bits input is truncated in 14bits output | ||
Add16(a=Bus1[0..15], | Add16(a=Bus1[0..15], | ||
</ | </ | ||
- | '' | ||
- | <code nand2tetris-hdl> | ||
- | Add16(a=true, | ||
- | </ | ||
- | internal pin 的带宽会被自动推断: | ||
<code nand2tetris-hdl> | <code nand2tetris-hdl> | ||
// single bit width | // single bit width | ||
行 373: | 行 371: | ||
y = lsb[i..j]; | y = lsb[i..j]; | ||
</ | </ | ||
+ | * '' | ||
+ | <code nand2tetris-hdl> | ||
+ | Add16(a=true, | ||
+ | </ | ||
+ | |||
<WRAP center round info 100%> | <WRAP center round info 100%> | ||
internal pin 不允许使用下标访问,比如 //y[i]// 是非法的。 | internal pin 不允许使用下标访问,比如 //y[i]// 是非法的。 | ||
行 397: | 行 400: | ||
{{ : | {{ : | ||
$$\texttt{Mux(a, | $$\texttt{Mux(a, | ||
+ | <WRAP center round box 100%> | ||
+ | 这类带开关的逻辑门通常可以用来创建可编程逻辑门(programmable gate)。将不同功能的门接入 '' | ||
==DMux Gate== | ==DMux Gate== | ||
* // | * // | ||
行 409: | 行 414: | ||
\end{align*} | \end{align*} | ||
\] | \] | ||
+ | <WRAP center round tip 100%> | ||
+ | 传输过程中通常使用**单路**的 bit 串进行数字传输。通常传输链路都会非常长(几千公里),如果需要同时输送两组信号源比如(AAAAA... 和 BBBBB...,这种情况下比较经济的做法是将信号进行 '' | ||
+ | 经 '' | ||
+ | 进行分解来得到 A 和 B。 | ||
+ | </ | ||
+ | |||
<WRAP center round box 100%> | <WRAP center round box 100%> | ||
- | 作业中通常涉及到组多路的基础门。这种牵涉到多路的情况一般都是用一个多 bits 的 sel 来控制输出状态。只要搞清楚哪一位 bit 控制的是哪一个层级的 switch 即可。层级可以通过真值表来判断。比如 4 way 的需要用 00 01 10 11 来控制。如果 00 对应 '' | + | 作业中通常涉及到组多路的基础门。这种牵涉到多路的情况一般都是用一个多 bits 的 sel 来控制输出状态。只要搞清楚哪一位 bit 控制的是哪一个层级的 switch 即可。层级可以通过真值表来判断。比如 4 way 的需要用 00 01 10 11 来控制。如果 00 对应 '' |
+ | 另外一点需要注意的是区分多个输入和多个输出的情况: | ||
+ | * 多个输入的情况,输入的时候需要先通过低层级的选择器筛选,才能将结果交给更高层级的门进行运算 | ||
+ | * 多个输出的情况则完全相反;首先需要从最高层级进行划分,再对 sub-group 进行次层级的选择,以此类推。 | ||
</ | </ | ||