2020龙芯杯知识汇总

方便明年卷土重来

Posted by Jackson on August 21, 2020

2020 龙芯杯知识汇总

1. 环境搭建

1. vivado下载

​ 之前学校实验用的是modelsim + Quartus,所以对vivado不是很熟悉,官方要求下载vivado2019.2,下载时选择webpack版本(放心,够比赛用了),webpack版本是免费的,别的都有免费试用期限。

​ 详见发布包《A06_vivado安装说明》。

2. 交叉编译工具链安装

交叉编译是在一个平台上生成另一个平台上的可执行代码 —-百度百科

​ 这个交叉编译工具链是用来干什么呢?

​ 答:将采用MIPS汇编语言写的汇编代码翻译成二进制码,但由于大家的机器一般都是x86CPU,上面安装的编译器是将x86汇编代码翻译成x86二进制吗,所以我们就需要一个交叉编译工具链来为我们做这件事情。官方提供了工具包和安装方式

image-20200821151209093

​ 这里需要额外说明的一点是,当我完成了途中三步后,输入mipsel-linux-gcc -v命令,系统提示No such file or directory,但是在opt/gcc-4.3-ls232/bin目录下是可以看到这个文件的,如下图(提示:文件上面带星号表示可执行),最后查到了解决方案,原因是系统位数与该可执行文件需要的lib库位数不匹配。

image-20200821151504053

2. CPU

1. 前期准备

此处要求先将去年的发布包下载下来

  1. 组织目录格式
    • src //存放verilog源文件
      • cache
      • cpu
      • tlb
    • testbench //存放一些自己写的激励文件
    • doc //存放文档
  2. 打开项目,Add Directory将src文件夹加载进项目

  3. 连接板子(linux)

    一般来说,你在ubuntu上安装好了vivado,想把程序下载到fpga板子上进行debug的时候,通常会面对vivado无法识别板子的问题,这种问题在于,你没有相应的驱动。具体怎么解决如下:

    首先,你需要找到一个文件夹叫做install_script

    这个文件夹的位置在你安装vivado的文件下,题主的vivado安装在/vivado_install 目录下,所以题主运行指令

    ​ cd /vivado_install/SDK/2018.1/data/xicom/lin64

    找到文件夹 install_script

    运行命令:

    sudo cp -i -r install_script /opt

    进入文件夹

    cd /opt/install_script/install_drivers

    运行

    ./ install_drivers

    或者

    ./install_digilent.sh

    然后重启vivado就可以愉快的玩耍了

2. CPU编写

  1. 乘法器用IP核,dsp实现比较快
  2. count两个周期数加1
  3. CP0协处理器中有些寄存器的位是不可写入的
  4. 写CP0还有HILO都要放在WB或EX阶段,因为如果触发异常我们在Ex阶段处理,在此之前不能改变存储器的状态
  5. 分支预测用BTB或Branch cache效率会更好?(听群里讨论)
  6. TLB比较可以用手动树形结构提高效率(听群里讨论)
  7. Axi写的时候当burst传输在上板的时候rvalid位不是一直拉高的,有可能是一直拉高几次,然后降低,然后再拉高,要注意仿真和上版是有区别的

3. 功能测试

参考功能测试说明_v0.01.pdf

  1. 仿真

  2. 综合

  3. 实现并检查时序,确保implementation之后的wns为非负的,(在线调试时为负也没关系,应该是可以的)

    如果发现实现时时序不满足,则在 Verilog 设计里调优不满足的路径(点击wns后面的蓝色的数字,他会帮你找出不满足时序的路径),或者降低 SoC_lite 的运行 频率,即降低 clk_pll模块的输出端频率(wns其实就是1/频率 - 最耗时路径所花的时间)

  4. 上板

    1. 记得测试在不同时延下,是否都能通过
    2. 上板不过先看仿真,实在不行上板在线调试

4. 记忆游戏

参考功能测试说明_v0.01.pdf

  1. 实现并检查时序
  2. 上板
    1. 上板不过只能在线调试

5. 系统测试

参考系统测试说明_v0.01.pdf

  1. 下载minicom
  2. 了解minicom用法(ctrl + a 然后 shift + z可以查看minicom功能)
    1. sudo minicom -s配置minicom
      1. ll /dev/ttyUSB* 查看FPGA连接号
    2. 如何传输文件
      1. cd切换目录到你想要传输的文件所在的目录下(例:团队发布包的kernel目录下,也就是kernel.bin所在的目录),否则到时候就要输入绝对路径,很麻烦。
      2. sudo minicom运行minicom
      3. 按下FPGA的rst键,看到欢迎信息
      4. 按下x键,它会显示CCCCCCCCCCCC字符表示等待传输
      5. ctrl + a 然后 shift + s
      6. 选择xmodem
      7. 选择prev
      8. 输入文件名字(例:kernel.bin)
      9. 等待传输完成,退出minicom,如果不退出很可能之后FPGA通过串口发来的信息会显示在minicom上。
  3. 开始系统测试
    1. 下载programmer_by_uart.bit到FPGA中
    2. 通过minicom传输kernel.bin(记得重新编译一下)
    3. 下载自己的cpu的bit文件
    4. 运行term.py(需要下载pyserial,这个好像也有坑,但我不记得怎么解决了)
    5. 按FPGA的rst键和term程序交互
    6. 系统测试不过智能上板在线测试

坑:系统测试如果运行某个程序(好像是第三个矩阵乘法)显示supervisor reported an exception during execution,有可能是你没实现mult指令(官方只让实现了mul指令,而程序里面用到了mult)。

image-20200821171505623

6. 性能测试

参考性能测试说明_v0.01.pdf

  1. 注意最左侧拨码开关调上显示的是系统时钟,调下显示的自己CPU时钟,初赛只关注系统时钟,所以记得拨上去

3. 资源汇总

  1. 龙芯杯wiki

    1. 往年ppt
    2. 发布包
    3. 其他资源
  2. 书籍

    我的博客