找回密码
 注册
关于网站域名变更的通知
查看: 447|回复: 1
打印 上一主题 下一主题

FPGA的边沿触发和电平触发中断模式

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-10-23 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    ) D4 t" s( k- p3 A
    FPGA的边沿触发和电平触发中断模式
           所有的入门的屌丝都是知道处理器中断模式是两种是边沿触发和电平触发。

    " L3 s; T# R* j1 @/ e2 C& H1 L* H
           边沿触发用的很少,一般还是以下降沿触发为主。当设备完成一个数据后,会输出一个下降沿,触发处理器。而电平触发,是输出一个电平,并且会保持这个电平, 至到系统处理或者清除该中断后才会输出另外的电平。
    1 |' y# J3 z7 d
           在fpga经常会遇到AXI总线或者AVALON总线,总线接口经常是电平触发。如果fpga一端是主控一端。需要设计中断触发状态机以及清除中断操作。

    2 Z% M2 F1 R: ]* I. U
    always@(clk)
    begin
    if(rst)
    ...
    else if(irq)
    state <= irq_state;
    else case (state)
    ....
    end

    / T  a) j# B  q8 r1 W; S
           上述代码,目测是没有问题,但是问题就是irq是电平触发,代码会一直在if(irq)中,不会进入case语句,这个会导致irq一直没办法清除,一直代码死在if(irq)中。

    ) T/ i8 c5 w4 U0 ~- {: d. Z% |
           解决上述办法,一个是得到irq边沿触发,如果高电平有效,就是上升沿。如果是低电平,就是下降沿。
    . P" E/ c+ M  r9 U
    所以代码就是
    if(rst)
    else if(irq_rising)
    ...
    else case(state)

    4 n. [0 t. I4 K  c, M# g
           这个状态也会导致一个问题,就是如果进入正常的状态,转移到这个状态,会导致数据全部变乱。当然,用轮询状态机会好点。也就是说在状态机中使用轮询irq是否高电平。
    + ^' P1 {- V% `( k4 z2 {! c  b
    case(state)
    idle :
    normal_irq_sw:
    begin
    if(normal_req)
    。。。
    else if(irq)
    state <=irq——state
    end
    % \, J# V5 q+ i, O
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-6 15:07 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表