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 分析
还是要搭建好一会儿的,主要是保存并维持输出,还有计数,以及电路延迟问题。