第一次上机

本文最后更新于 2024年9月30日 下午

1

搭建一个能处理三个输入指令的电路

00 输出0
01 输出上一次输出+1(\(a_n=a_{n-1}+1\))
10 输出之前输出之和(\(a_n=\mathop\Sigma\limits^{n-1}_{i=0}a_i\))
image-20240923220646182
image-20240923220711838

2

向量相乘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module dotProduct(
input [31:0] vector_a,
input [31:0] vector_b,
output reg[4:0] out
);
reg[4:0] t;
integer i;
always @(vector_a or vector_b)begin
t = 5'b0;
for (i = 0; i < 32; i=i+1)begin
t = t + (vector_a[i] * vector_b[i]);
end
out = t;
end
endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module dotProduct_tb();
reg[31:0] a;
reg[31:0] b;
wire[4:0] out;

initial begin
a=32'b0;
b=32'b0;
#100
a=32'd10;
b=32'd10;
end
dotProduct uvv(.vector_a(a), .vector_b(b), .out(out));

endmodule

3

MIPS求数组中最长连续递增子数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// C语言示例代码
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int max = 0;
int len = 0;
int last=-1, curr;
while (n--){
scanf("%d", &curr);
if (curr > last){
len += 1;
max = len > max ? len : max;
}else {
len = 1;
}
last = curr;
}
printf("%d", max);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.eqv n, $s0
.eqv max, $s1
.eqv len, $s2
.eqv curr, $s3
.eqv last, $s4

.macro printInt(%int)
move $a0, %int
li $v0, 1
syscall
.end_macro

.macro inputInt(%int)
li $v0, 5
syscall
move %int, $v0
.end_macro

.macro forLoop(%ct,%n,%startLabel,%endLabel)
%startLabel:
beq %ct, %n, %endLabel
.end_macro

.macro forEnd(%ct,%startLabel,%endLabel)
addi %ct, %ct, 1
j %startLabel
%endLabel:
.end_macro

li last, -1
li $t0, 0
inputInt(n)
forLoop($t0,n,start,end)
inputInt(curr)
ble curr, last, less
add len, len, 1
bge max, len, skip
move max, len
skip:
j tail
less:
li len, 1
tail:
move last, curr
forEnd($t0,start,end)

printInt(max)

第一次上机
https://meteor041.git.io/2024/09/23/第一次上机/
作者
meteor041
发布于
2024年9月23日
许可协议