Giter Site home page Giter Site logo

nju-cs-sys / archlab2015 Goto Github PK

View Code? Open in Web Editor NEW
9.0 6.0 5.0 1.84 MB

2015秋季学期组成原理实验 & 2013级系统方向综合实验 - NPC

Verilog 78.55% SystemVerilog 7.14% Assembly 0.28% C 10.84% Makefile 0.61% Python 0.66% Scala 1.88% Ruby 0.04%

archlab2015's Introduction

ArchLab2015

2015秋季学期组成原理实验

调试工具

SPIM

在项目根目录下执行 ./test.py testcase/xxx.c spim 可以在 tools 目录下生成 spim 可以使用的汇编代码文件.

将通过 ./sim/pipeline_test.v 仿真获得的 PC 流和执行 spim 获得 PC 流用 ./tools/cmp.py 进行比较, 观察两个执行流基本块的一致性, 判断是否发生错误以及定位错误起始基本块.

QEMU

在项目根目录下执行 ./test.py testcase/xxx.c qemu, 在完成 ram.txt 的生成后, 会启动 qemu-mipsel 以及 gdb 进行调试. 主要用以单步执行观察执行流和数据的正确性.

archlab2015's People

Contributors

angelhunt avatar chenyueqi avatar cslearner avatar mrwhoami avatar shinezyy avatar wonicon avatar xuanbq avatar yuehan21ql avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

archlab2015's Issues

CU在MEM段是气泡时保存EPC的策略存在问题

现在是用上一次经过MEM段,即正确提交的指令作为EPC的值。
但是问题是此时寄存器组状态已经不是这条指令执行时的状态了,重新执行这条指令可能造成问题。
有必要可能要逐流水段向前查看可以作为EPC保存的指令PC。

为什么数据口和指令口的行为不一样?

原来的 block ram, A 口数据 B 口指令, 对 A 口的操作加了延迟, 而对 B 口实际上是没有加延迟的.
我将 AB 口替换, 并且数据口也改为只读的形式 (测试样例暂时不需要写操作), 但还是会出现数据没读出来而进入不期望的分支. 同样的电路, 只要换成 block ram 驱动时钟 N 倍频率的时钟, 就没有问题.

数据口出现问题是可以理解的, 可能延迟没有加对, 但是为什么指令口能如此正常地工作?

中断与气泡

在发生中断保存EPC时,EX或者MEM段是气泡的情况下会不会有干扰?

100MHZ 的 clk_from_ip 也无法满足时序

cpu_interface 的 clk_from_ip 端口如果连接 MMCM 生成的 clk_from_ip 信号,会产生不满足时序的问题,即便修改 IP 核使得 clk_from_ip 与 clk_from_board 的频率一致。
现在直接连接 clk_from_board 不会产生时序问题,但是频率一样的 clk_from_ip 也无法满足?

为什么 COUNT_FINISH 是 1?

status.vh 第 11 行

假设只发生了 I-cache miss,在下个存储器周期C中,状态从 STAT_NORMAL 转移到 STAT_IC_MISS,且 counter 赋值成 0. 在周期 C 中,cache_control 生成 counter_next 信号为 1. 那么在下次存储器有效(ram_rdy)的周期 D 中,cache_manage_unit 会将 counter 更新成 1,然后 cache_control 中观察到 counter_in 为 CONUT_FINISH,生成下一状态为 STAT_NORMAL。于是只写了 0 和 1 两个字?

Memory Stall 对转发的影响

比如WB段写回寄存器的数据可以转发给EX段,但是此时发生了Memory Stall,WB的写回操作虽然有充分的时间执行完成,但是由于WB段在接下来的周期里被MEM段的气泡填充,导致转发单元认为不需要转发,使用原来的值,但是这个原来的值存在IDEX寄存器里,而不是GPR里那个已经被写回的正确的值。

不正常的循环

观察预测器给出的 pc, 发现后面一直在 4 -> 8 -> 12 循环, 在一开始 pc = 16 和后面的 pc = 4 时, bpu_w_en 都是有效的.
相关汇编代码

 0:   3c07ffff    lui a3,0xffff
 4:   3c08ffff    lui t0,0xffff
 8:   00084402    srl t0,t0,0x10
 c:   00e8d825    or  k1,a3,t0
10:   3c070000    lui a3,0x0

初始化文件

@0 3c07ffff 
@1 3c08ffff 
@2 00084402 
@3 00e8d825 
@4 3c070000 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.