BUAA-CO-pre

现在是北京时间23:28,精神状态不佳
T1:Logisim
硬控我1个小时的 FSM
,什么都搞对了,就是 Appearance
搞错了…
题目大意
逐个输入数列type
不同,输入的
type = 0
时,
type = 1
时,
type = 2
时,
信号名 | 方向 |
---|---|
clk | I |
reset | I |
type [1:0] | I |
output[31:0] | O |
对于加法溢出,仅保留低32位;考虑使用Moore机,采用同步复位
Solution
- 状态转移:既然不同
type
对应不同输出,那么必然要用到多路选择器 type = 1
时需要, type = 2
时需要前项和,自然需要用到2个寄存器。 - 要注意同步复位的画法
难绷之处
好吧,前面看着都挺简单的,是吗?
最后有这么一句话:
请你的电路图的
Appearance
保持与下图一致,否则可能导致评测错误
但是本人搭完电路后默认的 Apperance
是这样的:
而且本人根本不知道怎么调整这个东西……
于是被硬控了1个小时,期间尝试了各种debug方法,包括但不限于:重新搭、改Lable、调整模块中的 output
位置等。而且 Appearance
错误的输出我还看不懂,前面两个xx后面一堆0,所以debug也是完全没有头绪
最后多亏了课程组给的 hint
以及把考试延长了1个小时,才惊险通过
其实调整
Appearance
非常简单,因为Appearance
界面里的所有东西都是可以拖动的,只要把输入输出引脚的位置拖动到要求的位置即可
T2: Verilog
题目大意
给2个32位2进制数,将他们“按位相乘”并统计结果中1的个数
信号名 | 方向 |
---|---|
vector_a[31:0] | I |
vector_b[31:0] | I |
answer[5:0] | O |
额其实是因为原题我不记得了,只记得翻译过后的题,所以直接实现就可以了
Solution
由于是二进制,按位乘其实就是按位 and
,(是否在某种层面上解释了为什么 and
的符号是for
循环统计结果中的1,然后输出即可
有几个可能需要注意的点:
verilog
中的&
是按位与的符号,本人由于忘记了,所以尝试了&&
,and
,&
,最终才惊险试出来verilog
中的整形变量声明时用的是integer
而不是int
- 要么把
answer
设成reg
,要么定义一个临时reg cnt
存储结果,总之你需要寄存器 - 初始化
(应该不用说了吧
1 | module ans( |
T3 MIPS
不想多说,就是一个把C语言翻译成汇编的题,仔细些很快就过了
- Title: BUAA-CO-pre
- Author: OWPETER
- Created at : 2024-09-23 22:46:55
- Updated at : 2025-01-25 21:06:46
- Link: https://owpeter.github.io/2024/09/23/BUAA-CO-pre/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments