zoukankan      html  css  js  c++  java
  • ahb2apb和apb2apb async bridge

    AHB 3.0目前不支持security world.

    AHB到APB的async bridge主要包括三个部分:

    1)AHB domain

        1)产生信号hactive = HSEL & HTRANS[1];新的传输地址有效

           HTRANS的第一位表示一个新的seq或者连续的transfer

           HTARNS的第零位表示一个idle或busy的transfer

           用ahb的clock,寄存一拍

           always @(posedge HCLK or negedge HRESETn)     

                      if(!RESETn)     

                      else if(HREADYin)           

                            ahb_active = hactive

         2)产生信号haccess = HREADYin & hactive;可以接受数据传输

          HREADYin信号表示slave已经ready。

          用ahb的clock,寄存一拍

          always @(posedge HCLK or negedge HRESETn)     

                     if(!RESETn)     

                     else            ahb_access = haccess

         3)用ahb的clock,寄存write和addr

           always @(posedge HCLK or negedge HRESETn)     

                      if(!RESETn)     

                      else if(haccess)           

                                ahb_write = HWRITE           

                                ahb_addr = HADDR

         4)用ahb的clock,寄存wdata

            产生信号ahb_wdata_ld = ahb_access & ahb_write

            always @(posedge HCLK or negedge HRESETn)     

                       if(!RESETn)     

                       else if(ahb_wdata_ld)           

                                 ahb_wdata = HWDATA

         5)产生信号HREADYout = ~ahb_active|apb_ack_pls

            产生信号HRDATA = apb_rdata

    2)AHB clock domain和APB clock domain的handshake

         根据ahb_access信号,产生ahb_req信号,同时在apb_clk domain中进行sync

         always @(posedge HCLK or negedge HRESETn)     

                    if(!RESETn)     

                    else if(ahb_access)           

                      ahb_req = ~ahb_req

         always @(posedge PCLK or negedge PRESETn)          

                    if(!RESETn)     

                    else           

                        ahb_req_sync1 = ahb_req           

                        ahb_req_sync2 = ahb_req_sync1           

                        ahb_req_sync3 = ahb_req_sync2

         ahb_req_pls = ahb_req_sync2^ahb_req_sync3

    根据ahb_reg_pls_d信号,产生ahb_ack信号,同时在ahb_clk domain中进行sync

           always @(posedge PCLK or negedge PRESETn)     

                      if(!RESETn)     

                      else if(ahb_reg_pls_d)           

                            ahb_ack = ~ahb_ack

          always @(posedge HCLK or negedge HRESETn)          

                      if(!RESETn)     

                      else           

                           ahb_ack_sync1 = ahb_ack           

                           ahb_ack_sync2 = ahb_ack_sync1           

                           ahb_ack_sync3 = ahb_ack_sync2

         ahb_ack_pls = ahb_ack_sync2^ahb_ack_sync3

    3)APB domain

    寄存ahb_req_pls一拍

          always @(posedge PCLK or negedge PRESETn)     

                     if(!RESETn)     

                     else            ahb_req_pls_d = ~ahb_req_pls

    PWRITE/PADDR/PWDATA 直接连接到AHB的reg中,

    PSEL = ahb_req_pls | ahb_req_pls_d

    PENABLE = ahb_req_pls_d

    apb_rdata的赋值

    apb_rdata_ld = ahb_req_pls_d & ~ahb_write

           always @(posedge HCLK or negedge HRESETn)     

                      if(!RESETn)     

                      else if(apb_rdata_ld)           

                              apb_rdata = PRDATA

    apb2apb的async bridge:

    1)req由master端产生,在enable阶段有效,传递到slave端,有效一个cycle,用来锁存master端的addr/strb/data信号到slave的寄存器中。

    2)ack信号由slave端产生,在sready有效且enable有效情况下产生。有效一个cycle,锁存rdata和resp。

    3)Latch表示只含有if()的always模块,被综合为带clock gate的FF.

  • 相关阅读:
    python matplotlib 绘图
    python set add 导致问题 TypeError: unhashable type: 'list'
    python 子类继承父类的__init__方法
    python 内存监控模块之memory_profiler
    git log 常用命令
    wireshark使用教程
    python os.path模块
    Linux crontab 定时任务
    linux环境变量LD_LIBRARY_PATH
    Linux的ldconfig和ldd用法
  • 原文地址:https://www.cnblogs.com/-9-8/p/5733331.html
Copyright © 2011-2022 走看看