L0 五人投票
题目概述
裁判组有一个组长和四个组员(组员编号依次为 2'b00,2'b01,2'b10,2'b11)。
每个组员都可以赞成、反对或是弃权。组长还拥有屏蔽投票权:屏蔽一位组员的投票,无论该组员投什么票,都视为弃权。投票的输入信息和输入信号对应如下:
| 意义 | 赞成 | 反对 | 弃权 | 屏蔽投票 |
|---|---|---|---|---|
| 组长 | 2'b00 | 2'b01 | 2'b10 | 2'b11 |
| 组员 | 2'b00 | 2'b01, 2'b11 | 2'b10 | - |
当赞成票大于反对票时,表决结果为通过;反之为不通过。
输入输出描述
| 端口名称 | 方向 | 位宽 | 功能 |
|---|---|---|---|
| LV | I | [1:0] | 组长投票 |
| LI | I | [1:0] | 组长屏蔽组员的编号 |
| T0 | I | [1:0] | 组员 2'b00 的投票 |
| T1 | I | [1:0] | 组员 2'b01 的投票 |
| T2 | I | [1:0] | 组员 2'b10 的投票 |
| T3 | I | [1:0] | 组员 2'b11 的投票 |
| O | O | - | 表决结果(通过为 1,反之为 0) |
考场思路
这题几乎就是一个分线器的应用。
大概写了 20min 左右。
不过呢,为了避免重复四次一样的电路,可以创建一个 circuit 专门用于处理组员投票,注意输入应该是两个,一个投票信号,一个使能端(用于表示组长是否屏蔽了这个人)。
Bug 分析
这题又遇到了 logisim 的 bug。有时候连完线发现线红了或者蓝了,还修不好,不过保存后重启解决一切问题。
L1 文本匹配
题目概述
你需要匹配字符串 0121 和 1210。请使用 Mealy 自动机。
输入信号的含义:
| 2'b00 | 2'b01 | 2'b10 | 2'b11 |
|---|---|---|---|
| 0 | 1 | 2 | 不会出现 |
输入输出描述
| 端口名称 | 方向 | 位宽 | 功能 |
|---|---|---|---|
| clk | I | - | 时钟信号,在时钟上升沿转移状态 |
| rst | I | - | 异步复位信号 |
| in | I | [1:0] | 当前周期输入 |
| out | O | [1:0] | 0: 无匹配 1: 匹配 0121 2: 匹配 1210s |
考场思路
列出状态转移就可以啦。如下图所示:
- 当 $st=110$ 且 $in=10$ 时,输出 1
- 当 $st=011$ 且 $in=00$ 时,输出 2
- 其他时候输出 0
bug 分析
这个题 WA 了一次,错在串 01210。
因为我的 110 在 $in=1$ 时转移去了 001 而不是 011……
L2 斐波那契数列改
题目概述
数列 ${s_n}$ 定义如下:
$$
s_n =
\begin{cases}
0 & n=0,2 \\
1 & n=1,3 \\
s_{n-1} + (s_{n-2} \oplus s_{n-3}) & \text{if $n$ is even} \\
(s_{n-1} \oplus s_{n-2}) + s_{n-3} & \text{if $n$ is odd}
\end{cases}
$$
输入 $n$ 输出 $s_n$,时限:64 个周期。
输入输出描述
| 端口名称 | 方向 | 位宽 | 功能 |
|---|---|---|---|
| in | I | [4:0] | 输入 |
| out | O | [31:0] | 输出 |
考场思路
同预习的斐波那契数列。
就是递推转移啦……
不过有人似乎直接打表……
bug 分析
还是要搭建好一会儿的,主要是保存并维持输出,还有计数,以及电路延迟问题。