Avalon® 接口规范知识文档(v2018.09.26)

Avalon**®**** 接口规范 第1节详解**

++本部分对《Avalon++ ++®++ ++接口规范》文档第4-5页的"1. Avalon++ ++®++ ++接口规范简介"章节进行详细梳理与总结。在完整保留原文信息的基础上,增加了对核心概念的解释、设计哲学的分析以及各部分逻辑关联的阐述,以构建一个易于学习和理解的系统性知识框架。++

1.1 文档定位与核心目的

该文档是Intel(原Altera)为其FPGA设计套件(Intel® Quartus® Prime)提供的官方总线协议规范,版本对应18.1更新。Avalon接口是一套开放的标准 ,旨在为构建在Intel FPGA内部的片上系统 提供一套标准化的组件互连方案。

  • 核心价值 :Avalon接口通过定义一系列标准的通信协议,极大地简化了系统设计。它使设计者能够像"搭积木"一样,将不同的功能模块(IP核)快速、可靠地连接起来,无需为每个连接关系重新设计复杂的握手和时序逻辑。
  • 开放性 :文档明确指出,使用或基于Avalon接口进行产品和开发无需许可(license)和版税(royalty)。这促进了基于该标准的IP生态的发展。
  • 目标读者:阅读本规范后,设计者应能判断何种接口适合其设计的组件,并为实现特定功能选择正确的信号角色。
1.2 Avalon接口家族概览(七种核心接口类型)

Avalon接口并非单一协议,而是一个协议家族,针对不同的数据传输和控制需求进行了优化。文档定义了以下七种接口,一个组件可以包含其中任意数量和任意类型的多个接口实例。

  1. Avalon存储器映射接口
    • 英文:Avalon Memory-Mapped Interface
    • 缩写:Avalon-MM
    • 核心功能 :基于地址的读/写接口。主设备(Master,如CPU、DMA)通过发起包含目标地址的读写事务,从从设备(Slave,如存储器、寄存器文件、外设)读取或向其写入数据。
    • 典型应用 :连接微处理器、存储器控制器、定时器、UART等。它是实现主-从式控制与数据访问 的基石。
    • 补充理解:可以将其类比于计算机系统中的内存总线。主设备如同CPU,从设备如同内存或I/O端口,所有操作都通过唯一的地址来寻址目标。
  2. Avalon流接口
    • 英文:Avalon Streaming Interface
    • 缩写:Avalon-ST
    • 核心功能 :支持单向、高速数据流传输的接口。专注于数据本身的移动,而非基于地址的访问。
    • 典型应用 :视频流、网络数据包、数字信号处理(DSP)数据通路。特别适用于多路复用流、数据包和需要高吞吐量的场景
    • 补充理解:可以将其类比于一个流水线或传送带。数据从源头(Source)持续流向目的地(Sink),传输的时序和流控是关键,而非每个数据单元的精确地址。
  3. Avalon管道接口
    • 英文:Avalon Conduit Interface
    • 核心功能 :一种通用、灵活的接口类型 ,用于承载那些不适合归类到上述标准接口的单个信号或信号组
    • 典型应用
      • 片内连接:连接系统内部两个模块间的特定控制或状态信号。
      • 信号导出:将信号导出到FPGA顶层模块,以连接到其他逻辑或FPGA的I/O引脚。
    • 补充理解:这是一个"兜底"或"直通"接口。当信号行为非常特殊,或者你只是想将一组信号从一个模块传递到另一个模块时,就使用Conduit。它本身不定义复杂的协议。
  4. Avalon三态管道接口
    • 英文:Avalon Tristate Conduit Interface
    • 缩写:Avalon-TC
    • 核心功能 :专为与片外器件 连接而设计的接口,支持三态逻辑信号复用
    • 核心优势 :多个外部外设可以分时复用 FPGA的引脚,从而减少FPGA所需引脚数量和PCB板走线数量
    • 典型应用:连接片外的存储器(如Flash、SRAM)、ADC/DAC或其他共享总线的外设。
  5. Avalon中断接口
    • 英文:Avalon Interrupt Interface
    • 核心功能 :允许一个组件(通常是Slave)向另一个组件(通常是Master,如处理器)异步发送事件通知信号
    • 典型应用:外设在完成一次操作(如DMA传输结束、数据准备好、错误发生)时,中断处理器。
  6. Avalon时钟接口
    • 英文:Avalon Clock Interface
    • 核心功能 :专门用于驱动或接收时钟信号。定义了时钟输入和时钟输出两种角色。
    • 典型应用:锁相环、时钟发生器、需要外部时钟源的模块。
  7. Avalon复位接口
    • 英文:Avalon Reset Interface
    • 核心功能 :专门用于提供复位连接,确保系统各部分能同步或异步地进入已知的初始状态。
1.3 关键设计理念:属性与信号角色

为了保持接口的灵活性可配置性,Avalon规范引入了两个核心抽象概念:

  1. 接口属性
    • 定义 :用于描述和配置接口行为的参数。每个接口类型都有其特定的属性集。
    • 示例
      • maxChannel(Avalon-ST属性):指定该流接口支持的最大通道数量。
      • clockRate(Avalon Clock属性):指定时钟信号的频率。
    • 作用:属性使得IP核的设计者和集成者可以"微调"接口的行为,而不必改变其底层硬件描述语言代码。在Platform Designer(Intel的系统集成工具)中,这些属性通常以图形化参数的形式呈现。
  2. 信号角色
    • 定义 :定义了接口上每个引脚的功能和行为。一个接口由一组信号角色构成。
    • 关键特性可选性。绝大多数信号角色都是可选的。设计者只需选择实现其组件功能所必需的那些信号。
    • 示例
      • 一个简单的只读存储器Slave可能只需要readdataaddress
      • 一个支持突发传输的Slave则需要额外添加burstcountbeginbursttransfer等信号角色。
      • 一个支持数据包的Avalon-ST Source需要添加startofpacketendofpacket信号角色。
    • 作用:这种"按需取用"的机制极大地提高了设计的效率和资源的利用率。它允许从简单到复杂的各种组件共享同一套接口定义,并通过互连架构自动适配。
1.4 系统设计示例

文档通过两个复杂的系统设计示例,生动展示了各种Avalon接口在真实场景中如何协同工作。

示例一:以Nios**®**** II处理器为核心的系统**

