Menu Close

RISC-V 定时器及中断(1)读写定时器中断寄存器(下)

主讲老师:William、YVONNE、Tim Zhuang

VIP专享视频
立即购买 升级VIP
%title插图%num
Posted in 文章

3 Comments

  1. wangff

    学习本节课后有几点收获,1、在exu_lsu模块中对各个外设进行读操作时,使用了2次寄存器片选合并,可反复揣摩加以运用;2、ls_rb_d信号用于对所有外设片选后的输出值,o_wb_data信号用于最终回写到目标寄存器。

    在学习中发现一些问题,请老师解答:
    1、截取fii_timer_lsu模块中的部分代码:if(i_tm_ctrl_cs) o_tm_ctrl <= i_sft_timer_din; 此处是将cup的数据写入timer控制寄存器,但是经过查阅timer控制寄存器的各bit位情况,发现timer控制寄存器只有Bit0(Timer start/stop)、Bit31(Timer 模块 enable)两个bit位可以写入,Bit[30:1]位置是保留位,请问老师这里的“o_tm_ctrl <= i_sft_timer_din; ”代码是不是写错了,是否需要改为类似软件中断寄存器的赋值方式“o_sft_int_v <= { 31'b0, i_sft_timer_din[ 0 ] };”?

    • Yvonne

      是的,根据地址图的定义,o_tm_ctrl <= {i_sft_timer_din[31],30'b0,i_sft_timer_din[0] }; 是正确的实现方式。 在代码中,即使是o_tm_ctrl <= i_sft_timer_din; 全部写入,但你可以查找一下,真正使用的只有tm_ctrl的最高位[31]和最低位[0],所以也是实现了同样的目的。

发表评论

相关链接