NJU-ICS 2024学习随笔PA2_1(RTFSC(2))

2024-10-12

新坑待填

正在写

2024-10-21

主播这么久没更新不是似了,是因为主播的虚拟机炸了。

出现了以下问题:

打开ubuntu22.04时没有图形界面

解决办法有两种:

  1. sudo systemctl restart gdm 或者 sudo systemctl restart lightdm
    startx
  2. sudo apt install --reinstall ubuntu-desktop
    sudo reboot

没有网络/重启后没有ens33

我的情况是没有网卡了

可以使用ip a或者ifconfig查看网络情况,看看有没有ens33

可以使用sudo dhclient -vens33打开

但是我是没有网卡了,光这样做重启后还是没有ens33

可以通过以下指令解决

sudo lshw -numeric -class network
sudo route -nv
sudo dhclient -v

 

OK,现在是解决了,明天开始进入正题

2024-10-29

2024-10-27

只能说读代码确实有点耗时间

(加上我要考的学校前两天刚把保研名单发出来,算了算就招十几个,有点影响心态。但是现在没问题了,想了想,努努力试试呢)

通过批处理模数运行NEMU

abstract-machine/scripts/platform/nemu.mk的15行中有

NEMUFLAGS += -l $(shell dirname $(IMAGE).elf)/nemu-log.txt

最后加一个-b就可以了

NEMUFLAGS += -l $(shell dirname $(IMAGE).elf)/nemu-log.txt -b

相关的内容可以看看nemu/src/monitor/monitor.c中的parse_args函数

 

2024-10-29

我找到了一个中文的文档,最后面有指令的设计,我直接参考这个写的,还有一些问题,正在调

 

2024-10-30

不知道出现了什么问题,但是感觉应该不全是我的问题,是添加了一些指令,但是仍然不能pass,所以我放弃了,等以后遇到了再说。。。。

本来是这么想的。。

但是我突然想起来,有HIT GOOD TRAP的信息就表示运行成功了。

所以,应该是运行成功了。接下来贴代码

路径ics2024/nemu/src/isa/riscv32/inst.c中添加

enum {
  TYPE_I, TYPE_U, TYPE_S, TYPE_J, TYPE_B, TYPE_R,//Here is the info obtained from the manual
  TYPE_N, // none
};

#define immJ() do { *imm = SEXT(((BITS(i, 31, 31) << 19) |  BITS(i, 30, 21) | (BITS(i, 20, 20) << 10) | (BITS(i, 19, 12) << 11)) << 1, 21); } while (0)

static void decode_operand(Decode *s, int *rd, word_t *src1, word_t *src2, word_t *imm, int type) {
  uint32_t i = s->isa.inst.val;
  int rs1 = BITS(i, 19, 15);
  int rs2 = BITS(i, 24, 20);
  *rd     = BITS(i, 11, 7);
  switch (type) {
    case TYPE_I: src1R();          immI(); break;
    case TYPE_U:                   immU(); break;
    case TYPE_S: src1R(); src2R(); immS(); break;
    case TYPE_J:                   immJ(); break;
  }
}

static int decode_exec(Decode *s) {
  /*
  ....
  */

  INSTPAT_START();
  INSTPAT("??????? ????? ????? 010 ????? 01000 11", sw     , S, Mw(src1 + imm, 4, src2));
  INSTPAT("??????? ????? ????? 000 ????? 00100 11", addi   , I, R(rd) = src1 + imm);
  INSTPAT("??????? ????? ????? ??? ????? 00101 11", auipc  , U, R(rd) = s->pc + imm);
  
  INSTPAT("??????? ????? ????? 100 ????? 00000 11", lbu    , I, R(rd) = Mr(src1 + imm, 1));
  INSTPAT("??????? ????? ????? 000 ????? 01000 11", sb     , S, Mw(src1 + imm, 1, src2));

  INSTPAT("??????? ????? ????? ??? ????? 11011 11", jal    , J, s->dnpc = s->pc + imm; R(rd) = s->snpc);
  INSTPAT("??????? ????? ????? 000 ????? 11001 11", jalr   , I, s->dnpc = (src1 + imm) & ~1ull; R(rd) = s->snpc);
  /*
  ....
  */
}

唉,本来昨天就写完了。

吐槽部分:

这个张宇的8套卷越做越离谱,要么难的一点不会,要么简单的一眼秒,没有过渡的难度(就那种,想一想,然后恍然大悟的感觉),而且3h根本写不完,很难过,分也不高,感觉离目标有点遥远。

计组也拉下好久没看了,明天争取早点结束数学,然后看看计组。英语也得背背作文,政治也得背,我是真不喜欢背东西,脑子不太好使。

 

2025-01-16

写了一个简单的shell脚本来一键运行所有的cpu-tests/tests中所有的程序并获得输出的结果。

但是输出是有瑕疵的,有大神可以改成自己喜欢的方式

#!/bin/bash

directory=路径
for file_n in ${directory}/*
do
    f_name=`basename $file_n .c`
    output=$(make ARCH=$ISA-nemu ALL=$f_name run)
    last_line=$(echo "$output" | tail -n 1)
    echo "$last_line" >> all_result.txt
done

clear
cat all_result.txt
rm all_result.txt

但是发现,输出好像除了dummy都是pass,就很奇怪,我还在看为什么

 

posted @ 2024-10-12 23:42  euphria  阅读(167)  评论(0)    收藏  举报