该系统包含以太网控制器、分散集合DMA、PLL、DDR3控制器等。其中:

  • Avalon-MM:Nios II处理器通过它访问片上组件的控制和状态寄存器。
  • Avalon-ST:分散集合DMA通过它高速发送和接收数据流。
  • Avalon Conduit:DDR3控制器通过它访问外部DDR3存储器(此处展示了Conduit也可用于连接高性能片外存储器控制器,与Avalon-TC不同,它通常不涉及三态复用)。
  • Avalon-TC:用于访问片外存储器(如Flash)。
  • Avalon Interrupt:多个组件向Nios II处理器发送中断。
  • Avalon Clock:PLL接收参考时钟并产生多个时钟源。

示例二:包含外部处理器和PCIe的系统

该系统展示了Avalon接口在更异构环境中的应用,包括外部处理器、PCIe端点、外部存储器等。其中:

  • Avalon-MM:外部处理器通过桥接访问片上组件;PCIe根端口控制PCIe端点。
  • Avalon Interrupt:外部处理器处理来自多个片上组件的中断。
  • Avalon-TC:Flash和SRAM共享FPGA引脚。
  • Avalon Conduit:SDRAM控制器访问外部SDRAM。

示例的核心启示 :一个复杂的片上系统是多种Avalon接口的有机组合。Avalon-MM和Avalon-ST 通常是数据传输的骨干,前者负责控制路径和随机访问,后者负责高速数据路径。Avalon Clock/Reset 提供基础设施,Avalon Interrupt 提供事件机制,Avalon Conduit/TC则负责与特定功能或片外世界的连接。Platform Designer工具的核心任务就是根据这些接口的定义,自动生成正确的互连逻辑,将这些"积木"粘合在一起。

Avalon**®**** 接口规范 第2节详解**

++本部分对《Avalon++ ++®++ ++接口规范》文档第8-10页的"2. Avalon时钟和复位接口"章节进行详细梳理与总结。此章节定义了为整个Avalon片上系统提供同步基准和初始化控制的++ ++基础设施接口++ ++,是确保所有组件正确、稳定工作的基石。++

2.1 章节概述与设计哲学

Avalon Clock和Reset接口为系统中的其他同步接口 (如Avalon-MM, Avalon-ST, Avalon Interrupt)提供时序参考初始状态 。其核心设计思想是明确性与可关联性

  • 明确性:每个时钟或复位信号都通过一个独立的接口来声明其角色(输入或输出)、频率和同步特性,使得系统集成工具能够清晰地理解和管理时钟/复位域。
  • 可关联性 :通过associatedClockassociatedReset属性,任何同步接口都必须明确绑定到一个特定的时钟和复位源。这是Platform Designer能够自动构建正确互连逻辑的关键。

一个组件(如PLL)可以同时包含时钟输入和多个时钟输出接口。

2.2 Avalon Clock Sink(时钟接收器)

此接口定义了一个组件接收的时钟输入

2.2.1 信号角色

  • **clk**
    • 方向Input
    • 宽度:1
    • 必要性必需
    • 描述 :输入的时钟信号。它为组件的内部逻辑以及该组件上所有相关联的同步接口提供同步时序基准。

2.2.2 接口属性

  • **clockRate**
    • 默认值:0
    • 合法值:0 到 2^32-1 (Hz)
    • 描述
      1. **clockRate = 0**:表示此时钟接收器支持任何频率的输入时钟。这是最通用的设置。
      2. **clockRate ≠ 0**:表示此组件设计在特定频率 下工作。当Platform Designer连接一个时钟源到此接收器时,如果两者声明的clockRate不匹配,工具会产生警告。这有助于在设计早期发现潜在的时钟配置错误。
    • 补充理解 :这是一个"期望"或"约束"属性。设为非零值是一种设计自检机制,确保IP核在预期的频率下被使用。例如,一个UART核可能设计为仅在50MHz下工作,即可将其clockRate设为50000000。

2.2.3 关联时钟接口

  • 核心概念 :每个同步接口(Avalon-MM, Avalon-ST, Interrupt)都有一个名为 **associatedClock** 的属性。
  • 作用 :该属性必须被设置为组件上某个Clock Sink接口的名称。这明确声明了"本接口的所有操作由哪个时钟信号来同步"。
  • 重要性 :这是多时钟域系统设计的基础。Platform Designer根据此关联关系,在连接不同组件时,自动插入必要的跨时钟域同步逻辑(如FIFO、同步器),或在时钟域不兼容时报错。
2.3 Avalon Clock Source(时钟源)

此接口定义了一个组件驱动的时钟输出,通常由PLL、时钟发生器或直接引出的输入时钟产生。

2.3.1 信号角色

  • **clk**
    • 方向Output
    • 宽度:1
    • 必要性必需
    • 描述:输出的时钟信号。

2.3.2 接口属性

  • **associatedDirectClock**:
    • 描述 :指定直接驱动 此时钟输出的时钟输入接口的名称。例如,一个不改变频率的"直通时钟"模块,其Clock Source的此属性应指向其Clock Sink。
  • **clockRate**:
    • 默认值:0
    • 描述 :声明此时钟输出信号的频率(Hz)。clockRateKnown属性为true时,此值应为准确频率。
  • **clockRateKnown**:
    • 默认值false
    • 描述 :指示此时钟输出的频率是否为一个已知、固定的值 。如果为true,系统中的其他组件(如需要特定时钟的外设)可以根据此频率进行优化或验证。
2.4 Reset Sink(复位接收器)

此接口定义了一个组件接收的复位输入,用于将接口或组件内部逻辑初始化为预定状态。

2.4.1 信号角色

  • **reset****或 ****reset_n**:
    • 方向Input
    • 宽度:1
    • 必要性必需
    • 描述 :复位信号。reset为高电平有效,reset_n为低电平有效。其同步属性(异步/同步)由synchronousEdges参数定义。
  • **reset_req** (可选):
    • 方向Input
    • 描述复位请求 信号。这是一个在异步复位实际生效(reset置位)之前就提前有效的"预警"信号。
    • 关键用途 :防止片上存储器(如ROM、RAM)在异步复位发生时的瞬间地址线变化,导致数据损坏。当reset_req有效时,组件可以提前禁用时钟使能或锁存地址,为安全的复位做好准备。

