北京理工大学电路与电子线路设计实践

RiskV相关设计

我是按照老师的知道一步一步做的,仅供参考。

TASK1:

1)修改 timer.v、timer_int的main.c timer.h; 实现simple例程中的sum累加功能(第一个for循环,sum终值5050)。

2) timer.v中添加i、sum两个寄存器,能将cpu中每一步计算的i、sum值下传至timer.v模块。

3)GTKwave软件中可直接观察到i、sum这两个寄存器的值,从而看到sum循环累加的完整计算过程。

4)timer的main.c中添加对sum最终累加值的判断功能,在cmd的仿真命令执行后,能看到pass/fail提示。

TASK2:

1) 将simple例程中的sum累加功能,移植到verilog编写的硬件模块中(例如timer.v),从而将软件计算变为硬件计算,cpu配置并启动硬件模块进行sum累加。

2) main.c中要添加对硬件模块内寄存器值的读取功能,实现硬件模块完成sum累加后,通过中断触发cpu读取计算结果并进行校验(步骤4)。

3) GTKwave软件中可直接观察到i、sum这两个寄存器的值,从而看到sum循环累加的完整计算过程。

4) timer的main.c中添加对sum最终累加值的判断功能,在cmd的仿真命令执行后,能看到pass/fail提示。

注:task2中所用算法可自行更换,报告首段需写明算法作用,以及选用的原因。不可直接照抄第一批次的task2。

Task1:

代码在原有基础上添加,故粘贴修改部分

main.c文件添加代码(累加求和部分)

//添加变量

    int i;

    int sum = 0;

    // sum = 5050

    for (i = 0; i <= 100; i++) {

        sum += i;

        TIMER0_REG(TIMER0_I) = i;

        TIMER0_REG(TIMER0_SUM) = sum;

    }

//结果判断函数

    if (sum == 5050)

        set_test_pass();

    else

        set_test_fail();

return 0;

timer.h添加地址定义

#define TIMER0_I  (TIMER0_BASE + (0x0C))

#define TIMER0_SUM  (TIMER0_BASE + (0x10))

timer.v添加寄存器以及数据写入

//设定总线地址,以方便映射

    localparam REG_I = 5'hc;

localparam REG_SUM = 5'h10;

//添加sum和i两个寄存器

    reg[31:0] timer_i;

reg[31:0] timer_sum;

// write regs

    always @ (posedge clk) begin

        if (rst == `RstEnable) begin

            timer_ctrl <= `ZeroWord;

            timer_value <= `ZeroWord;

        end else begin

            if (we_i == `WriteEnable) begin

                case (addr_i[4:0])

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值