It has been 519 days since the last update, the content of the article may be outdated.

📢
本系列文章只提供课上测试的解读
所有课下作业的源代码请按下面指示前往我的Github仓库~

BUAA-2023-CO

通过阅读本文,您可以大致了解 2023 年秋季北航计算机组成原理课程 P1 课上测试的题目内容、难度和解题思路
P1 课上测试 3题做出2题 通过。主要内容是对 Verilog 的使用综合考察
题目每年都会发生变化,题意描述大致清晰,但是可能与原题有一定差异

T0·向量点乘

题目描述

在实现矩阵乘操作时,往往可以将其分解为若干向量的点乘操作来执行。现在,请你设计一个向量点乘模块,实现向量的点乘操作。

简介

为了简化题目,我们用两个位宽为 32 的 wire 型变量来表示两个需要点乘的 32 维向量,也就是说,向量任何一个维度的值只能为 0 或 1。你需要将两个向量同一位置相乘并将所有位置的乘积相加输出。

输入输出

名称 功能 位宽 方向
vector_a[31:0] 需要点乘的向量a 32 I
vector_b[31:0] 需要点乘的向量b 32 I
result[5:0] 结果 6 O

求解思路

很简单。
各位相乘再求和(0位到31位)

T1·涂色问题

题目描述

小 B 同学准备对一列格子进行涂色,他想要使用红色,绿色,蓝色三种颜色,但是要求如下:同一颜色不得连续出现三次,红色不得与绿色相连。

简介

我们将在每个周期通过 color 端口输入一个颜色代号:0(红色),1(绿色),2(蓝色),你需要设计 Moore 状态机来检测该涂色序列的合法性,并在检测到不合法的序列之后将输出端口 check 置为 1。

另外,在检测到不合法序列之后,小 B 同学会将最近的一次涂色擦除,重新涂色。

输入输出

名称 功能 位宽 方向
color 颜色输入 2 I
rst_n 异步复位信号,低电平有效 1 I
clk 时钟信号 1 I
check 结果 1 O

求解思路

个人建议不必按题目要求,可以用 Mealy 型状态机,更好理解。

次态逻辑

状态表示识别情况,共7个状态3位二进制表示

状态(十进制) 识别情况
0 空,没有任何颜色
1 单个红色
2 单个绿色
3 单个蓝色
4 两个相连红色
5 两个相连绿色
6 两个相连蓝色

需要注意的是,除正常地识别转换外,如果发现当前输出使次态非法,那么次态实际上应该回到当前状态。(题中所讲的擦除当前颜色)

输出逻辑

按照输出规则即可。

很抱歉,由于特殊原因,没有T2和助教问答的相关数据