2.4.2 接口属性

  • **associatedClock**:
    • 描述 :指定与此复位信号同步操作相关联的时钟。这是定义复位同步行为的前提。
  • **synchronousEdges**:
    • 默认值DEASSERT
    • 合法值NONE, DEASSERT, BOTH
    • 详细解释 (此参数对设计稳定性至关重要):
      1. **NONE**:复位信号完全异步。组件内部自行处理复位信号的同步。这意味着复位生效和撤销都与时钟边沿无关,可能存在亚稳态风险,需在组件内部解决。
      2. **DEASSERT**复位置位(有效)异步,复位撤销(无效)同步。这是最常见的配置。系统可以立即响应复位请求,但复位释放时,会等待关联时钟的下一个上升沿,确保所有逻辑同时脱离复位状态,避免启动竞争条件。
      3. **BOTH**复位置位和撤销都同步。复位信号的有效和无效都只在关联时钟的上升沿被采样。这提供了最高的时序确定性,但复位响应会延迟至少一个时钟周期。
2.5 Reset Source(复位源)

此接口定义了一个组件驱动的复位输出,可由复位管理器、处理器或直接连入的复位输入产生。

2.5.1 信号角色

  • **reset****或 ****reset_n**:
    • 方向Output
    • 宽度:1
    • 必要性必需
    • 描述:驱动给其他组件的复位信号。
  • **reset_req** (可选):
    • 方向Output
    • 描述:使能复位请求生成。在复位信号实际置位前,此信号会先被置位,为下级电路提供预警。

2.5.2 接口属性

  • **associatedClock**:含义同Reset Sink。
  • **associatedDirectReset**:指定直接驱动此复位输出的复位输入接口的名称(例如,一个复位缓冲器)。
  • **associatedResetSinks**:指定一组复位输入,本复位源将对它们进行逻辑组合(如"或"操作)后生成最终的复位输出。常见于"复位同步器"组件,它汇集多个复位请求,产生一个全局复位。
  • **synchronousEdges**:含义同Reset Sink,定义了本复位源输出的同步特性。
2.6 关联复位接口
  • 核心概念 :每个同步接口(Avalon-MM, Avalon-ST)都有一个名为 **associatedReset** 的属性。
  • 作用 :该属性必须被设置为组件上某个Reset Sink接口的名称。这明确声明了"本接口的逻辑由哪个复位信号进行初始化"。
  • 重要性:确保在系统上电或全局复位时,所有接口逻辑能协同一致地进入初始状态。

Avalon**®**** 接口规范 第3节详解:Avalon存储器映射接口**

++本部分对《Avalon++ ++®++ ++接口规范》文档第11-31页的"3. Avalon存储器映射的接口"章节进行完整、深入的解读。Avalon-MM接口是系统控制与数据访问的核心,本节内容极为详尽,涵盖了从接口定义、信号列表到各种复杂传输模式的所有细节。++

3.1 Avalon存储器映射的接口简介

Avalon存储器映射接口是用于在主(Master)与从(Slave)组件之间实现基于地址的读写操作的标准协议。它是连接处理器、存储器和外设的控制中枢。

  • 核心特征 :通过唯一的地址来寻址目标从设备,并进行读写操作。主设备(如CPU、DMA控制器)发起事务,从设备(如RAM、Timer、UART、PIO)响应。
  • 复杂度范围 :接口设计灵活,可简可繁。
    • 简单接口:如SRAM接口,具有固定周期的读写传输。
    • 复杂接口:支持流水线、突发传输,用于连接高性能存储器(如SDRAM控制器)。
  • 接口独立性 :一个Avalon-MM接口(主或从)仅包含每个信号角色的一个实例 。信号角色是可选的,最低要求的从接口可以是只读(只需readdata)或只写(只需writedatawrite)。
3.2 Avalon存储器映射的接口信号角色

这是理解Avalon-MM协议的基础。所有信号可分为几大类,下面对关键信号进行详解。

1. 基本信号

  • **address**:地址总线。主设备 视其为字节地址(默认),必须与数据宽度对齐。从设备 视角则由addressUnits属性决定,通常互连(Interconnect)将主设备的字节地址转换为从设备的字地址。例如,从设备看到address=0即访问其第一个字。
  • **read****/ ****write**:读/写命令信号。主设备置位表示发起一次读或写传输。
  • **readdata****/ ****writedata**:读/写数据总线。宽度必须一致(如果两者都存在)。
  • **byteenable**:字节使能信号。宽度与数据总线字节数相同(如32位数据对应4位byteenable)。每位控制数据总线的一个字节(8位)通道。
    • 写操作:指定哪些字节被写入,未被使能的字节被从设备忽略。
    • 读操作 :主设备告知从设备它希望读取哪些字节。无副作用的从设备可忽略读操作的byteenable
    • 关键限制:所有被置位的字节使能必须是连续的。
  • **response**:2位响应信号。用于从设备向主设备报告传输状态。
    • 00(OKAY):成功。
    • 10(SLAVEERROR):从设备内部错误(如校验失败)。
    • 11(DECODEERROR):互连解碼错误(访问了不存在的地址)。
    • 01:保留。
    • 读响应 :每个readdata都伴随一个response。突发读会产生多个响应。
    • 写响应:每个写命令(或整个写突发)产生一个响应,在最后一个写数据传输后返回。

2. 等待状态与流控信号

  • **waitrequest**从设备流控的核心信号 。当从设备无法立即处理主设备的命令时置位,强制主设备保持当前地址和控制信号不变,直到waitrequest置低。从设备在复位期间应置位此信号以防死锁。
  • **lock**:锁定信号。主设备置位后,可在连续多个传输期间锁定对目标从设备的访问,防止其他主设备打断。常用于实现"读-修改-写"原子操作。

3. 流水线传输信号

  • **readdatavalid**可变延迟读传输的关键信号 。从设备置位时,表示当前readdata总线上的数据有效。支持流水线读的主设备必须包含此信号。
  • **writeresponsevalid**:可选信号。如果存在,从设备必须通过此信号置位来指示response总线上的值是一个有效的写响应

4. 突发传输信号

  • **burstcount**:突发计数。主设备在突发开始时驱动,表示此次突发包含的传输数量(burstcountUnits属性定义其单位是"字"还是"符号")。最大突发长度为2(burstcount位宽-1)。
  • **beginbursttransfer**已弃用警告。文档明确指出"不要使用此信号"。它由互连在突发的第一个周期置位,用以指示突发开始。从设备应通过内部计数来判断突发边界。
3.3 接口属性

属性用于配置接口的详细行为。以下是部分关键属性的解读:

  • **addressUnits**:定义address信号的单位。主设备默认为SYMBOLS(字节),从设备默认为WORDS(字)。这是主从视角差异的根源。
  • **maximumPendingReadTransactions**:定义从设备 可接受的最大未完成读事务数量,或主设备 可发起的最大未完成读事务数量。对于支持readdatavalid的从设备,此值必须大于0,且从设备必须用waitrequest防止超出此限制。
  • **burstOnBurstBoundariesOnly**:为true时,突发传输的起始地址必须是突发大小(字节数)的整数倍。这对连接某些外部存储器控制器很重要。
  • **linewrapBursts**:为true时,突发地址到达边界后回绕,而非递增。用于支持缓存行填充的处理器。
  • **readWaitTime****/ ****writeWaitTime**:固定等待状态周期数。是使用waitrequest动态流控的替代方案,提供可预测的延迟。
  • **waitrequestAllowance**高性能设计关键属性 。定义了waitrequest置位后,主设备还能继续发出的最大传输数(或从设备必须接受的传输数)。>0的值允许命令管道更深入,有助于提高fMAX
  • **associatedClock****/ ****associatedReset**:必须指向组件内对应的时钟和复位接口,定义了本Avalon-MM接口的同步基准。
3.4 时序与传输基本概念
  • 同步性 :所有信号与associatedClock的上升沿同步。
  • 传输:指一个数据字(或一组符号)的读或写操作,可能需要多个时钟周期。
  • 主-从对:在一次传输中交互的特定主接口和从接口。
3.5 传输类型详解

3.5.1 典型的读传输和写传输

核心机制是使用waitrequest。主设备置位地址和读/写信号启动传输。从设备若需准备,则置位waitrequest,主设备等待。从设备就绪后置低waitrequest,并在同一周期(对读)或下一周期(对写)完成数据传输。waitrequest可与读/写信号解耦,允许主设备在waitrequest为高时启动新传输并等待,这有助于打破组合逻辑环路,提升时序。

3.5.2 使用 **waitrequestAllowance**属性的传输

此属性用于优化高频率设计。当waitrequestAllowance = n > 0时:

  • 从设备在内部缓冲区快满时即可提前置位waitrequest,而不必立即停止主设备。
  • 主设备在waitrequest置位后,仍有n个时钟周期可以继续发送有效命令,之后才必须停止。
  • 这为主/从设备内部的流水线阶段提供了"缓冲",避免了waitrequest路径成为关键路径。文档给出了n=1n=2的详细时序图,并说明了主从设备allowance值的兼容性规则。

3.5.3 固定等待状态的读和写传输

从设备可通过设置readWaitTimewriteWaitTime属性来指定固定的等待周期数,而无需实现waitrequest逻辑。例如readWaitTime=1表示每次读传输在命令发出后,需要插入1个等待周期才能返回数据。这种方式简单,但缺乏动态流控的灵活性。

3.5.4 流水线传输

目标是提高吞吐量,允许在前一个读传输的数据返回之前,启动新的读传输。

  • 可变延迟流水线读 :从设备使用readdatavalid信号来指示readdata有效。从设备必须按接收读命令的相同顺序 返回数据。从设备用waitrequest控制待处理读命令的数量(不超过maximumPendingReadTransactions)。主设备可同时有多个未完成的读请求在从设备内部处理。
  • 固定延迟流水线读 :从设备通过readLatency属性指定一个固定的延迟周期数。互连在发出读命令后,经过readLatency个周期,自动采样readdata。从设备无需产生readdatavalid

3.5.5 突发传输

将多个数据传输组织成一个不可分割的单元,在突发期间锁定对从设备的访问,极大提高连续存取效率。

  • 通用规则 :主设备在突发开始时提供起始地址和burstcount。从设备在整个突发期间必须服务该主设备。
  • 写突发 :主设备连续提供burstcount个数据。write信号可以在突发中间置低以暂停,但不会终止突发。byteenable可以每周期变化。constantBurstBehavior属性控制地址和burstcount在突发期间是否需要保持稳定。
  • 读突发 :类似于可变延迟流水线读,但单个命令导致多个数据返回。从设备必须返回burstcount个有效数据,并通过对应次数的readdatavalid脉冲来标记。文档建议支持读突发的从设备应无读取副作用 ,因为互连可能会因byteenable=0而抑制某些读请求。
  • 换行突发:当地址到达突发边界时,回绕到起始边界地址,而非递增。常用于CPU缓存行填充,以优先返回请求的数据。

3.5.6 读和写响应

  • 顺序保证 :对同一个从设备,命令按发出的顺序到达,响应也按相同顺序返回。对不同从设备的命令,顺序无保证。
  • 响应共享response信号在读写间共享,因此同一周期不能同时提供读响应和写响应。
  • **minimumResponseLatency**属性:定义了命令发出到最早可返回响应之间的最小周期数。增加此值有助于主设备侧的时序收敛。兼容的接口可直接连接,否则需通过插入流水线寄存器来补偿差值。
3.6 地址对齐

互连只支持对齐的访问。主设备的地址必须是其数据宽度 的整数倍。例如,一个32位(4字节)宽的主设备,其合法地址是0x0, 0x4, 0x8...。主设备可以通过操作byteenable信号来实现对字内特定字节的访问(如地址0x2处写入2字节,byteenable=4'b1100)。

3.7 Avalon-MM从设备寻址与动态总线大小调整

这是互连自动处理主从数据宽度不匹配的机制。

  • 从设备数据宽度:必须是8, 16, 32, 64, 128, 256, 512, 1024比特之一。
  • 主设备宽 > 从设备宽:主设备的一次访问被拆分成多次连续的从设备访问。例如,32位主设备读16位从设备,会产生两次从设备读传输。
  • 主设备宽 < 从设备宽 :互连自动管理byteenable和数据通道。主设备读时,互连从从设备的宽数据中选取对应的字节/字给主设备。主设备写时,互连设置正确的byteenable,只写入从设备对应的部分。

文档通过一个详尽的表格展示了32位主设备访问8位、16位、64位从设备时,地址和数据的映射关系,清晰地揭示了动态调整的过程。

Avalon**®**** 接口规范 第4节详解:Avalon中断接口**

++本部分对《Avalon++ ++®++ ++接口规范》文档第32-33页的"4. Avalon中断接口"章节进行完整解读。此章节定义了用于在组件之间异步传递事件通知的标准机制,是构建响应式片上系统的关键++__。


4.1 中断发送器

中断发送器接口使一个组件(通常是履行特定功能的外设或从设备)能够向另一个组件(通常是负责系统控制的主设备,如处理器)发送中断请求信号。

4.1.1 Avalon中断发送器信号角色

  • **irq****或 ****irq_n**
    • 方向Output
    • 宽度:1 至 32
    • 必要性必需
    • 描述 :中断请求信号。发送器将此信号驱动至中断接收器。irq为高电平有效,irq_n为低电平有效。其宽度定义了该组件能够产生的中断类型或通道的数量 。例如,一个UART可能有两个中断源(发送完成、接收就绪),则其irq宽度为2,每位代表一个独立的中断。
    • 关键行为
      1. 同步性irq信号的时序必须与其associatedClock的上升沿同步。
      2. 独立性irq的置位/清零与组件上任何其他接口的传输无关。
      3. 保持性 :一旦置位,irq信号必须保持有效,直到在相关联的Avalon-MM从接口上通过软件(如清除状态寄存器)进行确认。这确保了中断不会在处理器响应前被错过。

4.1.2 中断发送器属性

  • **associatedAddressablePoint**:
    • 描述必须指向本组件上的一个Avalon-MM从接口的名称 。该从接口提供了可供处理器访问的状态/控制寄存器,用于查询中断原因、使能/禁用中断或清除中断挂起标志。这是连接中断事件与处理器服务例程的桥梁。
  • **associatedClock**:
    • 描述 :中断发送器与之同步的时钟接口的名称。发送器和接收器的此时钟可以不同,但跨时钟域的中断同步需要由系统互连或接收器处理。
  • **associatedReset**:
    • 描述:对中断发送器逻辑进行复位的复位接口的名称。
4.2 中断接收器

中断接收器接口使一个组件(通常是包含处理器的主设备)能够接收并处理来自一个或多个中断发送器的中断请求。

4.2.1 Avalon中断接收器信号角色

  • **irq**:
    • 方向Input
    • 宽度:1 至 32
    • 必要性必需
    • 描述 :中断请求输入向量。这是一个位宽为 **<n>**的向量 ,其中每一位直接、固定地映射到一个特定的中断发送器接口 。例如,irq[0]可能来自定时器,irq[1]来自UART。规范明确指出,此接口不对位向量中的比特赋予任何固有的优先级,优先级的处理完全由接收器组件(如中断控制器或处理器软核)决定。

4.2.2 中断接收器属性

  • **associatedAddressablePoint**:
    • 描述 :必须指向本组件上的一个Avalon-MM主接口的名称 。该主接口是处理器用于访问(读写)引发中断的那个associatedAddressablePoint(即发送器组件的Avalon-MM从接口)的路径。例如,Nios II处理器的中断接收器属性就指向其数据主端口。
  • **associatedClock** / **associatedReset**:
    • 描述 :含义同中断发送器。再次强调,接收器和发送器的associatedClock可以不同。

4.2.3 中断时序

文档通过图19清晰地说明了中断的优先级处理与嵌套行为,这是理解中断响应的关键。

  • 场景 :中断接收器(如处理器)正在执行int1_handler以服务低优先级中断int1。此时,更高优先级的中断int0到来。
  • 时序过程
    1. 中断置位int1首先置位,处理器开始为其服务。
    2. 高优先级中断到达 :在time0时刻,更高优先级的int0信号置位。
    3. 中断嵌套 :尽管int1的服务尚未完成(其handler仍在运行),中断接收器立即抢占 当前操作,转去执行更高优先级的int0_handlerint1_handler的执行被暂时挂起。
    4. 高优先级服务完成int0_handler执行完毕,在time1时刻,软件清除了int0的中断源,导致int0信号置低。
    5. 返回低优先级服务 :处理器返回到被挂起的 **int1_handler**,继续执行。
    6. 低优先级服务完成int1_handler执行完毕,在time2时刻清除中断源,int1信号置低。
  • 核心要点 :此时序图揭示了Avalon中断模型支持优先级中断和嵌套 。实际优先级的高低并非由irq向量的位序决定,而是完全由中断接收器组件内部的逻辑(如可编程中断控制器PIC) 来定义和管理。发送器只是声明事件,接收器负责仲裁和响应。
本节总结与应用关联

第4节定义了一个简洁而强大的中断信令机制。在实际的Platform Designer系统中:

  1. 连接 :一个中断发送器的irq输出端口直接连接到中断接收器的irq输入向量的某一位上。
  2. 处理流程
    • 外设(发送器)触发中断,置位irq[x]
    • 处理器(接收器)探测到中断输入变化,通过内部或外部中断控制器确定中断源和优先级。
    • 处理器通过其associatedAddressablePoint(Avalon-MM主接口)访问引发中断的外设的associatedAddressablePoint(Avalon-MM从接口),读写相关寄存器以确认原因、清除状态。
    • 处理器执行中断服务程序。
    • 程序清除外设的中断挂起位,外设随之置低irq[x]信号,完成一次中断循环。

此设计将中断的物理连线、事件产生与优先级管理、服务流程清晰分离,提供了高度的灵活性和可配置性。

Avalon**®**** 接口规范 第5节详解:Avalon Streaming接口**

++本部分对《Avalon++ ++®++ ++接口规范》文档第34-45页的"5. Avalon Streaming接口"章节进行完整解读。Avalon-ST接口是为单向、高速、流式数据传输设计的协议,是构建数据路径(Datapath)的核心,广泛应用于视频处理、网络包交换和数字信号处理等场景。++


5.1 术语和概念

理解Avalon-ST协议前,需明确其专用术语:

  • Avalon Streaming系统与组件:由多个通过Avalon-ST接口互连的功能模块(组件)构成,数据从源流向目的。
  • 源与宿接口 :数据从Source接口流出,流入Sink接口。连接一对源和宿接口即构成一个Connection
  • 背压 :一种流控机制,允许宿接口通过置位ready信号来通知源接口停止发送数据。这是可选的,用于应对缓冲区满或下游拥塞。
  • 传输与就绪周期 :一次Transfer是源到宿的单次数据与控制信息传递。一个Ready Cycle是宿接口能够接受一次传输的时钟周期。
  • 符号、节拍与通道
    • Symbol:最小数据单位,通常为字节。
    • Beat:单个时钟周期内在接口上传输的数据单元,可由一个或多个Symbol组成。
    • Channel:一条逻辑或物理数据路径,用于区分同一接口上交错传输的不同数据流。
  • 数据包:一组被同时传输、具有边界的数据和控制信号集合。使用数据包是可选的,由应用定义格式。
5.2 Avalon Streaming接口信号角色

Avalon-ST接口的信号角色按功能分组,均为高电平有效。

基本信号

  • **data**:承载传输的主体信息,宽度1-4096位。其格式由dataBitsPerSymbolsymbolsPerBeat等属性进一步定义。
  • **valid**源流控核心 。源置位valid,表示当前周期data及其他源到宿信号上的值有效。宿仅在valid置位的周期采样这些信号。
  • **ready**宿流控核心 。宿置位ready,表示其能够接受数据。结合readyLatency参数,共同定义何时为"就绪周期"。
  • **channel**:指示当前周期所传输数据所属的通道编号。使用此信号必须定义maxChannel参数。
  • **error**:一个比特掩码,标记当前数据传输中的错误条件。errorDescriptor属性定义每位对应的错误类型。

数据包传输信号(可选,但需成对使用):

  • **startofpacket****/ ****endofpacket**:由源置位,分别标记一个数据包的开始与结束。包之间无需空闲周期。
  • **empty**:仅当endofpacket置位时才有效,表示数据包最后一个节拍中无效(空)符号的数量。当每个周期传输多个符号且包长可变时必须使用。
5.3 信号排序和时序
  • 同步接口:所有传输与关联时钟的上升沿同步。为追求高频,建议源侧输出信号使用寄存器驱动。
  • 时钟使能 :Avalon-ST组件通常不包含时钟使能输入,因为validready信号已足以确定有效周期。如果内部使用时钟使能,必须确保接口时序符合协议。
5.4 Avalon-ST接口属性

这些属性精细地配置接口行为:

  • **associatedClock****/ ****associatedReset**:定义接口的同步基准。
  • **dataBitsPerSymbol**:定义每个符号的比特数(如8)。
  • **symbolsPerBeat**:定义每个节拍(周期)传输的符号数量。
  • **beatsPerCycle**高级特性,定义单个周期内传输的节拍数,可用于传输多个相关流。文档指出此特性极少使用。
  • **firstSymbolInHighOrderBits**:为true时,第一个符号(D0)位于数据总线的高位。
  • **maxChannel**:接口支持的最大通道数。
  • **readyLatency**关键属性 。定义了ready信号置位与valid信号可以置位之间的周期关系。若readyLatency = n,则ready在周期m置位,意味着周期m+n是一个"就绪周期"。
  • **readyAllowance**关键属性 。定义了ready信号置低后,宿接口还能接受的传输数量。用于实现更宽松的流控,提升时序性能。
5.5 典型的数据传输与信号详情

数据传输的核心是validready信号的握手。

  • **valid**:限定所有源到宿的信号。无valid输出的源在每个无背压的周期都提供有效数据。
  • **ready**:定义宿的接收能力。无ready输入的源不支持背压;无ready输出的宿永不要求背压。
  • **data**:由symbolsPerBeatdataBitsPerSymbol属性共同决定其布局。
  • **error**:任何周期为0表示无错误。
  • **channel**:同一活动周期内所有数据属同一通道,但源可在连续活动周期间切换通道。
5.6 数据布局

通过dataBitsPerSymbolsymbolsPerBeatdata总线划分为多个符号。例如,64位datadataBitsPerSymbol=16,则分为4个符号(symbol0为最高有效符号)。firstSymbolInHighOrderBits控制符号的字节序。

5.7 无背压的数据传输

最简单的模式。源在任何周期都可置位valid并驱动数据,宿必须在每个valid置位的周期采样数据。宿无流控能力,要求宿的处理速度必须始终不低于源的数据产生速率。

5.8 有背压的数据传输

通过ready信号实现流控。传输仅发生在就绪周期valid置位时。

  • **readyLatency = 0**readyvalid必须在同一周期都置位才能发生传输。源在发送数据前不知道宿是否就绪。
  • **readyLatency ≥ 1**:宿提前n个周期置位ready,为源预留准备时间。源在对应的周期内置位valid即可完成传输。在非就绪周期,源必须置低valid

**readyAllowance**的深入应用

此属性允许在ready置低后,宿接口仍能"消化"掉已进入管线的若干数据,防止因ready信号的立即生效而打断数据传输,有利于时序优化。

  • 规则 :若readyLatency=0readyAllowance可为任意值;若readyLatency>0,则readyAllowance必须≥readyLatency
  • 工作方式 :若readyAllowance = n,则ready在周期m置低后,宿在周期mm+n(或m+n-readyLatency)间仍可接受最多n次传输。
  • 适配要求 :文档通过详细的表格说明了源和宿接口的readyLatencyreadyAllowance参数不同时,是否需要以及如何插入适配逻辑(如FIFO)来保证可靠连接。
5.9 数据包数据传输

在基本数据传输基础上,通过添加startofpacketendofpacketempty信号来支持数据包。

  • 必需成对:源和宿接口必须同时包含这些信号才能支持数据包传输。
  • **empty**信号 :仅当endofpacket置位时有效,指明当前data中最后几个符号是无效的(用于填充总线宽度)。其位宽为ceil(log2(symbolsPerBeat))
5.10 协议详情与示例

数据包传输遵循与基本传输相同的握手协议(valid/ready)。文档通过一个详细时序图展示了长度为17字节的数据包在32位接口(symbolsPerBeat=4)上的传输过程:

  1. startofpacket在第一个有效数据周期置位。
  2. 数据分多个周期传输。
  3. 在最后一个周期,endofpacket置位,同时empty=3,表示4个符号中有1个是有效数据(位于data[31:24]),其余3个为空。

此机制高效地处理了可变长度数据包与固定位宽总线之间的对齐问题。

本节总结

Avalon-ST接口是一个高度可配置、高性能的流式数据协议。其设计精髓体现在:

  1. 分离的流控valid(源控)和ready(宿控)分离,提供了清晰的流控责任划分。
  2. 可配置的时序readyLatencyreadyAllowance参数允许在吞吐量、延迟和时序收敛性之间进行精细权衡,是面向高性能、高频率设计的关键。
  3. 丰富的特性 :通过可选的channelerror和数据包信号,该协议能够支撑从简单数据流到复杂的多通道、带内管理信息的数据包交换等多种应用场景。

设计Avalon-ST接口时,必须根据应用的数据特性、吞吐量要求和下游模块的处理能力,仔细选择并正确实现相应的信号角色与属性配置。

Avalon**®**** 接口规范 第6节详解:Avalon Conduit接口**

++本部分对《Avalon++ ++®++ ++接口规范》文档第46-47页的"6. Avalon Conduit接口"章节进行完整解读。Avalon Conduit接口是协议家族中一个特殊而重要的成员,它提供了最大的灵活性,用于处理那些无法被归类到其他标准接口(如Avalon-MM, Avalon-ST)的通用信号。++


6.1 章节概述与设计定位

Avalon Conduit接口,中文可译为"管道"或"导线"接口,其核心设计目标是充当一个通用的信号容器或传递通道

  • 核心功能:将任意数量、任意宽度、任意方向的信号(输入、输出或双向)组合在一起,形成一个逻辑接口。这些信号可以代表任何用户定义的功能,例如特定的控制线、状态指示、自定义协议或直接连接到FPGA引脚的原始信号。
  • 关键限制 :文档中给出了一个重要的设计建议:"如果可能,您应该使用标准的Avalon-MM或Avalon-ST接口,而不是创建一个Avalon Conduit接口。" 这是因为Platform Designer(系统集成工具)能够为标准化接口提供自动的验证 (如时序、协议检查)和适配 (如位宽转换、时钟域交叉)。而对于Conduit接口,工具无法提供任何验证或适配,其正确性完全由设计者保证。
  • 典型应用场景
    1. 片内信号直通:在系统内部的两个自定义模块之间传递一组特定的控制或数据信号。
    2. 信号导出:将内部信号分组并导出到FPGA顶层实体,以便连接到其他硬件逻辑或FPGA的I/O引脚,从而驱动片外器件。例如,将一组PWM输出、传感器读数或自定义串行总线信号导出。
    3. 连接非标外设:用于连接那些不具备标准存储器映射或流接口的硬件模块。
6.2 Avalon Conduit接口信号角色

Conduit接口的信号角色定义展现了其极大的灵活性。

  • 信号角色<any>(任意)
  • 宽度<n>(任意,1-1024)
  • 方向:输入、输出或双向
  • 描述 :一个Conduit接口由一个或多个具有用户自定义角色的信号组成。这些角色名称、信号宽度和方向完全由组件设计者决定。
  • 连接规则 :在Platform Designer系统中,两个Conduit接口能够被连接的前提是:
    1. 角色名称匹配:待连接的信号角色必须具有相同的名称。
    2. 信号宽度匹配:对应角色的信号位宽必须相同。
    3. 信号方向相反:一个接口的输出必须连接到另一个接口的输入,或者双向信号互连。

这种连接是"点对点"的,工具不会像处理Avalon-MM那样进行地址解码或多主仲裁。

6.3 Conduit接口属性

文档明确指出:管道接口没有预定义的属性

  • 深度解读 :这与Avalon-MM或Avalon-ST接口形成鲜明对比。缺少属性意味着:
    1. 无行为配置 :无法通过类似addressUnitsreadyLatency这样的属性来配置接口的时序或协议行为。
    2. 无自动关联 :没有标准的associatedClockassociatedReset属性。如果Conduit接口中的信号是同步的,那么其相关的时钟和复位信息必须通过设计上下文或文档隐式地定义,并由设计者手动确保跨接口连接的时钟域兼容性。
    3. 无工具辅助:Platform Designer无法基于属性进行任何优化或插入适配逻辑。如果两个Conduit接口的时钟域不同,工具不会自动插入同步器,这可能导致亚稳态。
本节总结与设计指导

Avalon Conduit接口是Avalon协议中的"瑞士军刀",它用灵活性 换取了自动化支持

何时使用Conduit接口:

  1. 信号导出:当需要将一组信号引出到FPGA引脚时,这是最直接的方式。
  2. 非标准互连:连接两个具有特定、固定握手协议的模块,且该协议无法用标准接口方便地描述。
  3. 系统"线缆":在系统内传递一小组无关的全局信号(如使能、中断、状态位)。

使用时的注意事项与最佳实践:

  1. 优先选择标准接口:始终首先评估需求是否能用Avalon-MM(用于控制/状态)或Avalon-ST(用于数据流)来满足。标准接口能带来可靠性、可重用性和工具支持的巨大优势。
  2. 明确文档:由于缺乏工具验证,必须为使用Conduit接口的组件提供极其清晰的文档,说明每个信号的角色、时序要求、有效电平和关联的时钟域。
  3. 手动处理时钟域:如果连接的Conduit接口分属不同时钟域,设计者必须在组件内部或外部显式地添加适当的时钟域交叉电路。
  4. 保持接口简洁:Conduit接口应专注于传递信号,复杂的协议控制逻辑应封装在组件内部。

总而言之,Avalon Conduit接口是一个强大但需谨慎使用的工具。它填补了标准协议的空白,使得任何信号都能被纳入Platform Designer的互联框架,但其正确性和可靠性的责任也完全转移到了系统设计者肩上。

Avalon**®**** 接口规范 第7节详解:Avalon三态管道接口**

++本部分对《Avalon++ ++®++ ++接口规范》文档第48-50页的"7. Avalon三态管道接口"章节(注:第51页为附录A"已弃用的信号",将在本节末一并说明)进行完整解读。Avalon三态管道接口是一种专为++ ++与片外器件++ ++进行通信而设计的特殊接口,其核心在于支持++ ++三态逻辑++ ++和++ ++信号多路复用++ ++,以高效利用FPGA引脚资源。++


7.0 设计目标与核心机制

Avalon三态管道接口是标准Avalon管道接口的增强版本,专门针对驱动共享的片外总线这一常见场景。

  • 核心目标 :允许多个三态主控制器 (Tristate Conduit Master, TCM)分时复用 同一组FPGA I/O引脚,以连接多个外部设备(如Flash、SRAM)。这能显著减少FPGA所需引脚数量和PCB板上的走线数量
  • 核心机制 :通过requestgrant信号实现总线仲裁 。当多个TCM请求访问共享总线时,一个中央的三态管道引脚共享器负责仲裁,将总线访问权授予其中一个TCM。
  • 与标准Conduit的区别
    1. 强制仲裁 :必须包含requestgrant信号。
    2. 特殊命名规则 :信号必须通过_out_in_outen后缀来明确指定其引脚方向类型,以便共享器识别哪些信号是共享的。
    3. 点对点:专为连接片上控制器与片外器件设计。
7.1 Avalon三态管道信号角色

所有信号同时适用于主(Master)和从(Slave)接口,含义相同。主接口驱动输出信号,接收输入和授权信号;从接口(通常由三态管道桥引脚共享器实现)则相反。

仲裁信号(必需):

  • **request**
    • 方向:Master → Slave
    • 描述:主设备请求总线访问权。
    • 关键协议
      1. request置位且grant为低时,请求当前周期的访问。
      2. request置位且grant为高时,请求下一个周期 的访问。因此,request必须在访问的最后一个周期置低
      3. 一旦置位,request必须保持有效直到被授权。这意味着最短的总线访问周期为2个时钟周期(1个周期请求,1个周期传输)。
  • **grant**
    • 方向:Slave → Master
    • 描述 :从设备(仲裁器)授予主设备总线访问权。grant响应request而置位,并保持有效直到request置低后的一个周期。这确保了主设备在释放请求后仍能完成最后一个周期的驱动。

三态信号(通过后缀定义共享引脚):

这是实现引脚共享的关键命名约定。具有相同 **<name>**前缀但不同后缀的信号,代表共享同一个物理FPGA引脚

  • **<name>_out**
    • 方向:Master → Slave
    • 描述 :逻辑三态信号的输出值。当主设备获得授权时,它驱动此信号的值到共享引脚上。
  • **<name>_in**
    • 方向:Slave → Master
    • 描述 :逻辑三态信号的输入值。当主设备未获得授权或其他设备驱动共享引脚时,主设备通过此信号读取引脚状态。
  • **<name>_outen**
    • 方向:Master → Slave
    • 描述 :逻辑三态信号的输出使能。当主设备获得授权且需要驱动引脚时为高,否则为低(高阻态)。这是实现物理三态(高、低、高阻)控制的关键。

引脚共享原理

例如,一个主设备声明了data_out[15:0]data_in[15:0]data_outen信号。_out是驱动值,_outen是输出使能,_in是读取值。共享器识别data这个共同前缀,将这些信号连接到同一个16位物理双向引脚data[15:0]上。当该主设备获得授权且data_outen=1时,data_out的值被驱动到引脚;否则,引脚对其他主设备呈高阻态,该主设备通过data_in读取引脚状态。

7.2 三态管道属性

文档明确指出:对于Avalon-TC接口没有特殊的属性

  • 解读 :这意味着其行为完全由上述仲裁协议和信号命名约定定义,没有类似readyLatencyburstcount的可配置参数。时钟和复位关联性由系统连接隐含确定。
7.3 三态管道时序

文档通过图36(三态管道仲裁时序图)清晰地展示了仲裁与数据传输的完整流程。

  1. 仲裁与授权 :TCM在需要访问总线时置位request。仲裁器(引脚共享器)在某个周期置位grant作为响应。
  2. 数据传输窗口一旦 **grant**置位,TCM立即在同一个周期获得总线的控制权 ,可以开始驱动地址、数据和控制信号(_out_outen)。这意味着"授权周期"本身就是一个有效的"数据传输周期"。
  3. 释放总线 :TCM在传输的最后一个周期置低requestgrant信号在request置低后,再保持一个周期有效,然后才置低。这保证了TCM在释放请求后,仍有完整的一个周期来完成最后的驱动,实现平滑的总线释放。

时序图关键点解读

  • grant有效的整个窗口内,TCM拥有总线。
  • 总线访问可以连续进行(如图中cycle 4授权后,从cycle 5开始传输),前提是TCM保持request有效。
  • 未获得授权的周期(如cycle 3, 4, 9),共享总线由其他主设备或上拉电阻决定其状态。
【附录A】已弃用的信号(第51页)

此部分列出了Avalon接口规范中已不再推荐使用的历史信号,在新设计中应避免使用

  1. **begintransfer**
    • 原始用途:Avalon-MM主设备输出,在传输开始时置位一个周期。
    • 弃用原因 :此信号从未被广泛使用,也不是协议的必要部分。从设备应通过检测 **read**/ **write**的上升沿或结合地址变化来判断传输开始。
  2. **chipselect****或 ****chipselect_n**
    • 原始用途:Avalon-MM从设备的1-bit输入,在读写传输开始时由互连置位,用于选通从设备。
    • 弃用原因
      • 历史背景:源于早期微处理器与异步外设的连接方式,由CPLD解码地址产生片选。
      • 现代替代 :在同步的Avalon-MM系统中,Platform Designer互连根据地址解码 自动将read/write命令路由到正确的从设备。因此,专用的chipselect信号已成冗余。Avalon-TC接口中用于片外器件的芯片选择信号,其角色名应为 **<name>_out**,不属于此弃用范围。
  3. **flush**
    • 弃用状态:从规范1.2版中已删除。
    • 原始用途:用于主设备清除流水线读操作中未完成的传输。
本节总结

Avalon三态管道接口是连接共享片外总线的标准化解决方案。其设计精髓在于:

  1. 明确的仲裁协议 :通过request/grant握手实现公平、确定的总线访问权分配。
  2. 智能的引脚共享 :通过_out_in_outen的后缀命名规则,使工具能自动识别并复用物理引脚,极大节省了硬件资源。
  3. 与片外世界的桥梁:它将FPGA内部同步的Avalon-MM事务,转换成了适合驱动异步或同步片外存储器和外设的三态总线周期。

设计此类接口时,必须严格遵循其仲裁协议和命名约定,并理解grant信号生效即获得总线控制权的关键时序特性。对于新设计,应忽略已弃用的信号,遵循最新的接口规范。

相关推荐
GateWorld4 小时前
FPGA内部模块详解之六 FPGA的“心跳”与“神经网络”——时钟网络与布线资源深度解析
fpga开发·fpga内部时钟网络·fpga布线资源
lit_wei7 小时前
【ZYNQ的DMA获取FPGA数据处理,零拷贝,DMA方式】
fpga开发
FPGA-ADDA7 小时前
Xilinx Zynq UltraScale+ RFSoC XCZU47DR 开发板
fpga开发·fpga·rfsoc·xczu47dr
unicrom_深圳市由你创科技10 小时前
FPGA如何实现高速接口(PCIe/DDR4/QSFP28)?
fpga开发
发光的沙子10 小时前
FPGA----完美解决VFS: Cannot open root device “mmcblk0p2“ or unknown-block179,2)问题
fpga开发
S&Z346311 小时前
[SZ901]下载器常规功能及速度设置(53M MAX)
fpga开发·sz901
GateWorld21 小时前
FPGA内部模块详解之五FPGA的“对外窗口”——可编程输入输出单元(I/O Logic)
fpga开发·iologic
ZPC82101 天前
FPGA IP核协议清单
fpga开发
fei_sun1 天前
FPGA与CPU数据通信(待补充)
fpga开发