欢迎光临
我们一直在努力

4TbpsGDDR6——针对AI和高带宽运算应用场景

Speedster7t、GDDR6、高端FPGA、NAP响应器模块、AXI

引言

本 GDDR6 参考设计展示了对 Speedster®7t 系列 FPGA 的所有 GDDR6 子系统执行读写事务的能力。本指南详细介绍了通过综合流程以及 ACE 工具的布局布线流程,在多款器件上实现该设计的方法。 Speedster7t AC7t1400 和 AC7t1500 FPGA 各配备 8 个 GDDR6 子系统和 16 个通道,而 Speedster7t AC7t800 则拥有 3 个 GDDR6 子系统和 6 个通道(更多细节请参阅《Speedster7t GDDR6 用户指南》(UG091))。 注:本次发布的 GDDR6 参考设计,其支持的设计文件仅面向 VectorPath 815 加速卡上的 AC7t1500 器件。因此,本文档仅介绍该设计的 AC7t1500 适配版本。

在 Speedster7t AC7t1400 和 AC7t1500 FPGA 上,可通过二维片上网络(2D NoC)接口或直连(DC)接口对 GDDR6 子系统执行事务操作。本设计可用于测试每个 GDDR6 子系统的两个通道,也可通过修改扩展设计,实现对 8 个 GDDR6 子系统的全部 16 个通道的测试。 本设计通过仿真验证了从可编程逻辑区的 NAP 或 DC 接口端口,到 GDDR6 存储器之间的接口交互。 由本设计生成的比特流以及附带的运行时脚本,均与 VectorPath 815 加速卡兼容。

设计描述

本设计包含以下逻辑模块和接口:

Achronix设备管理器

GDDR6参考设计使用ACX_DEVICE_MANAGER软核IP,为AC7t1400和AC7t1500 FPGA的GDDR6子系统执行训练流程。当锁相环(PLL)完成锁相后,复位信号释放并启动训练过程。该模块32位输出信号o_status的最低两位置高时,表示训练过程完成。运行时脚本会通过这些状态位,确保GDDR6训练完成后,再向GDDR6存储器发起事务操作。有关该软核IP的更多信息,请参阅《Speedster7t软核IP用户指南》(UG103)。

NAP响应器模块

NAP响应器用于在GDDR6存储器与可编程逻辑区的AXI存储通道逻辑之间传输数据。本设计启用了全部8个GDDR6子系统,但并未使用每个子系统的所有通道。设计采用2D NoC接口,对接所有子系统的1通道。每个GDDR6接口都配有对应的AXI存储通道逻辑模块,该模块在设计中充当数据生成器和校验器。在仿真和ACE布局过程中,每个NAP均可绑定到任意位置,这种灵活性支持多种测试场景,验证GDDR6子系统能否处理来自可编程逻辑区任意NAP的事务请求。

NAP位置

针对本VectorPath 815参考设计,NAP的位置选择在FPGA东侧或西侧,且与目标GDDR6子系统相邻的区域(选择距离目标子系统更近的一侧)。该布局方式旨在减少NAP与GDDR6控制器之间的延迟。设计所使用的8个NAP分布在列3和列8的第3、4、5、6行,其位置在/src/tb/tb_gddr_ref_design.sv和/src/constraints/ace_placements.pdc文件中均有定义。通过统一仿真和实际实现流程中的布局,可确保两种流程的结果实现最精准的关联。

直连(DC)接口

直连(DC)接口是一种信号接口,可实现可编程逻辑区与子系统的直接连接。本设计中,DC接口用于子系统1、2、5、6的0通道,将GDDR6子系统的DC接口信号与AXI存储通道相连,实现对GDDR6存储器的直接访问。通过GDDR6 DC接口,设计无需通过NAP在NoC上传输事务,即可访问GDDR6存储器,这有助于减少NoC上的流量并节省NAP资源。

DC接口逻辑位置

与GDDR6 DC接口交互的AXI存储通道逻辑,可放置在FPGA可编程逻辑区的任意位置,本参考设计中未对其施加约束。但为了实现DC接口与用户设计之间更优的时序收敛,该逻辑通常会自然布局在FPGA可编程逻辑区东侧或西侧的DC接口端口附近(根据目标GDDR6子系统的位置确定)。

AXI存储通道

本设计实例化了12个AXI存储通道,每个存储通道生成AXI数据包向GDDR6子系统写入数据,并回读数据以验证每个事务是否被正确处理。设计中的每个GDDR6接口均配有一个存储通道,因此共有8个通道与NAP相连,4个通道与DC接口引脚相连。

AXI存储通道集成了AXI数据包生成器、LRAM FIFO、AXI数据包校验器和AXI性能监视器,这些组件共同构成一个存储测试通道。通过该模块,数据包被生成并通过AXI接口发送至存储接口进行处理,同时这些数据包会通过同一AXI接口回传,与发送的数据进行比对,以验证存储接口的功能。

一组寄存器被接入测试模块,用于配置和监控通道,该寄存器组直接与寄存器控制块相连。

参数

表1 • AXI存储通道参数

Parameter NameDefault ValueDescription
AXI_DATA_WIDTH 256 AXI interface data width.
AXI_ADDR_WIDTH 42 AXI interface address width.
LINEAR_PKTS 0 Set to 1 to make packets have linear counts.
LINEAR_ADDR 0 Set to 1 to have linear addresses.
MAX_BURST_LEN 0 Maximum number of AXI packets in a burst.
TGT_ADDR_WIDTH 0 Target address width.
TGT_ADDR_PAD_WIDTH 0 Target address padding.
TGT_ADDR_ID 0 Target address ID.
RAND_DATA_INIT 0 Random value for data starting point.
NO_AR_LIMIT 0 Minimum gap to prevent GDDR/DDR pipeline reordering.
NUM_REGS 8 Number of read and write registers used in the channel.
CHANNEL_CLK_FREQ 400 Frequency of channel clock, also used to calibrate performance monitor.
OUTPUT_PIPELINE_LENGTH 4 Length of output pipeline.

端口

表2 • AXI存储通道端口

NameWidthDirectionDescription
i_ch_clk 1 Input Channel clock.
i_reg_clk 1 Input Register clock. Must match the register_control_block clock.
i_ch_reset_n 1 Input Negative reset on channel clock.
i_regs_write 32x NUM_REGS Input Array of registers to configure channels.
axi_if Input/Output AXI4 interface.
o_regs_read 32x NUM_REGS Output Array of registers to monitor channel.
o_running 1 Output Indicates test is running.
o_done 1 Output Indicates test is complete.
o_fail 1 Output Indicates test has failed.

寄存器

每个存储通道使用11个寄存器进行配置和监控,仅寄存器0和2可通过寄存器控制块写入,其余所有寄存器均为只读。下表列出了各寄存器及其功能。

表3 • 控制寄存器(CONTROL_REG)(偏移地址:0x00_0000)

Name [^t]BitsAccessDefaultDescription
gen_rstn_pre 0 RW 1’b0 Packet generator reset.
chk_rstn_pre 1 RW 1’b0 Packet checker reset.
fifo_rstn_pre 2 RW 1’be FIFO reset.
mon_rstn_pre 3 RW 1’be Performance monitor reset.
fifo_flush_pre 4 RW 1’b0 Flushes the FIFO.
max_bursts_pre 5 RW 1’be Determines whether the AXI packet generator creates maximum length packets ( 1’b1) or variable length packets ( 1’b0).
gen_start_pre 6 RW 1’b0 Start packet generator.
[31:7] RO 25’b0 Reserved.

表注:t 上述信号通过寄存器控制块时钟采样后,同步至通道时钟域。


表4 • 状态寄存器(STATUS_REG)(偏移地址:0x00_0004)

NameBitsAccessDefaultDescription
test_running 0 RO 1’b0 Asserted when transactions are still running.
test_done 1 RO 1’b0 Asserted when transactions are complete.
gen_running 2 RO 1’b0 Asserted when transactions are still running.
gen_done 3 RO 1’b0 Asserted when transactions are complete.
pkt_error 4 RO 1’b0 Asserted when a packet mismatch occurs.
wr_error 5 RO 1’b0 Asserted when a writing error occurs.
[7:6] RO 2’b0 Reserved.
outstanding_compares [15:8] RO 8’b0 8-bit number comparing transactions read against transactions compared.
[31:16] RO 16’b0 Reserved.

表5 • 事务数寄存器(NUM_TRANSFERS_REG)(偏移地址:0x00_0008)

NameBitsAccessDefaultDescription
num_transfers_reg [31:0] RW 32’b0 Sets number of transactions to run during test. Performs continuous transactions if set to 0.

表6 • 测试生成计数寄存器(TEST_GEN_COUNT)(偏移地址:0x00_000C)

NameBitsAccessDefaultDescription
test_gen_count [31:0] RO 32’b0 Stores number of remaining transactions to run in test.

表7 • 读带宽结果寄存器(BW_RESULTS_RD)(偏移地址:0x00_0010)

NameBitsAccessDefaultDescription
rd_bw_min_norm [9:0] RO 10’b0 Minimum read bandwidth.
rd_bw_max_norm [19:10] RO 10’b0 Maximum read bandwidth.
rd_bw_norm [29:20] RO 10’b0 Average read bandwidth.
[31:30] RO 2’b0 Reserved.

表8 • 写带宽结果寄存器(BW_RESULTS_WR)(偏移地址:0x00_0014)

NameBitsAccessDefaultDescription
wr_bw_min_norm [9:0] RO 10’b0 Minimum write bandwidth.
wr_bw_max_norm [19:10] RO 10’b0 Maximum write bandwidth.
wr_bw_norm [29:20] RO 10’b0 Average write bandwidth.
[31:30] RO 2’b0 Reserved.

表9 • 实时延迟结果寄存器(LATENCY_RESULTS_CURRENT)(偏移地址:0x00_0018)

NameBitsAccessDefaultDescription
latency_counter_write [11:0] RO 12’b0 Latest write latency.
[15:12] RO 4’b0 Reserved.
latency_counter_read [27:16] RO 12’b0 Latest read latency.
[31:28] RO 4’b0 Reserved.

表10 • 平均延迟结果寄存器(LATENCY_RESULTS_AVG)(偏移地址:0x00_001C)

NameBitsAccessDefaultDescription
wr_lat_avg [11:0] RO 12’b0 Average write latency.
[15:12] RO 4’b0 Reserved.
rd_lat_avg [27:16] RO 12’b0 Average read latency.
[31:28] RO 4’b0 Reserved.

表11 • 最大延迟结果寄存器(LATENCY_RESULTS_MAX)(偏移地址:0x00_0020)

NameBitsAccessDefaultDescription
wr_lat_max [11:0] RO 12’b0 Maximum write latency.
[15:12] RO 4’b0 Reserved.
rd_lat_max [27:16] RO 12’b0 Maximum read latency.
[31:28] RO 4’b0 Reserved.

表12 • 最小延迟结果寄存器(LATENCY_RESULTS_MIN)(偏移地址:0x00_0024)

NameBitsAccessDefaultDescription
wr_lat_min [11:0] RO 12’b0 Minimum write latency.
[15:12] RO 4’b0 Reserved.
rd_lat_min [27:16] RO 12’b0 Minimum read latency.
[31:28] RO 4’b0 Reserved.

表13 • 时钟频率与数据位宽寄存器(CLOCK_FREQUENCY_DATA_WIDTH)(偏移地址:0x00_0028)

NameBitsAccessDefaultDescription
data_width [15:0] RO 16’b0 AXl data bus width.
clock_frequency [29:16] RO 14’b0 Clock frequency in MHz.
[31:30] RO 2’b0 Reserved.

AXI数据包生成器

AXI数据生成器模块生成具有不同突发长度和存储地址的AXI4事务,通过AXI4接口,生成的数据和地址可采用顺序或随机形式,指向顺序或随机地址。 该生成器可配置为适配NAP或DCI连接的存储子系统,其输出可存储在FIFO中,供后续AXI数据包校验器进行校验。

参数

表14 • AXI数据包生成器参数

Parameter NameDefault ValueDescription
LINEAR_PKTS 0 Set to 1 for packets with linear counts.
LINEAR_ADDR 0 Set to 1 for linear addresses.
TGT_ADDR_WIDTH 0 Target address width.
TGT_ADDR_PAD_WIDTH 0 Target address padding.
TGT_ADDR_ID 0 Target address ID.
TGT_DATA_WIDTH 0 Target data width.
MAX_BURST_LEN 0 Maximum number of AXl packets in a burst.
AXI_ADDR_WIDTH 0 Width of axi_if address field.
RAND_DATA INIT 0 Random value for data starting point.

端口

表15 • AXI数据包生成器端口

NameWidthDirectionDescription
i_clk 1 Input Input clock.
i_reset_n 1 Input Negative synchronous reset.
i_start 1 Input Start sequence when applied.
i_enable 1 Input Generate new packet when set.
i_max_burst 1 Input Generate bursts of size MAX_BURST_LEN when set, otherwise increment bursts from 0 to MAX_BURST_LEN .
axi_if Input/Output AXI4 interface.
o_wr_error 1 Output Set when a writing error occurs.
o_addr_written TGT_ADDR_WIDTH Output AXI write address output.
o_len_written 8 Output Applied to data written into FIFO for checking algorithm.
o_written_valid 1 Output Set high when data is successfully written from generator.

AXI数据包校验器

AXI数据包校验器从FIFO中读取数据包地址和长度,然后从指定地址执行读操作,并将接收的数据与内部随机数生成器生成的数据进行比对(该内部生成器与配套的AXI数据包生成器的随机数生成器序列一致)。若读数据与预期数据匹配,校验器指示存储事务成功;若存在不匹配,o_pkt_error信号置高,指示事务失败。

参数

表16 • AXI数据包校验器参数

Parameter NameDefault ValueDescription
LINEAR_PKTS 0 Set to 1 for packets with linear counts.
TGT_ADDR_WIDTH 0 Target address width.
TGT_ADDR_PAD_WIDTH 0 Target address padding.
TGT_ADDR_ID 0 Target address ID.
TGT_DATA_WIDTH 0 Target data width.
AXI_ADDR_WIDTH 0 Width of axi_if address field.
RAND_DATA_INIT 0 Random value for data starting point.
NO_AR_LIMIT 0 Gap to prevent GDDR/DDR pipeline reordering.

端口

表17 • AXI数据包校验器端口

NameWidthDirectionDescription
i_clk 1 Input Input clock.
i_reset_n 1 Input Negative synchronous reset.
i_xact_avail 1 Input Asserted when a transaction is available to read.
i_xact_addr TGT_ADDR_WIDTH Input Packet address received from FIFO.
i_xact_len 8 Input Packet length received from FIFO.
axi_if Input/Output AXI interface.
o_xact_read 1 Output Asserted when data is ready to be read.
o_pkt_compared 1 Output Asserted at the end of each packet comparison.
o_pkt_error 1 Output Asserted if a packet mismatch occurs.

AXI性能监视器

AXI性能监视器用于测量各AXI接口的读写数据速率和延迟,可在可定义的采样窗口内,基于AXI数据字级别计算读写带宽的移动平均值。

此外,监视器还能基于可定义的事务数量,计算平均读写延迟,并测量带宽和延迟的最小值与最大值,且可直接与寄存器控制块相连。

工作模式

监视器支持多种工作模式:

  • 手动启动和停止:需置位i_start和i_stop信号以启动和停止性能测量,测量结束后,结果反映带宽(BW)的变化情况;

  • 自动启动:接收到第一个AXI读数据后启动测量,停止仍需手动置位i_stop;

  • 自动停止:手动启动测量,达到预定义的时钟周期数后自动停止;

  • 全自动:接收到第一个AXI读数据后启动测量,达到定义的时钟周期数后自动停止。

  • 参数

    表18 • AXI性能监视器参数

    Parameter NameDefault ValueDescription
    BW_WINDOW_SIZE 2048 Size of the moving window for the bandwidth calculation. Maximum of 2048 used as default. Power of 2 number <= 2048.
    LAT_AVERAGE_SIZE_EXP 5 Quantity of the transactions used to calculate the average latency. The number of samples averaged is (2 ^ LAT_AVERAGE_SIZE_EXP) .
    STOP_COUNT 0 If non-zero, stop measuring on this number of cycles. Ignore i_stop . Within the range of [0–2^15 – 1]
    AUTO_START 0 If enabled, start counting when first read word is received. Ignore i_start .
    CLOCK_FREQ 500 Operating clock frequency of the AXI interface in MHz. This value gets propagated to the register interface. Eases the computation of latency and bandwidth.
    DATA_WIDTH 32 Data width of the AXI interface in bytes. This value gets propagated to the register interface. Eases the computation of bandwidth.

    端口

    表19 • AXI性能监视器端口

    Signal NameWidthDirectionDescription
    i_clk 1 Input Clock input. Must be assigned to axi_if master clock.
    i_reset_n 1 Input Negative synchronous reset.
    i_start 1 Input Assert to start the performance measurement.
    i_stop 1 Input Assert to stop the performance measurement.
    i_counter_reset 1 Input Assert to reset the performance counters.
    axi_if Input Direct connection to AXI interface signals in monitor mode.
    o_bw_results_rd 32 Output A combined 32-bit word that contains average, max and min read bandwidth: [31:30] – reserved. Returns 2’b0. [29:20] – average read bandwidth. [19:10] – maximum read bandwidth. [9:0] – minimum read bandwidth.
    o_bw_results_wr 32 Output A combined 32-bit word that contains average, max and min write bandwidth: [31:30] – reserved. Returns 2’b0. [29:20] – average write bandwidth. [19:10] – maximum write bandwidth. [9:0] – minimum write bandwidth.
    o_latency_results_current 32 Output A combined 32 bit word measuring the read and write latency of the latest transactions: [31:28] – reserved. Returns 4’b0. [27:16] -latest read latency. [15:12] – reserved. Returns 4’b0. [11:0] -latest write latency.
    o_latency_results_avg 32 Output A combined 32-bit word measuring average read and write latency: [31:28] – reserved, returns 4’b0. [27:16] – average read latency. [15:12] – reserved, returns 4’b0. [11:0] – average write latency.
    o_latency_results_max 32 Output A combined 32-bit word measuring maximum read and write latency: [31:28] – reserved, returns 4’b0. [27:16] – maximum read latency. [15:12] – reserved, returns 4’b0. [11:0] – maximum write latency.
    o_latency_results_min 32 Output A combined 32-bit word measuring minimum read and write latency: [31:28] – reserved, returns 4’b0. [27:16] – minimum read latency. [15:12] – reserved, returns 4’b0. [11:0] – minimum write latency.
    o_clock_freq_data_width 32 Output A combined 32-bit word that reports the clock frequency and the data width of the AXl port: [31:30] – 2’b00 .Indicates AXl performance monitor. [29:16] – clock frequency in MHz. Equivalent to CLOCK_FREQ. [15:0] – AXI data bus width. Equivalent to DATA_WIDTH. This register is intended to allow software to automatically calculate the bandwidth and latency values without requiring access to the RTL source.

    表注:* 数值均归一化为10位值(最大值1024)。


    计算公式

    计算带宽(MB/s)可使用以下公式:

    • 带宽(字节/秒)= (o_bw_results_XX / 1024) × (CLOCK_FREQ × AXI_DATA_WIDTH)

    计算延迟(ns)可使用以下公式:

    • 延迟(ns)= o_latency_results_YY × 1000 / CLOCK_FREQ

    时钟域考量

    所有输入和输出信号均与时钟输入i_clk同步,i_clk必须连接到驱动axi_if的AXI接口时钟。

    AXI性能监视器通常直接与寄存器控制块相连,这种情况下需考虑监视器与寄存器块之间的多时钟域问题,建议采用以下方法确保读取结果寄存器时的数据完整性:

  • 将寄存器控制块连接到与i_clk相同的时钟。但在许多设计中,若寄存器控制块需控制设计的多个功能,或出于时序收敛的考虑,这种方式可能并不适用;

  • 使用i_start和i_stop启动和停止测量,在置位i_stop后,待输出结果寄存器稳定后再读取结果(本参考设计采用此方法);

  • 在所有AXI性能监视器寄存器输出端加入时钟域交叉同步器(ACX_SYNCHRONIZER)(o_clock_freq_data_width为常量,无需添加),这会额外占用6个寄存器×32位×每个同步器2个触发器=384个寄存器。

  • 实例化

    本设计包含三个独立模块,AXI性能监视器由两个子模块组成:axi_bw_monitor(执行带宽测量)和axi_lat_monitor(执行延迟测量),这两个子模块在axi_performance_monitor中组合,形成上述的带宽和延迟综合监视器。通常建议实例化完整的axi_performance_monitor,若用户设计需要,也可单独实例化两个子模块。以下示例展示了三个模块的实例化模板:

    // Instantiate AXI performance monitor
    axi_performance_monitor #(
    .BW_WINDOW_SIZE (1024),
    .LAT_AVERAGE_SIZE_EXP (5)
    .STOP_COUNT (STOP_COUNT),
    .AUTO_START (AUTO_START),
    .CLOCK_FREQ (CLOCK_FREQ),
    .DATA_WIDTH (AXI_DATA_WIDTH)
    ) i_axi_performance_monitor_nap (
    // Inputs
    .i_clk (clk),
    .i_reset_n (reset_n),
    .i_start (start),
    .i_stop (stop),
    .i_counter_reset (counter_reset),
    // Interfaces
    .axi_if (axi_if),
    // Outputs
    .o_bw_results_rd (bw_results_rd),
    .o_bw_results_wr (bw_results_wr),
    .o_latency_results_current (latency_results_current), .o_latency_results_avg (latency_results_avg),
    .o_latency_results_max (latency_results_max),
    .o_latency_results_min (latency_results_min),
    .o_clock_freq_data_width (clock_freq_data_width)
    );
    // Instantiate submodule AXI bandwidth monitor
    axi_bw_monitor #(
    .BW_WINDOW_SIZE (BW_WINDOW_SIZE),
    .STOP_COUNT (STOP_COUNT),
    .AUTO_START (AUTO_START),
    .CLOCK_FREQ (CLOCK_FREQ),
    .DATA_WIDTH (DATA_WIDTH)
    ) i_axi_bw_monitor_nap (
    // Inputs
    .i_clk (i_clk),
    .i_reset_n (i_reset_n),
    .i_start (i_start),
    .i_stop (i_stop),
    .i_counter_reset (i_counter_reset),
    // Interfaces
    .axi_if (axi_if),
    // Outputs
    .o_bw_results_rd (bw_results_rd),
    .o_bw_results_wr (bw_results_wr),
    .o_clock_freq_data_width (clock_freq_data_width)
    );
    // Instantiate submodule AXI latency monitor
    axi_latency_monitor #(
    .LAT_AVERAGE_SIZE_EXP (LAT_AVERAGE_SIZE_EXP),
    .STOP_COUNT (STOP_COUNT),
    .AUTO_START (AUTO_START),
    .CLOCK_FREQ (CLOCK_FREQ),
    .DATA_WIDTH (DATA_WIDTH)
    ) i_axi_latency_monitor_nap (
    // Inputs
    .i_clk (i_clk),
    .i_reset_n (i_reset_n),
    .i_start (i_start),
    .i_stop (i_stop),
    .i_counter_reset (i_counter_reset),
    // Interfaces
    .axi_if (axi_if),
    // Outputs
    .o_latency_results_current (latency_results_current), .o_latency_results_avg (latency_results_avg),
    .o_latency_results_max (latency_results_max),
    .o_latency_results_min (latency_results_min),
    .o_clock_freq_data_width (clock_freq_data_width) );

    寄存器控制块

    寄存器控制块在用户设计中创建一组控制和状态寄存器,通过ACX_NAP_AXI_MASTER实现寄存器的读写,NAP可通过PCIe子系统或器件的JTAG端口访问。这些寄存器允许用户在仿真和运行时控制设计功能、读取状态结果并测量性能,块中包含四个固定寄存器(主版本、次版本、补丁版本和修订控制寄存器),可用于多个版本构建的版本管理和可追溯性。

    在本参考设计中,寄存器控制块用于启动和停止测试,并确保所有测试通过;此外,在适用的情况下,还可读取流量监视器的数据,测量目标数据路径(尤其是来自硬核接口子系统的数据路径)的吞吐量和延迟。

    头文件

    reg_control_block.sv文件需要两个头文件,均位于/src/include目录下:

    表20 • 寄存器控制块头文件

    FilenameDescription
    reg_control_defines.svh [^t] Defines the type t_ACX_USER_REGS as a 32-bit logic vector.
    version_defines.svh Defines the values of the four fixed-version registers. These values can be used for versioning of the user design. They may be changed on each build to reflect different releases.

    表注:t 寄存器位宽设为32位,按4字节边界寻址。若需要超过32位的寄存器,可并行使用两个寄存器,或修改reg_control_block.sv文件以适配新的位宽和更大的寄存器地址间隔。


    参数

    表21 • 寄存器控制块参数

    ParameterSupported ValuesDefault ValueDescription
    NUM_USER_REGS 2-1024 2 Number of read and write registers.
    IN_REGS_PIPE 0-4 0 Pipeline added to input registers.
    OUT_REGS_PIPE 0-4 0 Pipeline added to output registers.

    表注:t 所有支持值的最大值无实际限制,可使用更高的值,但会消耗大量的可编程逻辑区资源。


    端口

    表22 • 寄存器控制块端口

    NameDirection (†)Description
    i_clk Input Clock.
    i_reset_n Input Negative synchronous reset.
    i_user_regs_in Input Array of NUM_USER_REGS of type t_ACX_USER_REGS .
    o_user_regs_out Output Array of NUM_USER_REGS of type t_ACX_USER_REG .

    实例化

    以下示例展示了寄存器控制块的实例化:

    // Include definitions of register types
    `include "reg_control_defines.svh"
    // Define number of registers
    localparam NUM_USER_REGS = (REGS_PER_ETH_CH*MAX_ETH_CHANNELS)+9;
    // Define the registers
    t_ACX_USER_REG user_regs_write [NUM_USER_REGS -1:0];
    t_ACX_USER_REG user_regs_read [NUM_USER_REGS -1:0];
    // Instantiate the register control block
    reg_control_block #(
    .NUM_USER_REGS (NUM_USER_REGS), // Number of user registers
    .IN_REGS_PIPE (2),
    .OUT_REGS_PIPE (1)
    ) i_reg_control_block (
    .i_clk (i_reg_clk),
    .i_reset_n (reg_rstn),
    .i_user_regs_in (user_regs_read),
    .o_user_regs_out (user_regs_write)
    );
    //——————————————————————–
    // Make top register a scratch register, looping back on itself
    //——————————————————————–
    assign user_regs_read[NUM_USER_REGS-1] = user_regs_write[NUM_USER_REGS-1];

    寻址

    在SystemVerilog代码中,每个寄存器占用一个单独的索引,连续寄存器可通过将索引加1寻址。但从NAP寻址时,由于每个寄存器为4字节宽,连续寄存器位于4字节边界地址,地址间隔为4字节。以下示例展示了寄存器地址的定义:

    // Register definition in SystemVerilog
    localparam CONTROL_REG_ADDR = 0;
    localparam STATUS_REG_ADDR = 1;
    localparam NUM_PKTS_TX_REG_ADDR = 2;
    localparam SCRATCH_REG_ADDR = NUM_USER_REGS-1;
    # Same registers defined in demo Tcl script, (formatted to hex)
    set CONTROL_REG_ADDR [format %X [expr {0 * 4}]]
    set STATUS_REG_ADDR [format %X [expr {1 * 4}]]
    set NUM_PKTS_TX_REG_ADDR [format %X [expr {2 * 4}]]
    set SCRATCH_REG_ADDR [format %X [expr {($NUM_USER_REGS-1) * 4}]]

    寄存器控制块不支持对寄存器的部分写入,每次事务必须写入全部32位。

    演示Tcl脚本

    寄存器控制块可用于仿真和运行时,两种场景下驱动寄存器控制块的序列均由位于/demo/scripts/<design_name>_demo.tcl的演示Tcl脚本定义。使用同一源脚本可确保仿真中的操作序列与硬件运行时保持一致,有关演示Tcl脚本格式的详细信息,请参阅《运行时编程脚本》。

    访问函数

    ACE运行时寄存器库中提供了从ACX_NAP_AXI_MASTER读写的函数,相关文档见《运行时编程脚本》,以下表格详细介绍了三个专用函数:

    表23 • 寄存器控制块访问函数

    FunctionArguments [^t]Description
    write <device_namespace>::nap*axi* NAP_SPACE row col address value Write a value to a register.
    read <device_namespace>::nap*axi* NAP_SPACE row col address Read a value from a register. Returns a hex value in the range 32’h0 – 32’hffff_ffff .
    verify <device_namespace>::nap*axi* NAP_SPACE row col address exp_value Verify a value from a register. If the verify value is incorrect: In simulation – the FCU BFM asserts an error flag, which can be used in the testbench to indicate test failure. In hardware – the verify function returns an error code (–1) which can be used to issue a fail message.

    表注:t 参数值要求:行为十进制值,范围1–8,必须与测试平台的ACX_BIND语句和/src/constraints/ace_placements.pdc文件中的值一致;列为十进制值,范围1–10,必须与测试平台的ACX_BIND语句和/src/constraints/ace_placements.pdc文件中的值一致;预期值为十六进制值,范围32’h0 – 32’hffff_ffff,不能带0x前缀;地址为十六进制值,范围0–(4 × (NUM_USER_REGS – 1)),为寄存器地址,非NAP地址;值为十六进制值,范围32’h0 – 32’hffff_ffff,可带0x前缀。


    仿真

    仿真Makefile通过ACE处理演示Tcl脚本,生成仿真命令文件(.txt),该文件写入/sim目录,格式与《器件仿真模型》中展示的“配置文件格式”一致。

    测试平台在DSM进入用户模式后读取该文件,并通过DSM FCU将序列施加到ACX_NAP_AXI_MASTER和寄存器阵列,该流程如下图所示:

    图1 • 寄存器控制块仿真流程图1 • 寄存器控制块仿真流程

    有关仿真流程的更多细节,请参考仿真参考设计。

    运行时JTAG

    运行时,演示Tcl脚本在ACE Tcl控制台窗口中读取,并直接施加到连接器件的JTAG端口。运行时,Tcl命令puts和ACE内置命令message均可用于在脚本运行时输出状态信息,该流程如下图所示: 图2 • 寄存器控制块运行时流程 图2 • 寄存器控制块运行时流程

    运行时PCIe

    寄存器控制块使用的ACX_NAP_AXI_MASTER可通过器件的任意编程方式访问,因此寄存器控制块可通过器件的任意PCIe端口进行访问和控制,有关PCIe驱动的详细信息,请联系Achronix技术支持。

    顶层寄存器映射

    表24 • Speedster7t AC7t1400和AC7t1500寄存器地址

    TargetAddressBitsAccessDescription
    GDDR_CONTROL_REG 0x0000 [31:0] RW Currently not in use. Kept for future control such as resets.
    GDDR_STATUS_REG_NOC 0x0004 [31:0] RO Status register for all NAP channels.
    GDDR_STATUS_REG_DCI 0x0008 [31:0] RO Status register for all DC interface channels.
    TRAIN_CONTROL_REG 0x000C [31:0] RO Status register for GDDR6 training. Connected to ACX_DEVICE_MANAGER status output.
    NAP_REGS_BASE ( GDDR6_0 ) 0x0010 Refer to AXI Memory Channel and corresponding offsets.
    NAP_REGS_BASE ( GDDR6_1 ) 0x003C Refer to AXI Memory Channel and corresponding offsets.
    NAP_REGS_BASE ( GDDR6_2 ) 0x0068 Refer to AXI Memory Channel and corresponding offsets.
    NAP_REGS_BASE ( GDDR6_3 ) 0x0094 Refer to AXI Memory Channel and corresponding offsets.
    NAP_REGS_BASE ( GDDR6_4 ) 0x00C0 Refer to AXI Memory Channel and corresponding offsets.
    NAP_REGS_BASE ( GDDR6_5 ) 0x00EC Refer to AXI Memory Channel and corresponding offsets.
    NAP_REGS_BASE ( GDDR6_6 ) 0x0118 Refer to AXI Memory Channel and corresponding offsets.
    NAP_REGS_BASE ( GDDR6_7 ) 0x0144 Refer to AXI Memory Channel and corresponding offsets.
    DCI_REGS_BASE ( GDDR6_1 ) 0x0170 Refer to AXI Memory Channel and corresponding offsets.
    DCI_REGS_BASE ( GDDR6_2 ) 0x019C Refer to AXI Memory Channel and corresponding offsets.
    DCI_REGS_BASE ( GDDR6_5 ) 0x01C8 Refer to AXI Memory Channel and corresponding offsets.
    DCI_REGS_BASE ( GDDR6_6 ) 0x01F4 Refer to AXI Memory Channel and corresponding offsets.
    SCRATCH_REG 0x0220 [31:0] RW Scratch Register.

    表25 • GDDR_STATUS_REG_NOC寄存器

    NameBitsAccessDefaultDescription
    pll_lock 0 RO 1’b0 Set if the PLLs of i_nap_clk are locked.
    [3:1] RO 3’b0 Reserved.
    nap_fail [11:4] RO 8’b0 Indicates which NAP channels have failed transactions with bit 4 corresponding to GDDR6_0 , bit 5 corresponding to GDDR6_1 , etc.
    nap_done [19:12] RO 8’b0 Indicates which NAP channels have completed all of their respective transactions as specified in NUM_TRANSFERS_REG with bit 12 corresponding to GDDR6_0 , bit 13 corresponding to GDDR6_1 , etc.
    nap_running [27:20] RO 8’b0 Indicates which NAP channels are still running with bit 20 corresponding to GDDR6_0 , bit 21 corresponding to GDDR6_1 , etc.
    [31:28] RO 4’b0 Reserved.

    表26 • GDDR_STATUS_REG_DCI寄存器

    NameBitsAccessDefaultDescription
    pll_gddr_NW_dci_lock 0 RO 1’b0 Set if the PLL for the west GDDR6 DC interface channels is locked.
    pll_gddr_NE_dci_lock 1 RO 1’b0 Set if the PLL for the east GDDR6 DC interface channels is locked.
    [3:2] RO 2’b0 Reserved.
    dci_fail [7:4] RO 4’b0 Indicates which DC interface channels have failed transactions with bit 4 corresponding to GDDR6_1 , bit 5 corresponding to GDDR6_2 , bit 6 corresponding to GDDR6_5 , and bit 7 corresponding to GDDR6_6 .
    dci_done [11:8] RO 4’b0 Indicates which DC interface channels have completed all of their respective transactions as specified in NUM_TRANSFERS_REG with bit 8 corresponding to GDDR6_1 , bit 9 corresponding to GDDR6_2 , bit 10 corresponding to GDDR6_5 , and bit 11 corresponding to GDDR6_6 .
    dci_running [15:12] RO 4’b0 Indicates which DC interface channels are still running with bit 12 corresponding to GDDR6_1 , bit 13 corresponding to GDDR6_2 , bit 14 corresponding to GDDR6_5 , and bit 15 corresponding to GDDR6_6 .
    [31:16] RO 16’b0 Reserved.

    表27 • TRAIN_CONTROL_REG寄存器

    NameBitsAccessDefaultDescription
    ip_status[0] 0 RO 1’b0 Set when startup is complete and successful.
    ip_status[1] 1 RO 1’b0 Set when startup is complete.
    [31:2] RO 30’b0 Reserved.

    基于2D NoC-GDDR6接口的测试结构

    下图展示了Speedster7t AC7t1400和AC7t1500 FPGA上,AXI存储通道模块通过2D NoC与GDDR6子系统的交互方式。可配置启用2D NoC或DC接口的GDDR6子系统数量,并在顶层模块中设置每个子系统的目标控制器ID。 图3 • Speedster7t AC7t1400和AC7t1500通过2D NoC实现的GDDR6生成器和校验器逻辑 图3 • Speedster7t AC7t1400和AC7t1500通过2D NoC实现的GDDR6生成器和校验器逻辑

    寻址

    每个数据包生成器/校验器逻辑块都绑定到一个NAP,以与关联的目标GDDR6子系统交互。下表中的值用于GDDR6的NoC地址方案的控制器ID域,指示每个NAP发送和接收存储事务的目标GDDR6端点,有关NAP地址方案的更多细节,请参阅《Speedster7t 2D片上网络用户指南》(UG089)。

    表28 • Speedster7t AC7t1400和AC7t1500的GDDR6子系统控制器ID

    GDDR6 ControllerControl ID [36:33]
    GDDR6_0 Channel 0 4’b1100
    GDDR6_0 Channel 1 4’b1101
    GDDR6_1 Channel 0 4’b0100
    GDDR6_1 Channel 1 4’b0101
    GDDR6_2 Channel 0 4’b0000
    GDDR6_2 Channel 1 4’b0001
    GDDR6_3 Channel 0 4’b1000
    GDDR6_3 Channel 1 4’b1001
    GDDR6_4 Channel 0 4’b1111
    GDDR6_4 Channel 1 4’b1110
    GDDR6_5 Channel 0 4’b0111
    GDDR6_5 Channel 1 4’b0110
    GDDR6_6 Channel 0 4’b0011
    GDDR6_6 Channel 1 4’b0010
    GDDR6_7 Channel 0 4’b1011
    GDDR6_7 Channel 1 4’b1010

    为了根据NoC地址映射构造GDDR6存储地址,这些控制ID值在顶层RTL文件中被定义为GDDR6_ID_NOC_CH1本地参数中的9位值:

    // GDDR6 target address ID. Pages are defined in 2D NoC User Guide, Address Mapping
    // Defined as 9 bit field. 9th bit(LSB) controls channel selection. All 2D NoC
    interfaces are set to channel 1
    localparam [71:0] GDDR6_ID_NOC_CH1 = {9'd10, 9'd2, 9'd6, 9'd14, 9'd9, 9'd1, 9'd5,
    9'd13};

    注:东侧的GDDR6控制器对通道1使用偶地址,西侧则使用奇地址,因此GDDR6_ID_NOC_CH1中有四个偶数值和四个奇数值。

    基于DC接口的测试结构

    注:DC接口仅适用于Speedster7t AC7t1400和AC7t1500 FPGA。

    下图展示了AXI存储通道模块通过DC接口与GDDR6子系统的交互方式,共有四个GDDR6子系统(GDDR6_1、2、5、6)支持直连可编程逻辑区的接口。可通过《GDDR6子系统控制ID》表指定所需的子系统,本参考设计中,所有DC接口均连接到GDDR6子系统的0通道,有关DC接口连接的更多细节,请参阅《Speedster7t GDDR6用户指南》(UG091)。 图4 • Speedster7t AC7t1400和AC7t1500通过DC接口实现的生成器/校验器逻辑 图4 • Speedster7t AC7t1400和AC7t1500通过DC接口实现的生成器/校验器逻辑

    模拟

    本设计支持两种仿真模式:总线功能模型(BFM)模式或独立模式。 不支持全芯片 RTL 仿真,且Riviera工具不支持独立模式仿真。 ·在BFM 模式下,测试平台集成了用于 GDDR6 子系统和存储器的总线功能模型(BFM)。 ·在独立模式下,仅对片上互联结构(fabric)RTL 以及 2D NoC 行为级模块进行仿真,不仿真 DC 接口通道。

    设计参数与端口

    顶层参数

    GDDR6参考设计的顶层RTL模块包含以下参数:

    表29 • Speedster7t AC7t1400和AC7t1500 GDDR6参考设计顶层RTL参数

    Parameter NameDefault ValueDescription
    GDDR6_NOC_CONFIG 8’b11111111 Signifies which of the 8 GDDR6 subsystems are enabled for 2D NoC interface testing (1 = enabled, 0 = disabled): bit[0] – GDDR6_0 bit[1] – GDDR6_1 … bit[7] – GDDR6_7
    GDDR6_DCI_CONFIG 4’b1111 Signifies which of the 4 GDDR6 subsystems are enabled for DC interface testing (1 = enabled, 0 = disabled): bit[0] – GDDR6_1 bit[1] – GDDR6_2 bit[2] – GDDR6_5 bit[3] – GDDR6_6

    存储通道参数

    NAP和DC接口通道分别支持最大16拍和64拍的突发传输,因此实例化存储通道时,必须相应地声明MAX_BURST_LEN参数。

    顶层端口

    GDDR6参考设计的顶层RTL模块包含以下输入输出端口:

    表30 • Speedster7t AC7t1400和AC7t1500 GDDR6参考设计顶层RTL端口

    Signal NameWidthDescription
    i_nap_clk 1 Clock driving the logic interfacing with the NAP running at 500 MHz.
    i_reg_clk 1 Clock driving the logic interfacing with the register control block running at 200 MHz.
    i_adm_clk 1 Clock driving the ACX_DEVICE_MANAGER soft IP running at 100 MHz.
    led_l 8 LED output bus to determine status of training and test which are tied to GPIO LED outputs on the VectorPath S7t-VG6 and 815 cards (only applicable to AC7t1500).
    gddr6_*_dc0_clk 1 Clock driving the logic interfacing with the DC interface.
    gddr6_dc0 DC interface AXI signals.
    pll_lock 1 Lock signal for clock i_nap_clk .
    pll_reg_adm_lock 1 Lock signal for clocks i_reg_clk and i_adm_clk.
    pll_gddr_NE_nap_lock 1 Lock signal for PLLs driving eastern GDDR6 NAP channels
    pll_gddr_NE_dci_lock 1 PLL lock signal for DC interface channels on GDDR subsystems 5 and 6.
    pll_gddr_NW_nap_lock 1 Lock signal for PLLs driving western GDDR6 NAP channels
    pll_gddr_NW_dci_lock 1 PLL lock signal for DC interface channels on GDDR subsystems 1 and 2.

    设计考量

    本设计中需考虑以下若干要点

    时钟

    PLL的源acxip文件位于/src/acxip目录,驱动设计所需的PLL时钟详细信息如下表所示:

    表31 • Speedster7t AC7t1400和AC7t1500参考设计时钟

    ClockDirectionFrequency (MHz)Description
    pll fpga_fab_clk_7 Input 100 External reference input clock for the PLL.
    i_nap_clk Output 500 Clock for NAP memory channels.
    pll_reg_adm fpga_fab_clk_7 Input 100 External reference input clock for pll_reg_adm .
    noc_clk Output 200 2D NOC Reference clock.
    i_reg_clk Output 200 Clock for register control block logic.
    i_adm_clk Output 100 Clock for ACX_DEVICE_MANAGER soft IP.
    pll_gddr_NE_dci fpga_fab_clk_2 Input 400 External reference input clock for pll_gddr_NE_dci.
    gddr6_5/6_dci_clk Output 275 Reference clock to the corresponding GDDR6 direct-connect interface. This clock is the source of the GDDR6 DC interface gddr6_*_dc0_clk input to the design.
    pll_gddr_NE_nap fpga_fab_clk_2 Input 400 External reference input clock for pll_gddr_NE_nap.
    gddr_ctlr_clk_NE Output 875/1000 Reference clock to GDDR6 controller subsystems on the east side of the FPGA.
    pll_gddr_NW_dci fpga_fab_clk_4 Input 10 External reference input clock for pll_gddr_NW_dci.
    gddr6_1/2_dci_clk Output 275 Reference clock to the corresponding GDDR6 direct-connect interface. This clock is the source of the GDDR6 DC interface gddr6_*_dc0_clk input to the design.
    pll_gddr_NW_nap fpga_fab_clk_4 Input 10 External reference input clock for pll_gddr_NW_nap.
    gddr_ctlr_clk_NW Output 875/1000 Reference clock to GDDR6 controller subsystems on the West side of the FPGA.

    表注:

  • 这些时钟输出直接从参考PLL连接到各自的目标模块,不经过FPGA可编程逻辑区,因此用户逻辑无法使用;

  • VectorPath S7t-VG6的GDDR6控制器时钟目标频率为875 MHz;

  • VectorPath 815的GDDR6控制器时钟目标频率为1000 MHz。


  • 时钟域

    设计包含两组并行的流量生成器和校验器模块,分别对应NAP接口和DC接口,时钟域如下表所示:

    表32 • Speedster7t AC7t1400和AC7t1500时钟域

    SourceDescription
    i_nap_clk NAP interface clock source.
    gddr6_*_dc0_clk Corresponding DC interface clock domain source.
    i_reg_clk Register control block clock domain source.
    i_adm_clk Achronix Device Manager clock domain source.

    注:为保持一致性,测试平台和综合约束文件中的频率/周期值需保持一致。


    复位

    设计利用PLL锁相信号进行复位处理。良好的设计规范要求复位信号需经过仔细的同步和处理,本参考设计使用多个reset_processor_v2模块实例,该模块整合多个复位源,将其正确同步到指定的时钟域,并对复位信号进行流水线处理,以支持扇出控制和重定时。reset_processor_v2模块的输出为每个时钟域提供同步复位信号。

    设计包含五个reset_processor实例:

  • 一个实例用于2D NoC电路,将PLL锁相信号作为异步复位,生成与i_reg_clk同步的复位信号reg_rstn,该输出还会同步到NAP时钟域;

  • 每个DC接口对应一个实例,共四个实例,每个实例同样将PLL锁相信号与各自的DC接口输入复位信号dci_input_rstn结合,生成本地信号dci_output_rstn。

  • 2D NoC和DC接口的GDDR6通道分配

    参考设计配置为所有2D NoC接口使用通道1,所有DC接口使用通道0,以避免不同AXI存储通道因向同一存储空间写入不同值而产生冲突。但在用户设计中,可能需要这两种接口访问存储器的同一地址空间(例如,2D NoC写入某个存储位置,DC接口从该位置读取,或反之)。

    对于DC接口,仅驱动gddr6_*_dc0信号。

    BMC接口模块

    修订版3及以上且BMC固件版本为1.4.0及以上的VectorPath S7t-VG6卡,以及VectorPath 815卡,要求在用户生成的可编程逻辑区设计中实例化BW_BMC_IF模块。该可编程逻辑区模块允许在VectorPath S7t-VG6/815卡的JTAG连接打开时,通过Bittware SDK持续监控温度。

    BW_BMC_IF模块还可选择实例化I2C启动器模块,该模块控制Speedster7t FPGA与VectorPath S7t-VG6/815卡上QSFP/QSFP-DD端口之间的通信。

    BW_BMC_IF模块默认在可编程逻辑区的第9列第2行实例化一对NAP_AXI_SLAVE/MASTER,因此VectorPath S7t-VG6/815卡的可编程逻辑区设计不得在该区域放置其他组件。但若设计无需通过USB线为宿主提供BW_BMC_IF模块的访问权限,则这些NAP可放置在可编程逻辑区的任意位置。若实例化I2C启动器模块,BW_BMC_IF模块还需要可编程逻辑区中存在另一个NAP_AXI_MASTER。

    该模块位于设计的/src/include目录下,需在顶层RTL文件中添加以下代码:

    // Include the BittWare BMC and I2C interface
    `include "BW_BMC_IF.svp"

    参数

    表33 • BW_BMC_IF模块参数

    Parameter NameDefault ValueDescription
    BMC_NAP_ROW 2 Row for BMC NAP placement.
    BMC_NAP_COLUMN 9 Column for BMC NAP placement.
    INCLUDE_I2C 0 Set to include I2C module.
    I2C_NAP_ROW f Row for I2C initiator NAP.
    I2C_NAP_COLUMN f Column for I2C initiator NAP.
    I2C_CLK_WIDTH 1000 Period of I2C interface clock input, i2c_clk_in , in ACLK cycles.

    端口

    表34 • BW_BMC_IF端口

    NameWidthDirectionDescription
    i_clk 1 Input 100 MHz clock.
    i_rstn 1 Input Negative sense reset.
    i_timestamp 32 Input Optionally add timestamp to build.
    i_fw_version 32 Input Optionally add a version register to the build.
    i_adm_status 32 Input Status from the Achronix Device Manager.
    i_fpga_avr_rxd 1 Input Input from the BMC.
    o_fpga_avr_txd 1 Output Output to the BMC.
    o_fpga_avr_txd_oe 1 Output Output enable for o_fpga_avr_txd.
    i_fpga_sys_scl_in 1 Input I2C interface clock input.
    o_fpga_sys_scl_out 1 Output I2C interface clock output.
    o_fpga_sys_scl_oe 1 Output I2C interface clock output enable.
    i_fpga_sys_sda_in 1 Input I2C interface data input.
    o_fpga_sys_sda_out 1 Output I2C interface data output.
    o_fpga_sys_sda_oe 1 Output I2C interface data output enable.
    o_fpga_i2c_req_l 1 Output I2C interface request signal from the Speedster7t FPGA.
    o_fpga_i2c_req_l_oe 1 Output I2C interface request enable.
    i_fpga_i2c_mux_gnt 1 Input I2C interface grant signal from the BMC.

    表注:

  • o_fpga_i2c_req_l和i_fpga_i2c_mux_gnt是控制FPGA与BMC之间共享I2C总线的独立信号。FPGA通过置位o_fpga_i2c_req_l请求访问I2C总线,BMC通过置位i_fpga_i2c_mux_gnt授予总线访问权限;FPGA使用完总线后,必须撤销o_fpga_i2c_req_l信号;

  • 当参数INCLUDE_I2C未置1时,这些引脚不实例化。


  • GDDR6子系统数量

    如《GDDR6参考设计顶层RTL参数》表所示,可通过参数配置本设计中使用的GDDR6子系统数量,默认配置启用所有GDDR6子系统。

    若设计配置为仅使用部分GDDR6子系统,需编辑默认布局约束文件/src/constraints/ace_placements.pdc,仅保留所用GDDR6子系统的布局配置。

    连续和非连续事务

    长期稳定性测试,请使用ac7t1500/demo/scripts/gddr6_ref_design_long_term.tcl文件中的脚本,该脚本在存储通道上连续执行24小时事务,每小时输出各存储通道的状态信息,指示是否存在事务失败。此测试仅适用于实际芯片;

    非连续测试,请使用ac7t1500/demo/scripts/gddr6_ref_design.tcl文件中的脚本,该脚本在每个存储通道上执行1600万次事务;仿真时同样使用该脚本,但每个存储通道仅执行300次事务。

    GDDR6 ACXIP配置

    VectorPath 815加速卡

    针对VectorPath 815卡上的Speedster7t AC7t1500(量产芯片)FPGA时,GDDR6存储组配置为与美光MT61K512M32-E器件接口。设计利用两个PLL组,将GDDR6控制器时钟配置为1000 MHz,DC接口时钟配置为275 MHz,存储器件配置为在×8翻盖模式下以16 Gbps的数据速率运行。

    VectorPath 815 CLKIO和GPIO ACXIP配置

    本设计与Achronix VectorPath 815加速卡兼容,/ac7t1500_vp815/demo/bitstream目录下提供的比特流可下载到VectorPath 815卡,通过/ac7t1500_vp815/demo/scripts目录下的脚本执行测试;此外,也可重新构建设计以在该卡上运行。设计在/ac7t1500_vp815/src/acxip目录中包含IP配置(.acxip)文件,这些文件指定了VectorPath 815卡的引脚分配(包括时钟和GPIO信号),CLKIO和GPIO相关的文件如下表所示:

    表35 • VectorPath 815 CLKIO和GPIO IP配置文件

    File[^t]Ports ConnectedDirectionDescription
    vp815_clkio_ne.acxip pcie_perst_l, fpga_fab_clk_2, fpga_fab_clk_3 Input PCIe PERST; 400 MHz differential; –
    vp815_clkio_nw.acxip fpga_fab_clk_4, fpga_fab_clk_5 Input 10 MHz differential; 400 MHz differential
    vp815_clkio_se.acxip fpga_fab_clk_6, fpga_fab_clk_7 Input 50 MHz differential; 100 MHz differential
    vp815_clkio_sw.acxip fpga_fab_clk_1 Input 200 MHz differential
    vp815_gpio_n_b0.acxip exp_gpio_fpga[7:0], ext_gpio_oe_l, led_oe_l, ext_gpio_dir[7:0] Output General-purpose I/O; GPIO output enable; Enable LED outputs; GPIO signal direction
    vp815_gpio_n_b1.acxip led_l[5:4] Output Board LEDs. active low
    vp815_gpio_n_b2.acxip led_l[7:6, 3:0] Output Board LEDs. active low
    vp815_gpio_s_b0.acxip fpga_i2c_mux_gnt, fpga_i2c_req_l, fpga_avr_txd, fpga_avr_rxd, fpga_ftdi_txd, fpga_ftdi_rxd, fpga_rst_l, irq_to_avr, recov_clk_0, qsfp_int_fpga_l, u1pps_in, u1pps_1, u1pps_2, ulpps_1_dir, ulpps_2_dir, ulpps_en_l, freq_dec, freq_inc, clk_gpio0, clk_gpio1 Input/Output I2C interface; AVR interface; FTDI interface; Driven from BMC controller; Interrupt; Connect to inputs on clock chip on VP815; QSFP interface. Active low; Provide PPS connectivity to the front panel; Tunes PLL clock frequency on VP815 clock device; Connect to inputs on clock chip on VP815
    vp815_gpio_s_b1.acxip
    vp815_gpio_s_b2.acxip recov_clk_1, fpga_sys_scl, fpga_sys_sda Output/Inout -; PC interface

    表注:t 若将用户设计移植到VectorPath 815卡,建议使用这些文件定义与卡的接口。


    仿真配置

    仿真模式

    本设计支持使用VCS、Questa或Riviera仿真工具进行全芯片总线功能模型(BFM)仿真模式,支持使用VCS或Questa仿真工具进行独立模式仿真。具体支持的模式可查看仿真Makefile,Makefile默认使用全芯片BFM模式;若要以独立模式运行仿真,可在仿真Make命令后添加FLOW=STANDALONE,或编辑Makefile中的flow变量,使后续所有仿真运行均使用RTL模式:

    # 命令行方式
    > > make (other options) FLOW=STANDALONE

    # 编辑Makefile方式
    FLOW := STANDALONE

    GDDR6 BFM(仅BFM模式)

    该模块是整个GDDR6子系统的总线功能模型(BFM),模拟GDDR6控制器、PHY和存储配置,BFM延迟模型同样考虑了这些对应模块的延迟。2D NoC的8个实例化GDDR6 BFM均使用唯一的NAP目标地址,指示每个数据包需要路由到的NAP/2D NoC结构;顶层设计文件中指定的目标地址还包含一个指定位,用于指示GDDR6子系统中哪个通道用于事务传输。本设计中,GDDR6 BFM配置为以16 Gbps的数据速率运行。 图5 • 单个GDDR6子系统2D NoC/DC接口测试结构框图 图5 • 单个GDDR6子系统2D NoC/DC接口测试结构框图

    GDDR6数据速率

    仿真中的GDDR6数据速率可通过启用以下文件中的对应行定义:

    • BFM模式:/sim/<simulator>/system_files_bfm.f

    注:本版本不支持全芯片RTL模式。

    设计安装

    下载

    设计可通过Achronix支持网站下载(需Achronix支持账户),以下两篇知识库文章包含演示、参考和教程设计的下载链接:

    1.《如何下载演示和参考设计?》:包含参考设计和移植到VectorPath卡的设计;

    2.《如何下载教程?》:包含专注于工具流程(使用ACE和Synplify Pro)的设计。

    注:访问上述文章需登录,若要获取访问权限,请参阅《如何注册Achronix支持账户?》。

    打包格式

    设计以ZIP压缩包形式提供,命名格式如下:

    <design_name>_<design_version>_<date_of_packaging>.zip

    压缩包包含以下内容:

  • 所有源代码;

  • 设计构建脚本;

  • 仿真脚本文件;

  • 可选的图形界面(GUI)项目文件。

  • 此外,压缩包根目录包含发布说明,记录设计的变更历史。

    操作系统

    Linux

    设计构建脚本和流程原生支持Linux,已在Ubuntu 22.04LTS系统上构建和测试;批处理构建流程使用Makefile,已在Bash环境下测试。

    Windows

    Windows 10系统下的脚本化仿真或实现流程需安装以下任一工具:

  • Windows下的Linux环境(如www.cygwin.com),安装时需包含Tcl解释器和make可执行文件。由于Cygwin与原生Linux存在诸多差异,使用时请参阅Achronix支持网站的知识库文章[如何配置Cygwin环境以运行Achronix工具套件?](https://support.achronix.com/hc/en-us/articles/13899761403540-How-Do-I-Set-Up-My-Cygwin-Environment-to-Run-the-Achronix-Tool-Suite);

  • Windows版Tcl解释器和make可执行文件(若Cygwin未包含),有多种免费和付费版本可供选择。

  • 若无法安装上述任一选项,仍可在Windows下运行部分流程:

  • 实现流程:提供Synplify和ACE的GUI项目文件,可直接通过工具的GUI模式构建;

  • 仿真流程:提供可在QuestaSim Tcl控制台中执行的Tcl脚本,支持在Windows下使用QuestaSim进行仿真,更多细节请参阅《仿真》章节。

  • 注:为确保脚本流程正常运行,ACE需安装在路径名称无空格的目录中,示例路径如下:

    • Windows:C:\\Achronix\\ACE\\x.y.z\\Achronix_CAD_Environment

    • Linux(单用户):/home/<user_id>/ACE/Achronix-linux

    • Linux(共享):/opt/ACE/Achronix-linux

    此外,Windows系统下安装时,环境变量ACE_INSTALL_DIR需使用“/”作为路径分隔符,而非“\\”,示例如下:

    ACE_INSTALL_DIR = C:/Achronix/ACE/10.3.1/Achronix_CAD_Environment/Achronix

    工具版本

    所有设计均兼容以下工具版本:

    表36 • 最低工具版本要求

    SoftwareVersion [^t]
    ACE 10.3.1
    Device Simulation Model 10.2
    Synplify Pro V-2023.09X
    Mentor Questa 10.7c-1
    Synopsys VCS P-2019.06
    Aldec Riviera Pro 2021.10-x64

    表注:t 表中为最低要求版本,预计更新的版本同样兼容本设计。


    环境变量

    ACE_INSTALL_DIR

    为支持可移植项目,设计使用环境变量ACE_INSTALL_DIR,该变量需指向ACE安装目录(即ace可执行文件所在目录),综合和仿真流程均通过该变量定位ACE库文件,更多细节请参阅"操作系统"章节。

    SYNPLIFY_HOME

    从10.0版本开始,ACE支持集成综合功能,可在ACE设计环境中使用Synplify Pro。为支持该功能,需定义Synplify Pro的安装路径,通过环境变量SYNPLIFY_HOME指定,该变量指向Synplify Pro的安装目录(目录下需包含/bin目录及Synplify Pro可执行文件)。

    启动ACE前,必须在环境中设置SYNPLIFY_HOME变量:

    # Example of checking and then setting SYNPLIFY_HOME within Linux Bash shell.
    # Please check your particular shell for how to set environment variables

    bash-4.2$ echo $SYNPLIFY_HOME #
    Check if variable is set.
    # A
    blank response indicates that the variable is not set
    bash-4.2$ which synplify_pro
    /opt/synopsys/SynplifyPro/V-2023.09X/bin/synplify_pro #
    Find path to Synplify Pro installation
    bash-4.2$ export SYNPLIFY_HOME=/opt/synopsys/SynplifyPro/V-2023.09X # Set
    the variable to the installation directory
    bash-4.2$ echo $SYNPLIFY_HOME #
    Check variable is set correctly
    /opt/synopsys/SynplifyPro/V-2023.09X

    目录结构

    设计的目录结构便于导航和分离源文件与生成文件,每个支持的器件对应一个顶层目录,目录结构可根据偏好修改,但修改后需相应调整Makefile和构建脚本。为支持可移植性,建议使用相对路径而非绝对路径,并通过环境变量指定根目录。

    若需在设计中更改所选器件,请参阅以下知识库文章:如何将Achronix Speedster用户设计移植到新器件?

    注:并非所有目录在所有设计中均存在,部分设计可能不需要特定文件。 图6 • 设计目录结构 图6 • 设计目录结构

    注:后缀为“s7tvg6”等的子目录,表示该子目录下的设计文件针对特定板卡;若子目录无后缀,则其下的源文件可能不针对任何特定板卡。

    语言支持

    参考设计支持Verilog、SystemVerilog和VHDL RTL语言,可用于构建和独立仿真。若使用全芯片BFM仿真,顶层测试平台需使用Verilog或SystemVerilog,但被测设计(DUT)可使用VHDL编写。

    约束文件

    设计在/src/constraints目录下提供完整的约束文件集,展示了如何将各种约束和指令应用于设计,约束文件及其用途如下表所示:

    表37 • 约束文件详情

    File NameUsage
    ace_constraints.sdc Timing constraints used by ACE. More than one SDC file can be included in an ACE project.
    ace_options.tcl Controls ACE settings such as implementation options, flow mode, speed grade and reporting of unconstrained paths. Also used to define Synplify Pro options for ACE-driven integrated synthesis flow.
    ace_placements.pdc [^t] Fixes locations of elements within the ACE fabric and creation of placement regions.
    synplify_constraints.fdc Synplify FPGA design constraints. Sets attributes such as compile points, or default memory styles.
    synplify_constraints.sdc Synplify timing constraints. Clock and timing constraints. Should match those set in ace_constraints.sdc .
    synplify_options.tcl Controls Synplify options for standalone synthesis flow, such as top module. Creates synthesis specific parameters, generics, and defines.

    表注:可编程逻辑区与I/O环之间的引脚布局由I/O环设计器自动创建,并在<design_name>_ioring.pdc文件中提供。

    I/O环约束文件

    除上述约束文件外,ACE I/O设计器工具套件还生成针对可编程逻辑区核心与包含接口子系统的I/O环之间接口的专用约束文件。这些约束文件可通过ACE从相应的.acxip文件重新生成,但为简化构建流程,为需要配置I/O环接口子系统的项目提供了预生成文件,这些文件位于/src/ioring目录下,部分常用文件说明如下:

    表38 • I/O环约束文件详情

    File NameUsage
    <design_name>_ioring.sdc I/O timing constraints for direct connection interfaces between the fabric and the I/O ring.
    <design_name>_ioring.pdc Placement of the fabric I/O pins to assign them to the direct connection interfaces in the I/O ring.
    <design_name>*ioring\\delays<speed\\grade><temperature>*<fast/slow>.sdc Timing constraints from the I/O ring peripheral signals to the core fabric
    <design_name>_ioring_util.xml Used by ACE to generate a combined utilization report including the fabric and I/O ring resources.
    <design_name>_ioring_power.xml Used by ACE to generate an estimated power report for the design.

    设计构建

    设计使用统一的构建环境,通过Makefile和脚本以批处理模式运行Synplify Pro和ACE。

    前置条件

    构建设计前,需确保以下配置完成:

  • 环境变量ACE_INSTALL_DIR已设置,指向包含ACE可执行文件的ACE安装目录;

  • ACE已添加到环境路径,将$ACE_INSTALL_DIR添加到路径变量;

  • Synplify Pro已添加到环境路径;

  • 若使用ACE集成综合(ACE 10.0及以上版本),环境变量

    S

    Y

    N

    P

    L

    I

    F

    Y

    H

    O

    M

    E

    需指向

    S

    y

    n

    p

    l

    i

    f

    y

    P

    r

    o

    安装目录(包含

    /

    b

    i

    n

    目录的层级),或环境变量

    SYNPLIFY_HOME需指向Synplify Pro安装目录(包含/bin目录的层级),或环境变量

    SYNPLIFYHOME需指向SynplifyPro安装目录(包含/bin目录的层级),或环境变量 ACX_SYNPLIFY_TOOL_PATH需指向synplify_pro可执行文件。

  • I/O环文件

    对于Speedster7t系列器件,硬核子系统(GDDR、以太网等)均有各自的配置文件,指定每个子系统的配置,这些文件位于/src/acxip目录下,通过以下方式包含在ACE项目中:

    • 直接包含在/src/ace GUI项目文件中;

    • 批处理流程中,包含在/src/filelist.tcl文件的multi_acxip_files部分。

    ACE编译和布局布线设计时,需使用这些源acxip配置文件生成I/O环约束文件,这些文件指定了硬核子系统(围绕可编程逻辑区形成I/O环)与可编程逻辑区逻辑之间的时序和布局约束,还包含硬核子系统的比特流编程信息。

    所有Speedster7t参考设计的/src/ioring目录中均包含预生成的I/O环文件,这些文件使用设计发布说明中指定的ACE版本预生成。

    若使用更新版本的ACE,可能需要重新生成这些I/O环文件,更新步骤如下:

    注:更新/src/ioring文件前,需确保文件可写;此外,/src/acxip文件也需设为可写,因为新版本ACE可能会更新这些文件。默认情况下,这些文件为只读状态。

    I/O环批处理流程

  • 使用make默认流程(无参数)或make ioring_only流程重新生成I/O环文件,ioring_only选项仅生成I/O环文件,不执行综合或ACE布局布线;

  • I/O环文件的写入目录通过/src/filelist.tcl文件中的generate_ioring_path变量设置,路径相对于/src/ace项目目录,默认值为…/ioring,即指定/src/ioring目录。

  • I/O环GUI流程

  • 在ACE GUI中,选择“IP配置”视角;

  • 确保“IP问题”窗口中无错误或警告,若有需先解决; 图7 • IP问题窗口 图7 • IP问题窗口

  • 通过以下任一GUI方式触发I/O环设计文件生成:

    • 打开“项目→IP”选项下的任意项目硬核子系统配置文件,在打开的IP配置文件中选择“生成”;

    • 点击工具栏中的“生成I/O环设计文件”按钮; 图8 • 生成I/O环设计文件的工具栏按钮 图8 • 生成I/O环设计文件的工具栏按钮

  • ACE会提示选择保存I/O环文件的目录,选择/src/ioring,不要使用ACE默认目录/src/ace/ioring_design; 图9 • ACE选择IP生成文件目录

  • 图9 • ACE选择IP生成文件目录

  • 在“I/O环文件生成配置”对话框中点击“完成”,生成I/O环文件。
  • I/O环文件重新生成后,可检查/src/ioring目录,确保新文件已生成,且文件版本与用于生成它们的ACE版本匹配。

    更改速度等级

    ACE根据ACE项目中选择的速度等级(“项目视角→选项→速度等级”),生成命名对应的I/O环.sdc延迟文件。若更改速度等级,ACE会生成新的对应命名文件,这些新文件会在批处理和GUI模式下添加到ACE项目中(需确保从项目中移除之前速度等级的文件)。

    警告:批处理流程中更改速度等级时,若使用默认流程选择生成I/O环,ACE项目会包含该次运行的新速度等级约束文件;但后续运行时,ACE项目会根据/src/filelist.tcl文件中指定的文件动态构建,因此选择新速度等级后,需更新filelist.tcl文件,包含与所选速度等级对应的新文件。

    批处理流程

    根目录下的/build目录包含Makefile,运行Makefile前需确保满足上述前置条件。Makefile中的相对路径设计为从/build目录运行,若将Makefile移动到新位置或在该目录外调用,需相应修改路径。

    批处理流程支持两种模式:ACE驱动的集成综合,或Synplify Pro独立综合。

    注:默认流程使用ACE驱动的集成综合,需ACE 10.0或更高版本。

    ACE驱动的集成综合(默认)

    该流程下会创建以下目录:

    • /build/results/ace/impl_1/syn:包含生成的Synplify Pro项目和生成的网表;

    • /build/results/ace/impl_1/pnr:包含布局布线后的设计,该目录下的/output目录包含比特流及下载和运行时所需的其他文件。可在/src/constraints/ace_options.tcl中设置自定义的Synplify Pro选项和ACE选项。

    注:运行ACE驱动的集成综合流程需ACE 10.0或更高版本。

    Synplify Pro独立综合

    独立综合的Makefile目标为“make run_ss”,适用于ACE 10.0之前的版本,或ACE 10.0及以上版本中需使用独立综合流程的场景,该流程下会创建以下目录:

    /build/results/syn目录:Synplify Pro以批处理模式执行,综合设计并在/build/results/syn/rev_1/<design_name>.vm中生成网表;若综合失败,可查看/build/results/syn/rev_1/<design_name>.srr获取综合失败详情; 可在/src/constraints/synplify_options.tcl中设置自定义的Synplify Pro选项;

    /build/results/ace(10.0之前版本)或/build/results/ace/pnr(10.0及以上版本)包含布局布线后的设计。 该目录下的/output目录包含比特流及下载和运行时所需的其他文件; 可在/src/constraints/ace_options.tcl中设置ACE选项。

    更改默认流程

    若使用ACE 10.0或更高版本,且希望将独立综合流程设为默认,需修改Makefile中的REV_DIR变量,将其设置为“ace”以外的值,强制使用独立综合流程:

    # ACE 10.0及以上版本,默认REV_DIR="ace"时使用ACE集成综合
    # 将REV_DIR设置为其他值(如rev_1),默认使用独立综合流程
    # 如需覆盖REV_DIR的默认设置,可使用run_ss目标
    REV_DIR := ace

    或通过调用run_ss目标运行Make流程:

    $> make run_ss

    Makefile选项

    Makefile支持多种构建流程选项:

    CommandUsage
    $ make Default flow. Regenerate all files in /src/ioring. Synthesize and build
    a single implementation with ACE.[^t]
    $ make run Same as "make, except does not regenerate the ioring files.[^t]
    $ make syn_only Synthesis only, using standalone Synplify Pro.
    $ make pnr_only Run ACE place and route only. This requires synthesis to have
    previously been run.
    $ make run_mp Run multiprocess. Synthesize and build multiple implementations
    with ACE multiprocess.
    $ make run_ss Same as “make run” except uses standalone Synplify Pro.
    $ make ioring_only Regenerate all files in /src/ioring.
    $ make clean Regenerate all files in /src/ioring.

    注:默认情况下,使用ACE驱动的集成综合(需ACE 10.0或更高版本)。


    约束文件

    除所有I/O环约束文件外,任何构建流程均会使用额外的约束文件,完整的约束文件说明请参阅《设计安装→约束文件》章节。

    注:目前,Achronix建议为Synplify Pro和ACE分别使用独立的时序约束(.sdc)文件,不建议使用Synplify Pro生成的.scf文件约束ACE中的时序。

    流程中使用的文件完整列表及对应的工具,可通过查看相关的/src/filelist.tcl文件确定。

    注:部分设计使用多个前缀或后缀不同的filelist.tcl文件。

    GUI流程

    设计提供预生成的ACE GUI项目文件,位于/src/ace目录下,打开该文件即可交互式编辑或运行构建。

    注:使用GUI项目时,所有生成的文件均放置在GUI项目文件所在目录;若生成全新的Synplify Pro项目,需将该项目生成的网表相应导入ACE项目。

  • ACE中,实现目录生成为/src/ace/impl_<name>,使用集成综合时,实现目录下包含/pnr(布局布线结果)和/syn(集成综合结果)目录;

  • ACE中,使用I/O设计器生成新的IP配置文件时,参考设计的目标目录为/src/ioring,ACE默认目录为/src/ace/ioring_design,保存这些文件时需明确指定/src/ioring路径。

  • 批处理流程运行构建时,相关项目文件均写入/build/results目录下,该目录下包含生成的ACE和Synplify Pro项目文件,均可在GUI模式下打开,进行交互式重新运行或编辑构建。

    时序收敛

    所有Achronix客户设计均已在其发布时对应的工具版本下实现时序收敛,具体工具版本信息可查看项目根目录下的README.txt或Release_Notes.txt文件。Linux系统下,批处理和GUI流程均能实现时序收敛。

    注意:Windows系统下编译时,不保证设计的时序收敛。

    对于兼容ACE 10.0或更高版本的设计,使用ACE集成综合时可实现时序收敛;独立综合可能具有不同的综合选项,因此使用独立综合构建时,不保证时序收敛。

    若使用的工具版本高于设计发布时的版本,通常仍可实现时序收敛;若未实现,建议运行ACE多进程,寻找新的实现选项以实现时序收敛,运行前建议先将所有实现选项重置为默认值:

  • GUI模式下,使用新版本ACE打开项目时,选择“重置所有选项”;

  • 批处理模式下,移除ace_options.tcl文件中“从多进程提取”部分列出的所有选项。

  • 器件设置

    所有参考设计均按<DESIGN>/<DEVICE>的方式为每个器件预配置,但可能需要在综合和布局布线中更改所选器件,以匹配实际实现的器件。

    Verilog宏定义

    为便于在不同器件之间切换,ACE库包含器件专用的仿真和综合文件,综合文件名为<ACE_INSTALL_DIR>/libraries/device_models/<DEVICE>_synplify.v,这些文件包含器件专用的宏定义,用于包含或排除代码的必要部分。

    这些宏定义命名格式为ACX_DEVICE_<完整器件名称>,以下代码示例展示了如何在设计中使用这些宏定义,选择性地包含器件专用模块:

    // ———————————————————————-
    // Support for the AC7t1400 device
    // ———————————————————————-
    // If this design is intended to be targeted to the AC7t1400 device,
    // then it is necessary to instantiate the SRM, (Serial Rate Monitor).
    // This is required in all AC7t1400 designs, as shown below
    // ———————————————————————-
    // The define ACX_DEVICE_AC7t1400 is set as follows :
    // In simulation by $ACE_INSTALL_DIR/libraries/device_models/
    AC7t1400_simmodels.v
    // In synthesis by $ACE_INSTALL_DIR/libraries/device_models/
    AC7t1400_synplify.v
    //
    // For this design the above files are selected as follows
    // In simulation, in the appropriate /sim/<simulator>/Makefile
    // In batch build flow, the selection is done in /scripts/
    create_syn_project.tcl based on the selected device
    // ———————————————————————-
    `ifdef ACX_DEVICE_AC7t1400

    (* must_keep *) ACX_SRM x_ACX_SRM () /* synthesis syn_noprune=1 */;
    `endif

    GUI流程

    首次更改器件时,需通过GUI流程将IP定义文件(/acxip)目标设置为新器件,然后创建针对新器件正确配置的新IP生成文件(/src/ioring)。

    综合

    若使用独立综合,第一步需通过Synplify Pro GUI项目生成针对新器件的网表,在.prj文件中进行以下更改:

    #project files
    add_file -verilog "$ACE_INSTALL_DIR/libraries/device_models/AC7t1400_synplify.v" # <-
    Update library file to new device

    #device options
    set_option -part AC7t1400 # <- Update selected part

    注:建议使用文本编辑器编辑Synplify Pro项目文件,而非通过工具编辑。工具不识别用于创建ACE库文件相对路径的环境变量ACE_INSTALL_DIR,若在工具中编辑项目,相对路径会被替换为绝对路径,降低项目的可移植性。

    完成上述更改后,可执行综合并生成网表。

    ACE

    ACE GUI项目需按以下步骤更新:

  • 在“项目视角”的“选项”标签页中,选择新的目标器件; 图10 • ACE选择目标器件 图10 • ACE选择目标器件
  • 从“项目视角”的“项目”标签页“IP”选项中,打开所有IP定义文件; 图11 • ACE选择IP 图11 • ACE选择IP
  • 在每个IP定义文件中,选择新器件; 图12 • 选择IP器件 图12 • 选择IP器件
  • 保存所有IP定义文件(可对每个文件按Ctrl+S,或在I/O环生成过程中自动保存所有acxip文件);
  • 按"I/O环文件"章节中的步骤运行I/O环生成。 完成上述更改后,可正常执行设计的布局布线。
  • 批处理流程

    建议在使用新器件运行批处理构建流程前,先通过GUI流程更新ACE生成的IP文件(如上述步骤所示)。IP文件更新后,按以下步骤更改器件:

  • 在/build/Makefile中,修改DEVICE变量:
  • # ——————————
    # If targeting Speedster7t AC7t1500 device, enable the lines below
    # If using a Speedcore, disable this section
    # ——————————
    # Currently supported devices, AC7t1500, AC7t1400, AC7t800
    DEVICE := "AC7t1500"

  • 或在调用Makefile时,通过命令行覆盖默认器件:
  • $> make DEVICE=AC7t1500

    设计运行

    本参考设计可针对实际芯片运行,包含预编译的比特流和运行时脚本。若重新构建设计,可使用相同的方法和脚本验证新设计在支持的板卡上的运行情况。

    参考文档

    有关比特流编程、Tcl脚本流程运行及可用Tcl命令的完整细节,请参阅《Speedster FPGA运行时编程》(AN025)。

    前置条件

    搭载支持器件的板卡需通电,并通过USB连接到宿主计算机;建议宿主计算机使用与构建设计时相同版本的ACE,具体ACE版本可查看设计中的发布说明或README文件。

    注:ACE 9.2及以上版本支持本节详细说明的比特流处理流程。

    警告:若ACE安装在Linux系统上,通常需授予ACE访问USB端口的权限,具体操作因Linux发行版而异。有关ACE安装的完整细节,请参阅《ACE安装和许可指南》(UG002)。

    注:从ACE 10.3版本开始,Achronix不再以PDF用户指南的形式发布ACE GUI帮助文档,相关内容可通过ACE内置的帮助系统访问。

    文件和目录

    运行时比特流和脚本分布在以下目录中: 图13 • 运行时文件目录结构 图13 • 运行时文件目录结构

    运行时流程

    对十六进制比特流进行编程,并执行运行时脚本,在FPGA上演示设计功能。

    比特流编程

    下载参考设计后,按以下步骤操作:

  • 打开ACE;

  • 在Tcl控制台窗口中,导航到<design_name>/<device>_<board>/demo/scripts目录;

  • 获取连接板卡的JTAG ID,格式为ACVPxxxxxx;

  • 将该值赋值给Tcl变量jtag_id;

  • 以下示例展示了上述步骤的执行序列: 图14 • 设置jtag_id变量 图14 • 设置jtag_id变量 5. 对比特流进行编程,确保使用正确的器件版本对应的program_hex_file函数。建议使用相对于当前目录的相对路径,program_hex_file函数会在JTAG端口未打开时自动打开端口; 图15 • 比特流编程 图15 • 比特流编程 部分设计的demo/scripts目录中可能包含执行上述所有步骤的脚本,更多信息可查看每个设计中的发布说明/readme文件。

    设计运行

  • 执行运行时脚本(通过source命令),脚本会向控制台输出状态和结果; 图16 • 执行运行时脚本 图16 • 执行运行时脚本 注:JTAG端口已打开的警告为正常现象,JTAG端口在之前的编程步骤中已打开;运行时脚本包含打开JTAG端口的命令,以防器件编程后端口被关闭。为便于构建的版本控制,Achronix提供的工具流程生成的比特流名称中包含主版本号和次版本号(如my_design_top.1.12.hex),这些版本号定义在/src/include/version_defines.svh文件中,同时填充到寄存器控制块的版本寄存器中,因此可将比特流名称与内部版本号关联,确定当前运行的构建版本。
  • 板卡状态监控

    若适用,观察板卡上的四个多色LED,确保其显示与设计文档中描述的行为一致。每个LED显示的颜色由8位led_l总线中对应LED的两位设置决定,具体如下表所示:

    表39 • VectorPath S7t-VG6卡多色LED

    LED [^t]SignalFPGA PinColorBehaviorFPGA Pin NameVertical Location
    D3 led_l[0] AP17 Orange Active Low GPIO_N0_BYTE2_BIT_0 Bottom (nearest the board).
    D3 led_l[4] AN16 Green Active Low GPIO_N0_BYTE1_BIT_0 Bottom (nearest the board).
    D4 led_l[1] AR17 Orange Active Low GPIO_N0_BYTE2_BIT_1 Second position.
    D4 led_l[5] AR16 Green Active Low GPIO_N0_BYTE1_BIT_1 Second position.
    D5 led_l[2] AT17 Orange Active Low GPIO_N0_BYTE2_BIT_2 Third position.
    D5 led_l[6] AR19 Green Active Low GPIO_N0_BYTE2_BIT_6 Third position.
    D6 led_l[3] AV18 Orange Active Low GPIO_N0_BYTE2_BIT_3 Top position.
    D6 led_l[7] AT20 Green Active Low GPIO_N0_BYTE2_BIT_7 Top position.

    表注:当某个LED对应的两位led_l信号均置低时,LED显示为黄色。


    表40 • VectorPath 815卡多色LED

    LED [^t]SignalFPGA PinColorBehaviorFPGA Pin NameVertical Location
    LED1 led_l[0] AP17 Green Active Low GPIO_N0_BYTE2_BIT_0 Bottom (nearest the board).
    LED1 led_l[4] AN16 Orange Active Low GPIO_N0_BYTE1_BIT_0 Bottom (nearest the board).
    LED2 led_l[1] AR17 Green Active Low GPIO_N0_BYTE2_BIT_1 Second position.
    LED2 led_l[5] AR16 Orange Active Low GPIO_N0_BYTE1_BIT_1 Second position.
    LED3 led_l[2] AT17 Green Active Low GPIO_N0_BYTE2_BIT_2 Third position.
    LED3 led_l[6] AR19 Orange Active Low GPIO_N0_BYTE2_BIT_6 Third position.
    LED4 led_l[3] AV18 Green Active Low GPIO_N0_BYTE2_BIT_3 Top position.
    LED4 led_l[7] AT20 Orange Active Low GPIO_N0_BYTE2_BIT_7 Top position.

    表注:t 当某个LED对应的两位led_l信号均置低时,LED显示为黄色。


    设计仿真

    支持的仿真器

    参考设计提供仿真环境,包含Mentor QuestaSim、Synopsys VCS和Aldec Riviera仿真器的脚本。

    位置

    所有设计的根目录下均有/sim目录,该目录下包含/vcs、/questa和/riviera子目录,分别对应各仿真器。

    仿真流程

    适用于参考设计的仿真流程提供多种选项,可在速度和精度之间取得平衡,并非所有参考设计都支持所有流程选项,具体支持的选项可查看相应的Makefile。

    独立模式(Standalone)

    设计中的任何NAP均使用绑定到该NAP的独立模型,模拟存储行为。该模式是运行速度最快的仿真模式,但周期精度最低;NAP仅与其自身的存储模型交互,因此不支持多个NAP访问公共存储的场景。若要在提供的参考设计中启用该模式,需将仿真Makefile中的FLOW变量设置为STANDALONE。

    全芯片BFM模式(Full-Chip BFM)

    使用全芯片模型,包含周期精确的NoC,NoC周围的所有硬核接口均配有总线功能模型(BFM),这些BFM具有代表性的延迟,因此该模式可提供接近周期精确的仿真。该模式无需接口子系统执行初始化和校准步骤,相比全周期精确仿真,迭代时间更短。

    全芯片RTL模式(Full-Chip RTL)

    该模式使用子系统的完整寄存器传输级(RTL)代码,必要时结合外部组件(如存储)的周期精确模型,可提供完全周期精确的仿真,反映最终芯片的运行情况。大多数此类仿真需要使用提供的配置文件配置相关子系统,由于使用子系统的完整RTL代码,仿真速度比对应的BFM仿真慢,但时序精度完全准确。

    注:若要获取GDDR/DDR或PCIe子系统的加密RTL代码,需额外的授权仿真包,请联系Achronix技术支持获取授权和访问权限。

    若要在提供的参考设计中启用该模式,需将仿真Makefile中的FLOW变量设置为FULLCHIP_RTL。

    构建选项

    每个仿真器目录下均有一个Makefile,可编辑该文件配置仿真以适配用户设计,需设置以下变量:

    • FLOW:匹配所选的仿真流程,选项(Makefile中有详细说明)包括STANDALONE、FULLCHIP_BFM或FULLCHIP_RTL;

    • TOP_LEVEL_MODULE:为提供的设计预设,但若设计移植到用户测试平台,需更新该变量;

    • ACX_DEVICE_INSTALL_DIR:指向目标器件文件所在的目录(通常在ACE目录下),例如$ACE_INSTALL_DIR/system/data/AC7t1500,更多信息请参阅I/O环仿真安装说明。

    前置条件

    运行任何安装前,需确保以下配置完成:

    • 环境变量ACE_INSTALL_DIR已设置,指向包含ACE可执行文件的ACE安装目录;

    • 所需仿真器的路径已配置,对于VCS,还需设置VCS_HOME环境变量。

    自动文件列表生成

    仿真文件列表从../../src/filelist.tcl文件自动生成,创建仿真文件列表的脚本为../../scripts/create_sim_project.tcl,该脚本使用../scripts/sim_template.f或../../scripts/sim_template_bfm.f模板文件定义通用仿真选项。具体仿真器的Makefile会调用创建脚本(如下例所示),生成的sim_filelist.f文件结合了模板内容和../../src/filelist.tcl中的特定文件列表。

    文件

    每个/sim/vendor目录下包含以下脚本:

    • Makefile:支持多种仿真流程的Makefile,默认目标为编译并运行仿真;

    • system_files_bfm.f(仅全芯片BFM流程):全芯片BFM流程使用的系统文件列表,也可在该文件中添加用户定义;

    • system_files_rtl.f(仅全芯片RTL流程):全芯片RTL流程使用的系统文件列表,还包含指定哪些子系统使用周期精确RTL而非BFM的定义,定义命名格式为<子系统名称>_FULL(如GDDR6_2_FULL),也可在该文件中添加用户定义。

    VCS专用文件

    • fullchip_bfm_vcs_waiver.cfg(仅全芯片BFM流程):用于消除无害警告的豁免文件;

    • session.sim_output_pluson.vpd.tcl:DVE波形查看器的会话文件。

    QuestaSim和Riviera专用文件

    • wave.do:波形文件;

    • qsim_<design_name>.do:非Makefile GUI流程,跨操作系统兼容。

    RTL仿真定义

    编译和运行全芯片RTL流程时,需启用仿真编译的SystemVerilog定义。将仿真Makefile中的FLOW变量设置为FULLCHIP_RTL,会指示Makefile在编译命令行中包含system_files_rtl.f文件。

    system_files_rtl.f文件中启用了所有必要的定义,用于将仿真模块从BFM模型切换到完整RTL。例如,若使用GDDR6参考设计,希望仿真GDDR6存储控制器1的完整RTL,而其他所有GDDR6控制器使用BFM模型,需按以下方式编辑system_files_rtl.f文件:

    # Define GDDR Data Rate
    +define+GDDR6_DATA_RATE_16 # <—– For GDDR6 RTL simulation the user must
    enable one of the data rates.
    //+define+GDDR6_DATA_RATE_14
    //+define+GDDR6_DATA_RATE_12

    # Turn on GDDR RTL
    # Enable the desired GDDR memory controllers below
    # Any undefined controllers will use their BFM model
    //+define+ACX_GDDR6_0_FULL
    +define+ACX_GDDR6_1_FULL # <— User enables this define
    //+define+ACX_GDDR6_2_FULL
    //+define+ACX_GDDR6_3_FULL
    //+define+ACX_GDDR6_4_FULL
    //+define+ACX_GDDR6_5_FULL
    //+define+ACX_GDDR6_6_FULL
    //+define+ACX_GDDR6_7_FULL

    以下表格列出了启用各模块完整RTL(而非BFM)的可用定义:

    表41 • 仿真RTL定义

    Module [1][2]Define
    GDDR6 controller 0 ACX_GDDR6_0_FULL
    GDDR6 controller 1 ACX_GDDR6_1_FULL
    GDDR6 controller 2 ACX_GDDR6_2_FULL
    GDDR6 controller 3 ACX_GDDR6_3_FULL
    GDDR6 controller 4 ACX_GDDR6_4_FULL
    GDDR6 controller 5 ACX_GDDR6_5_FULL
    GDDR6 controller 6 ACX_GDDR6_6_FULL
    GDDR6 controller 7 ACX_GDDR6_7_FULL
    DDR4 controller ACX_DDR4_FULL
    Ethernet subsystems (both) ACX_ETHERNET_FULL
    PCIe Controller 0 (×8) ACX_PCIE_0_FULL
    PCIe controller 1 (×16) ACX_PCIE_1_FULL
    GPIO North block ACX_GPIO_N_FULL
    GPIO South block ACX_GPIO_S_FULL
    All SerDes lanes ACX_SERDES_FULL
    All PLLs and Clock Generators [^3] ACX_CLK_NW_FULL, ACX_CLK_NE_FULL, ACX_CLK_SW_FULL, ACX_CLK_SE_FULL

    表注:

  • 每个接口子系统的位置和名称可通过ACE IP配置视角查看,选择I/O布局图即可;
  • 并非所有接口子系统在所有器件中都可用,请查阅器件数据手册确认每个子系统的具体数量和命名;
  • 四个定义(每个角落一个)必须同时定义,由于存在共享实体,无法仅为部分PLL和时钟生成器定义RTL仿真。
  • 警告:为模块启用完整RTL仿真会增加仿真时间,若启用多个模块,仿真时间可能会显著延长。


    GDDR6 BFM存储大小

    如前所述,GDDR6仿真支持BFM和RTL两种模型。若要在RTL中设置支持的存储大小,需在测试平台中实例化相应的GDDR6模型;此外,使用GDDR6 BFM模型时,可在支持16Gb和8Gb器件大小的模型之间切换。

    默认情况下,GDDR6 BFM配置为支持16Gb器件(两个8Gb通道);若要将GDDR6 BFM设置为仅支持每个器件8Gb(两个4Gb通道),需为所有GDDR6控制器模块设置以下定义:ACX_GDDR6_BFM_8Gb

    建议在/sim/<simulator>/system_files_bfm.f文件中设置该定义。

    注:定义ACX_GDDR6_BFM_8Gb适用于DSM中的所有GDDR6 BFM,无法为不同的GDDR6 BFM设置不同的存储大小,该定义仅适用于仿真。硬件中,可单独配置每个GDDR6控制器,以匹配相应连接的GDDR6器件大小。

    运行时编程脚本

    许多参考设计在用户设计中使用控制模块(/src/reg_control_block.sv),该模块在参考设计中创建一组用户寄存器,用于运行时(芯片处于用户模式时)控制和监控测试。这些寄存器的编程与器件的配置阶段不同(配置阶段会将静态配置加载到各个接口子系统的控制和状态寄存器(CSR)存储空间)。用户寄存器为设计提供配置灵活性,可用于版本控制、确定设计功能、控制和监控序列及测试。

    仿真命令文件

    reg_control_block包含ACX_NAP_AXI_MASTER,用于控制生成的用户寄存器,可通过仿真命令文件对这些寄存器进行编程。仿真中,该命令文件由FPGA配置单元(FCU)的BFM模型读取,命令文件中的命令传输到ACX_NAP_AXI_MASTER,进而对参考设计中的用户寄存器执行所需操作。按照惯例,仿真命令文件为扩展名为.txt的文本文件,格式与《器件仿真模型》中展示的“配置文件格式”一致。

    运行时编程脚本

    仿真命令文件由运行时编程脚本生成,运行时编程脚本使用Tcl编写,可在ACE Tcl控制台中直接在硬件上执行。通过使用同一运行时编程脚本生成仿真命令文件,可确保仿真和硬件中测试的操作序列一致。

    运行时编程脚本包含多个关键部分,详细说明如下:

    # Include any utility files that may have common functions
    source AC7t1500_common_utils.tcl

    # Define simulation command filename name and location.
    # Path is relative to this script location
    set OUTPUT_FILENAME "../../sim/<simulation command filename>.txt"

    # Process any input arguments
    # IMPORTANT : This must be included for the reg_lib_sim_generate option
    ac7t1500::process_args $argc $argv

    # Open the simulation command file.
    # File will only be created if not running under ACE
    # Pass script name, ($argv0), for header
    ac7t1500::open_command_file $OUTPUT_FILENAME $argv0

    # When running under ACE, ensure jtag port is open
    # When generating a simulation command file, this call is ignored.
    ac7t1500::open_jtag

    # ———————————————————————
    # Test code starts here
    # ———————————————————————

    # ———————————————————————
    # Test code ends here
    # ———————————————————————

    # Close command file
    # File will only exist when not running under ACE
    ac7t1500::close_command_file $OUTPUT_FILENAME

    注:寄存器库Tcl函数使用基于器件的命名空间,以便在多个器件之间使用通用函数名,命令格式为<器件命名空间>::function()。上例适用于Speedster7t AC7t1500 FPGA,使用其他器件时,需将命令的命名空间更改为相应的目标器件。


    仿真命令文件生成

    运行时编程脚本和仿真命令文件均使用ACE内置的器件寄存器库,有关该寄存器库的完整细节,请参阅《Speedster FPGA运行时编程》(AN025)。若要生成仿真命令文件,需以批处理模式运行ACE,调用运行时编程脚本,命令如下:

    # Call to ACE in batch mode to create a simulation command file
    ace -batch -script_file <path to runtime programming script> -script_args "-
    reg_lib_sim_generate 1 -device $(BASE_NAME)"

    对于使用仿真命令文件的参考设计,生成命令包含在/sim/<simulator>/Makefile中,仿真命令文件生成在运行时编程脚本中指定的位置。参考设计中,仿真命令文件写入/sim目录,以便所有仿真器均可使用,示例仿真命令文件可在“配置文件格式”部分查看。

    reg_lib_sim_generate

    ACE需区分两种场景:一是运行时编程脚本在硬件上执行(可能需要打开JTAG端口或轮询寄存器响应),二是运行时编程脚本用于创建仿真命令文件。为区分这两种模式,器件寄存器库中使用了一个内置变量:reg_lib_sim_generate。

    • ACE在硬件上运行时,reg_lib_sim_generate未设置,Tcl脚本命令直接在ACE Tcl控制台中执行;

    • 按上例中的ace命令以批处理模式执行ACE时,reg_lib_sim_generate被设置,ACE会将运行时编程脚本的Tcl命令转换为等效的仿真命令,并写入仿真命令文件。

    若需要命令在硬件和仿真之间有所不同(例如,硬件中可运行包含数百万次事务的扩展测试,而仿真中执行此类测试不可行),可在运行时编程脚本中使用reg_lib_sim_generate变量选择不同的硬件和仿真控制流程。可通过Tcl函数::get_reg_lib_sim_generate()读取该变量的状态,示例如下:

    # Use function get_reg_lib_sim_generate to determine if this script is being run under
    hardware or simulation
    if { ![ac7t1500::get_reg_lib_sim_generate] } {
    # Hardware test – test 10M packets
    set num_pkts 10000000
    } else {
    # Simulation test – test 1000 packets
    set num_pkts 1000
    }

    测试平台序列

    使用仿真命令文件时,需确保其应用顺序与硬件中执行的顺序一致。

    运行时编程脚本在器件处于用户模式时执行,此前为配置模式(此时比特流加载到接口子系统和可编程逻辑区)。Speedster7t器件上的FCU_CONFIG_USER_MODE引脚指示该模式,仅当该信号置位时,才应执行仿真命令文件。有关配置引脚和编程模式的完整细节,请参阅《Speedster7t配置用户指南》(UG094)。

    以下示例序列展示了与DSM模型的连接、器件配置和运行时编程序列:

    // Create signal to indicate device configuration state
    // When set, device is in user mode
    logic chip_ready;

    // Instantiate the DSM model, (device dependant)
    `ACX_DEVICE_NAME `ACX_DEVICE_NAME (
    .FCU_CONFIG_USER_MODE (chip_ready)
    );

    // Programming sequence
    initial
    begin
    // Device configuration phase. Use ACE generated configurations
    // These configurations perform the same function as loading the bitstream
    `include "../../src/ioring/<design name>_sim_config.svh"

    // Wait for device to enter user mode
    while ( chip_ready !== 1'b1 )
    @(posedge clk);

    // Device now in user mode
    // Execute simulation command file to perform runtime programming
    `ACX_DEVICE_NAME.fcu.configure( "../<simulation command file>.txt", "full");

    // When simulation command file completes, test is done
    $finish
    end

    运行仿真

    所有仿真器流程的仿真目录下均有一个Makefile,支持以下构建选项:

    VCS

    $ make : Default flow. Compile with no debug options, run in batch mode
    writing the output to a VPD file.
    $ make run : Same as "make".
    $ make debug : Build with debug options (increased visibility of lower level
    variables).
    Run in batch mode writing to a VPD file.
    $ make open_dve : Open the DVE waveform viewer and load the VPD file and viewing
    session file.
    $ make clean : Delete all generated and temporary files.

    QuestaSim和Riviera

    $ make : Default flow. Compile with no debug options, run in batch mode
    writing the output to a WLF file.
    $ make run : Default flow. Same as "make".
    $ make debug : Build with debug options (increased visibility of lower level
    variables). Open GUI with wave.do and allow user to run interactively.
    $ make open_wave : Open the GUI waveform viewer. Load the generated WLF file and
    viewing wave.do file.
    $ make clean : Delete all generated and temporary files.

    QuestaSim和Riviera非Makefile流程

    为支持不原生支持Makefile的环境(如Windows),QuestaSim和Riviera提供额外的非Makefile流程,使用.do文件,需按以下步骤操作:

    注:以下示例针对QuestaSim,Riviera的操作步骤相同,需在/riviera目录下运行。

  • 导航到sim/questa目录;

  • 启动QuestaSim GUI,通常命令为:

  • $ vsim

  • 在QuestaSim GUI中,启动脚本:
  • $ do qsim_<design_name>.do

    注:QuestaSim和Riviera脚本使用ACE_INSTALL_DIR环境变量,为确保该(或任何其他)脚本流程正常运行,ACE需安装在路径名称无空格的目录中;此外,环境变量ACE_INSTALL_DIR需使用“/”作为路径分隔符,而非“\\”,示例如下:

    ACE_INSTALL_DIR = C:/achronix/10.0/Achronix_CAD_Environment/Achronix

    .do脚本默认配置为FULLCHIP_BFM流程,可通过选择脚本中注释的相应选项,将其修改为STANDALONE或FULLCHIP_RTL流程。

    结果验证

    所有设计均使用自校验测试平台,将RTL生成的结果与验证输出进行比对。验证输出可来自多个来源,包括数学包、软件模型或RTL行为模型,各设计的详细信息中提供了适用的验证来源详情。

    仿真中更改器件

    所有参考设计均为每个器件预配置,但可能需要在仿真中更改所选器件,以匹配实际实现的器件。

    Verilog宏定义

    为便于在不同器件之间切换,ACE库包含器件专用的仿真和综合文件,仿真文件名为<ACE_INSTALL_DIR>/libraries/device_models/<DEVICE>_simmodels.sv,这些文件包含器件专用的宏定义,用于包含或排除代码的必要部分。

    这些宏定义命名格式为ACX_DEVICE_<完整器件名称>,以下代码示例展示了如何在测试平台中使用这些宏定义,选择相应的DSM:

    // Include the appropriate DSM utility file which defines the appropriate macros
    // If an unsupported device is selected, then compilation will fail
    `ifdef ACX_DEVICE_AC7t1500
    `include "ac7t1500_utils.svh"
    `elsif ACX_DEVICE_AC7t800
    `include "ac7t800_utils.svh"
    `endif

    上例中,所选的DSM工具文件创建另一个宏ACX_DEVICE_NAME,与完整器件名称匹配,该宏在整个测试平台中用于引用DSM,示例如下:

    // Instantiate DSM
    // ACX_DEVICE_NAME is defined in the DSM utility file for the selected device
    `ACX_DEVICE_NAME `ACX_DEVICE_NAME (
    .FCU_CONFIG_USER_MODE (chip_ready)
    );

    所需更改

    以下步骤展示如何更改仿真器件:

  • 在/sim/<simulator>/Makefile中,修改DEVICE变量:
  • # Define the target device
    # Devices currently supported; AC7t1500, AC7t1400 and AC7t800ES0
    DEVICE := AC7t1500

  • 或在调用Makefile时,通过命令行覆盖默认器件:
  • $> make DEVICE=AC7t800

  • 对于Questa或Riviera GUI模式,修改/sim/questa/qsim_<design>_top_ref_design.do中的DEVICE变量:
  • # ———————————————————————
    # Define the target device
    # ———————————————————————
    # Devices currently supported; AC7t1500, AC7t1400 and AC7t800ES0
    DEVICE := "AC7t1500"

    注:定义和器件名称区分大小写,覆盖或指定器件名称时需使用正确的大小写格式。

    器件仿真模型(Device Simulation Model)

    许多设计需要名为器件仿真模型(DSM)的仿真覆盖层,该包结合了2D片上网络(NoC)的完整RTL代码和NoC及FPGA可编程逻辑区周围接口子系统的总线功能模型(BFM)。2D NoC的真实RTL与接口子系统的模型相结合,可在快速响应的仿真环境中开发设计,同时实现来自NoC的周期精确接口和来自硬核接口子系统的代表性周期响应,该仿真环境支持设计师快速迭代开发和调试设计。

    描述

    DSM提供NoC的完整RTL代码,结合周围接口子系统的BFM,其结构封装在以器件命名的SystemVerilog模块中(如ac7t1500),需在顶层测试平台中实例化该模块的一个实例。

    此外,DSM提供绑定宏,可实现设计元素与器件中相同元素之间的绑定。例如,设计中可能实例化2D NoC访问点(NAP),此时需使用ACX_BIND_NAP_RESPONDER、ACX_BIND_NAP_INITIATOR、ACX_BIND_NAP_HORIZONTAL、ACX_BIND_NAP_VERTICAL或ACX_BIND_NAP_ETHERNET宏(根据设计需求选择),将该NAP实例绑定到2D NoC中正确位置的NAP。

    同样,需在设计的端口与接口子系统的直连接口(DCI)之间建立绑定。器件中的每个DCI均连接到SystemVerilog接口,可从顶层测试平台直接访问该接口,并在SystemVerilog接口和设计的端口之间分配信号。

    选择所需的DSM

    DSM工具包

    每个器件均有对应的DSM包,每个DSM代表该器件的特定功能,因此需在仿真测试平台中选择正确的DSM。通过包含相应的DSM工具包可选择正确的DSM,该包随后创建用于访问相应DSM的宏和函数。工具包定义宏ACX_DEVICE_NAME,随后用于实例化和引用DSM,可用的DSM工具包如下表所示:

    表42 • DSM工具包

    DevicesDSM Utility PackageACX_DEVICE_NAME
    AC7t1500, AC7t1500ES0 ac7t1500_utils.svh ac7t1500
    AC7t1400, AC7t1400ES0 ac7t1400_utils.svh ac7t1400
    AC7t800, AC7t800ES0 ac7t800_utils.svh ac7t800

    器件专用仿真文件

    为支持代码重用,Achronix仿真流程为每个器件创建格式为ACX_DEVICE_<完整器件名称>的宏,当项目中包含相应的ACE库文件时,仿真(和综合)中会存在该宏。这些ACE库文件位于<ACE_INSTALL_DIR>/libraries/device_models/<完整器件名称>_simmodels.sv,以下表格列出了可用的simmodels.sv文件及其创建的器件专用宏:

    表43 • 仿真模型文件和定义

    DeviceSimulation Model FileACX_DEVICE Macro
    AC7t1500 AC7t1500[_simmodels.sv](_simmodels.sv) ACX_DEVICE_AC7t1500
    AC7t1500ES0 AC7t1500ES0[_simmodels.sv](_simmodels.sv) ACX_DEVICE_AC7t1500ES0
    AC7t1400 AC7t1400[_simmodels.sv](_simmodels.sv) ACX_DEVICE_AC7t1400
    AC7t1400ES0 AC7t1400ES0[_simmodels.sv](_simmodels.sv) ACX_DEVICE_AC7t1400ES0
    AC7t800 AC7t800[_simmodels.sv](_simmodels.sv) ACX_DEVICE_AC7t800
    AC7t800ES0 AC7t800ES0[_simmodels.sv](_simmodels.sv) ACX_DEVICE_AC7t800ES0

    实例化DSM工具包

    使用器件专用宏,可创建适用于多个器件的通用DSM实例化。以下示例中,使用ACX_DEVICE_xxxx宏选择相应的DSM工具包,该包随后创建的宏用于选择相应的DSM:

    // Include the appropriate DSM utility file which defines the appropriate macros
    // If an unsupported device is selected, then compilation will fail
    `ifdef ACX_DEVICE_AC7t1500ES0
    `include "ac7t1500_utils.svh"
    `elsif ACX_DEVICE_AC7t1500
    `include "ac7t1500_utils.svh"
    `elsif ACX_DEVICE_AC7t800ES0
    `include "ac7t800_utils.svh"
    `endif

    // Instantiate the DSM
    // ACX_DEVICE_NAME is defined in the DSM utility file for the selected device
    // Connect the chip_ready signal
    `ACX_DEVICE_NAME `ACX_DEVICE_NAME (
    .FCU_CONFIG_USER_MODE (chip_ready),
    );

    版本控制

    DSM受版本控制,一个版本中可能添加新功能,同时弃用或替换旧功能。版本信息既包含在包名称中(ACE_<major>.<minor>.<patch>*DSM_sim*<update>.zip/tgz),也包含在包根目录下的readme文件中。

    为确保使用正确版本的DSM,设计测试平台中需包含一个任务,确认版本兼容性,该函数的实例化如下:

    // The ACX_DEVICE_NAME macro is defined for each DSM within its appropriate utility
    package
    initial begin
    // Ensure correct version of DSM is being used
    // This design requires 10.1 as a minimum
    `ACX_DEVICE_NAME.require_version(10, 1, 0, 0);
    end

    require_version()任务

    require_version任务包含四个参数,顺序如下:

  • 主版本号(Major Version):与发布版本的主版本号匹配;

  • 次版本号(Minor Version):与发布版本的次版本号匹配;

  • 补丁版本号(Patch):与发布版本的补丁版本号匹配(可选);

  • 更新号(Update):与发布版本的更新号匹配(可选)。

  • 若未指定补丁版本号或更新号,这些参数应设为0。例如,对于10.1版本,参数设置为10,1,0,0。

    注:这些值可表示为数字(0-9)、字符串(“0”–“9”)或字母(“a/A”、“b/B”),其中字母"a"和"b"代表alpha或beta版本。确定发布版本的优先级时,数字代表的版本比字母代表的版本更新,因此8.3.alpha(定义为8,3,“a”,0)早于完整的8.3版本(指定为8,3,0,0)。

    示例设计

    以下框图展示了用户测试平台的示例结构,同时实例化了DSM和用户被测设计,该示例展示了响应器NAP所需的宏,以及两个GDDR6子系统的DCI。对于其他类型的NAP或其他DCI类型(如DDR),请参阅《绑定宏》和《DSM直连接口》表格。 图17 • 示例仿真结构 图17 • 示例仿真结构

    上例中包含两个NAP(my_nap1和my_nap2)和两个直连接口(my_dc0_1和my_dc0_2),顶层测试平台中使用ACX_BIND_NAP_RESPONDER宏,在设计中的NAP和器件中的NAP之间建立绑定:

    • 该宏支持插入NAP在2D NoC中的坐标,确保仿真与NAP在芯片上的物理布局一致;

    • DCI是用户设计的端口,这些端口分配到器件直连SystemVerilog接口中的相应信号。

    以下Verilog代码基于Speedster7t AC7t1500 FPGA,展示了该示例的实例化:

    // ———————————————-
    // Instantiate the DSM
    // ———————————————-
    // Connect the chip ready port
    // Note : All DSM ports are defined, so can be directly connected if required
    `ACX_DEVICE_NAME `ACX_DEVICE_NAME( .FCU_CONFIG_USER_MODE (chip_ready ) );

    // Set the verbosity options on the messages
    // Use the inbuilt set_verbosity() task.
    initial begin
    `ACX_DEVICE_NAME.set_verbosity(2);
    end

    // ———————————————-
    // Bind NAPs
    // ———————————————-
    // Bind my_nap1 to location 4,5
    `ACX_BIND_NAP_AXI_RESPONDER(dut.my_nap1,4,5);
    // Bind my_nap2 to location 2,2
    `ACX_BIND_NAP_AXI_RESPONDER(dut.my_nap2,2,2);

    // ———————————————-
    // Connect to DC interfaces
    // ———————————————-
    // Create signals to attach to direct-connect interface
    logic my_dc0_1_clk;
    logic my_dc0_1_awvalid;
    logic my_dc0_1_awaddr;
    logic my_dc0_1_awready;
    …..
    logic my_dc0_2_clk;
    logic my_dc0_2_awvalid;
    logic my_dc0_2_awaddr;
    logic my_dc0_2_awready;
    …..

    // Connect signals to gddr6_xx_dc0 interface within ac7t1500 device
    // Inputs to device
    assign `ACX_DEVICE_NAME.gddr6_xx_dc0.awvalid = my_dc0_1_awvalid;
    assign `ACX_DEVICE_NAME.gddr6_xx_dc0.awaddr = my_dc0_1_awaddr;
    ….
    // Outputs from device
    assign my_dc0_1_awready = `ACX_DEVICE_NAME.gddr6_xx_dc0.awready;
    ….

    // Connect signals to gddr6_xx_dc0 interface within ac7t1500 device
    // Inputs to device
    assign `ACX_DEVICE_NAME.gddr6_yy_dc0.awvalid = my_dc0_2_awvalid;
    assign `ACX_DEVICE_NAME.gddr6_yy_dc0.awaddr = my_dc0_2_awaddr;
    ….
    // Outputs from device
    assign my_dc0_2_awready = `ACX_DEVICE_NAME.gddr6_yy_dc0.awready;
    ….

    // ———————————————-
    // Remember to connect the clock!
    // ———————————————-
    assign my_dc0_1_clk = `ACX_DEVICE_NAME.gddr6_xx_dc0.clk;
    assign my_dc0_2_clk = `ACX_DEVICE_NAME.gddr6_yy_dc0.clk;

    set_verbosity()任务

    除指定所需的仿真包版本和实例化器件外,还可控制器件仿真模型输出消息的详细程度,这些级别通过set_verbosity任务控制,上例代码展示了该函数的调用方式。

    详细程度级别定义如下表所示:

    表44 • 详细程度级别

    Verbosity LevelDescription
    0 Print no messages.
    1 Print messages from initiator and responder interfaces only.
    2 Print messages from level 1 and from each NoC data transfer.
    3 Print messages from level 2, port bindings and NoC performance statistics.

    芯片状态输出

    仿真开始后,器件的运行方式与实际芯片类似,初始化期间器件处于复位状态(硬件中,该阶段发生在加载比特流的配置过程中)。初始化阶段结束后,器件置位FCU_CONFIG_USER_MODE信号,指示已进入用户模式,此时设计开始运行。

    建议顶层测试平台监控FCU_CONFIG_USER_MODE信号,待该信号置位后,再向器件施加激励(上例中通过测试平台的chip_ready信号实现)。

    绑定宏

    可用的绑定语句如下表所示:

    表45 • 绑定宏

    MacroArguments [^1]Description
    ACX_BIND_NAP_HORIZONTAL user_nap_instance , noc_column , noc_row To bind a horizontal streaming NAP, instance ACX_NAP_HORIZONTAL .
    ACX_BIND_NAP_VERTICAL user_nap_instance , noc_column , noc_row To bind a vertical streaming NAP, instance ACX_NAP_VERTICAL .
    ACX_BIND_NAP_AXI_INITIATOR [^2] user_nap_instance , noc_column , noc_row To bind an AXI initiator NAP, instance ACX_NAP_AXI_INITIATOR .
    ACX_BIND_NAP_AXI_RESPONDER [^2] user_nap_instance , noc_column , noc_row To bind an AXI responder NAP, instance ACX_NAP_AXI_RESPONDER .
    ACX_BIND_NAP_ETHERNET user_nap_instance , noc_column , noc_row To bind an Ethernet NAP instance, ACX_NAP_ETHERNET .

    表注:

  • user_nap_instance相对于测试平台,而非仿真顶层,通常user_nap_instance的格式为DUT.<NAP的层次化路径>;
  • 对于Speedster7t AC7t800 FPGA,这些宏为ACX_BIND_NAP_AXI_INITIATOR和ACX_BIND_NAP_AXI_RESPONDER。

  • 直连接口(Direct-Connect Interfaces)

    器件中,高速接口子系统(如GDDR、DDR、以太网和SerDes)与可编程逻辑区之间的非NAP连接称为直连接口(DCI),包括:

    • 存储接口(AXI)的额外数据端口;

    • SerDes的专用数据接口(直接模式);

    • 以太网的状态和控制接口。

    有关每个子系统DCI端口的完整细节,请参阅相应的接口子系统用户指南。

    用户设计与DCI端口的连接有两种方法:

    • 直接使用DSM中内置的接口;

    • 使用ACE生成的端口绑定文件。

    注:Speedster7t AC7t800 FPGA仅为SerDes直接模式提供DCI,接口子系统与可编程逻辑区之间的所有其他数据流均通过NAP和2D NoC实现。

    建议流程

    通常,项目开始时使用直接连接DSM端口的方法(此时ACE项目可能尚未开发),后续可决定使用ACE绑定文件。两种方法的目标相同——将被测设计(DUT)的I/O端口连接到DSM中的相应位置。

    • 直接连接方法:使用SystemVerilog接口,因此可在这些接口中添加协议检查和性能测量等额外功能;

    • ACE端口绑定方法:有助于确认被测设计(DUT)向ACE呈现的端口(来自网表和ACE生成的IP文件)的一致性,该流程可用于在进行布局布线前,调试任何端口命名不匹配问题。

    以下详细介绍这两种方法:

    DSM DC接口

    DSM为每个DCI端口提供一个SystemVerilog接口,可用接口如下表所示:

    表46 • DSM直连接口

    SubsystemInterface NamePhysical Location [^1]GDDR6 ChannelSystemVerilog Interface TypeData WidthAddress Width
    GDDR6 gddr6_6_dc0 East 2 0 t_ACX_AXI4 512 33
    GDDR6 gddr6_6_dc1 East 2 1 t_ACX_AXI4 512 33
    DDR4 ddr4_dc0 South t_ACX_AXI4 512 40
    Ethernet ethernet_0_dc North West t_ACX_ETHERNET_DCI
    Ethernet ethernet_1_dc North East t_ACX_ETHERNET_DCI
    Serdes serdes_eth0_q0_dc North West t_ACX_SERDES_DCI 128
    Serdes serdes_eth0_q1_dc North West t_ACX_SERDES_DCI 128
    Serdes serdes_eth1_q0_dc North East [^2] t_ACX_SERDES_DCI 128
    Serdes serdes_eth1_q1_dc North East [^2] t_ACX_SERDES_DCI 128

    表注:

  • 东西方向的物理方位是指在ACE的布局图中查看芯片的方向,芯片封装时实际上会绕其垂直轴旋转,因此布局图中显示为西侧的接口,在PCB上实际位于器件的东侧;南北方向不受影响,与本表、ACE视图和板上器件的方向一致;
  • 存在于Speedster7t AC7t800 DSM中。

  • 注:并非所有接口在所有器件中都可用,请查阅相应的器件数据手册,了解所选器件中存在的接口。

    直接连接到DSM接口

    若要连接到这些接口中的任何一个,需在测试平台中创建信号,并将其作为被测设计(DUT)的端口,同时将该信号连接到DSM(使用DSM实例名称、《DSM直连接口》表格中的接口名称和元素名称)。

    以下示例展示了如何连接GDDR AXI接口的awready和awvalid信号:

    // Declare the signals in the testbench
    // Note : In order to switch between port binding file and direct connect easily, the
    signal
    // names must match the DUT IO port names.
    logic dut_awready;
    logic dut_awvalid;

    // Connect to the DSM GDDR_1, DC port 0.
    // awready is an output from the DSM, and an input to the DUT
    assign dut_awready = `ACX_DEVICE_NAME.interfaces.gddr6_1_dc0.awready;
    // awvalid is an input to the DSM, and an output from the DUT
    assign `ACX_DEVICE_NAME.interfaces.gddr6_1_dc0.awready = dut_awvalid;

    // Instantiate the DUT
    my_design DUT (
    ……
    .dut_awready (dut_awready),
    .dut_awvalid (dut_awvalid),
    ……
    );

    通过端口绑定文件连接到DSM接口

    若要使用端口绑定文件,需在测试平台中进行以下配置:

  • 创建ACE项目(此阶段不需要网表);

  • 配置所有接口子系统IP;

  • 生成子系统IP文件,包括名为<design_name>_user_design_port_bindings.svh的文件;

  • 在测试平台中声明信号,信号名称必须与被测设计(DUT)上的端口名称相同(因为端口绑定文件使用这些名称);

  • 在测试平台中包含端口绑定文件;

  • 指示DSM将其所有DC接口设置为仅监控模式,这一点至关重要——否则DSM会从可编程逻辑区向子系统驱动端口,同时被测设计(DUT)通过绑定文件驱动相同的端口,可能导致信号未解析和仿真失败。启用定义ACX_DSM_INTERFACES_TO_MONITOR_MODE时,DSM DC接口设置为监控模式。

  • 注:

    • Achronix参考设计流程中,生成的子系统IP文件保存到/src/ioring目录,而非默认的/src/ace/ioring_design目录;

    • 定义ACX_DSM_INTERFACES_TO_MONITOR_MODE必须包含在仿真命令行中,确保编译DSM时该定义存在,不能包含在用户测试平台中(因为用户测试平台在DSM之后编译);

    • Achronix参考设计流程中,ACX_DSM_INTERFACES_TO_MONITOR_MODE定义在/sim/<simulator>/system_files_bfm.f和/sim/<simulator>/system_files_rtl.f文件中。

    以下示例展示了如何使用端口绑定文件连接被测设计(DUT)的所有端口:

    system_files_bfm.f:

    # ———————————————————————
    # Description : DSM full-chip BFM simulation filelist
    # ———————————————————————
    # Set whether the DSM DCI interfaces are set to monitor mode only
    +define+ACX_DSM_INTERFACES_TO_MONITOR_MODE

    Testbench:

    // In the testbench
    // Declare ALL the DUT signals
    logic dut_awready, dut_awvalid ….. ;

    // Include the port binding file
    `include "../../src/ioring/my_design_user_design_port_bindings.svh"

    // Instantiate the DUT
    my_design DUT (
    ……
    .dut_awready (dut_awready),
    .dut_awvalid (dut_awvalid),
    ……
    );

    双模式连接到DSM接口

    由于端口绑定方法需要一个定义,可在测试平台中使用该定义在两种连接方法之间切换,该功能支持两种流程,只需启用或禁用该定义即可切换,支持两种方法的测试平台示例如下:

    // Declare the signals in the testbench
    // Note : In order to switch between port binding file and direct connect easily, the
    signal
    // names must match the DUT IO port names.
    logic dut_awready;
    logic dut_awvalid;

    // The options below support connect to the DSM DC ports either by using the ACE
    generated
    // port binding file, or else using the DSM DC Interfaces.
    `ifdef ACX_DSM_INTERFACES_TO_MONITOR_MODE
    `include "../../src/ioring/my_design_user_design_port_bindings.svh"
    `else
    assign dut_awready = `ACX_DEVICE_NAME.interfaces.gddr6_1_dc0.awready;
    assign `ACX_DEVICE_NAME.interfaces.gddr6_1_dc0.awready = dut_awvalid;
    `endif

    // Instantiate the DUT
    my_design DUT (
    ……
    .dut_awready (dut_awready),
    .dut_awvalid (dut_awvalid),
    ……
    );

    时钟频率

    除了与接口绑定外,还可以控制这些接口生成的时钟频率。为保证设计完整性,仿真中设置的时钟频率应与设计期望的工作频率匹配。在设计实现阶段,频率会在ACE I/O设计器中配置;而在仿真中,可通过set_clock_period函数进行设置。

    以下示例展示了将GDDR6东1控制器的工作频率设置为1GHz(适用于16Gbps工作模式)。由于直连(DC)接口的工作频率为控制器频率的一半,因此其配置为500MHz。通过该方法,首先能确保仿真在正确的频率下运行,其次可保证每个子系统能根据需要工作在不同频率。

    // Set default GDDR6 clock frequency to 1000 ps = 1GHz
    localparam GDDR6_CONTROLLER_CLOCK_PERIOD = 1000;
    // Configure the NoC interface of GDDR6 E1 to 1GHz
    `ACX_DEVICE_NAME.clocks.set_clock_period("gddr6_5_noc0_clk",
    GDDR6_CONTROLLER_CLOCK_PERIOD);

    // Configure the DC interface of GDDR6 E1 to 500MHz, (double the period of the NoC
    interface)
    `ACX_DEVICE_NAME.clocks.set_clock_period("gddr6_5_dc0_clk",
    GDDR6_CONTROLLER_CLOCK_PERIOD*2);

    注:set_clock_period函数位于设备仿真模型(DSM)中,该模型的默认时间尺度为1皮秒。因此,无论调用模块的时间尺度如何,指定的时钟周期均以皮秒为单位。

    可用的时钟频率接口如下表所示:

    表47 • 时钟频率接口

    SubsystemInterface NamePhysical Location [^1]GDDR6 Channel
    GDDR6 gddr6_0_noc0_clk [^3] West 0 NoC 0
    GDDR6 gddr6_0_noc1_clk [^3] West 0 NoC 1
    GDDR6 gddr6_1_noc0_clk [^3] West 1 NoC 0
    GDDR6 gddr6_1_noc1_clk [^3] West 1 NoC 1
    GDDR6 gddr6_2_noc0_clk [^3] West 2 NoC 0
    GDDR6 gddr6_2_noc1_clk [^3] West 2 NoC 1
    GDDR6 gddr6_3_noc0_clk West 3 NoC 0
    GDDR6 gddr6_3_noc1_clk West 3 NoC 1
    GDDR6 gddr6_4_noc0_clk East 0 NoC 0
    GDDR6 gddr6_4_noc1_clk East 0 NoC 1
    GDDR6 gddr6_5_noc0_clk East 1 NoC 0
    GDDR6 gddr6_5_noc1_clk East 1 NoC 1
    GDDR6 gddr6_6_noc0_clk East 2 NoC 0
    GDDR6 gddr6_6_noc1_clk East 2 NoC 1
    GDDR6 gddr6_7_noc0_clk East 3 NoC 0
    GDDR6 gddr6_7_noc1_clk East 3 NoC 1
    GDDR6 gddr6_1_dc0_clk West 1 DCI 0
    GDDR6 gddr6_1_dc1_clk West 1 DCI 1
    GDDR6 gddr6_2_dc0_clk West 2 DCI 0
    GDDR6 gddr6_2_dc1_clk West 2 DCI 1
    GDDR6 gddr6_5_dc0_clk East 1 DCI 0
    GDDR6 gddr6_5_dc1_clk East 1 DCI 1
    GDDR6 gddr6_6_dc0_clk East 2 DCI 0
    GDDR6 gddr6_6_dc1_clk East 2 DCI 1
    DDR4 ddr4_noc0_clk South NoC
    DDR4 ddr4_dci0_clk South DCI
    DDR5 ddr5_noc0_clk [^4] South NoC
    PCIe pciex16_clk [^3] Gen5 PCIe ×16
    PCIe pciex16_dc_clk Gen5 PCIe ×16 DCI
    PCIe pciex8_clk Gen5 PCIe ×8
    Ethernet ethernet_ref_clk [^3] Ethernet reference clock [^2]
    Ethernet ethernet_ff0_clk [^3] Ethernet FIFO 0 clock [^2]
    Ethernet ethernet_ff1_clk [^3] Ethernet FIFO 1 clock [^2]
    Configuration cfg_clk System wide configuration clock

    表注

  • 文中东西方向的物理方位,均以在ACE的布局视图中查看芯片的视角为准。芯片封装时实际会绕垂直轴旋转,因此布局视图中显示为西侧的接口,在印刷电路板(PCB)上的物理位置为芯片东侧;南北方向不受影响,与本表、ACE视图及板载芯片的方位一致。
  • 以太网时钟为两个以太网子系统共用,仿真中必须将其设置为相同的工作频率。
  • 存在于AC7t800的设备仿真模型(DSM)中。
  • 仅存在于Speedster7t AC7t800的设备仿真模型(DSM)中。

  • 配置

    多个接口子系统在加电时需要进行配置。在物理器件中,该配置会通过比特流预编程相关配置寄存器完成;而在仿真环境中,可通过相关任务读取配置文件并将其应用到对应的接口子系统。配置应用的代码示例如下:

    // ————————-
    // Configuration
    // ————————-

    // Call function within device to configure the registers
    // By using fork-join, the two configurations will be run in parallel, configuring both
    // Ethernet blocks. This saves overall simulation time.
    // Both blocks are configured the same, hence the use the same file
    initial
    begin
    fork
    `ACX_DEVICE_NAME.fcu.configure( "ethernet_cfg.txt", "ethernet0" );
    `ACX_DEVICE_NAME.fcu.configure( "ethernet_cfg.txt", "ethernet1" );
    join
    end

    启动序列

    在fcu.configure()任务处理配置的过程中(包括等待轮询返回有效值的阶段),芯片状态输出信号不会置位。该行为与物理器件的实际情况一致:器件仅在配置完成后,才会进入用户模式。

    仿真测试平台可按上述代码片段执行配置流程,当芯片状态输出信号置位时,测试平台即可确认器件已完成正确配置,进而开展后续的测试工作。

    fcu.configure()任务

    fcu.configure任务的参数定义如下:

    fcu.configure ( <configuration filename>, <interface subsystem name> );

    支持的接口子系统名称如下表所示:

    表48 • 配置子系统名称

    Subsystem [^4]Interface Subsystem Name [^1]Physical Location [^3]
    GDDR6 gddr6_0 West 0
    GDDR6 gddr6_1 West 1
    GDDR6 gddr6_2 West 2
    GDDR6 gddr6_3 West 3
    GDDR6 gddr6_4 East 0
    GDDR6 gddr6_5 East 1
    GDDR6 gddr6_6 East 2
    GDDR6 gddr6_7 East 3
    DDR4 ddr4 South
    DDR5 ddr5 South
    Ethernet ethernet0 North
    Ethernet ethernet1 North
    GPIO North gpio_n North
    GPIO South gpio_s South
    PCIe ×8 pcie_0 North
    PCIe ×16 pcie_1 North
    All subsystems full [^2]

    表注

  • 接口子系统名称不区分大小写。
  • 使用full作为子系统名称时,配置文件中需要使用42位完整地址;选择单个子系统时,仅需28位地址,具体详见配置文件格式章节。
  • 文中东西方向的物理方位,均以在ACE的布局视图中查看芯片的视角为准。芯片封装时实际会绕垂直轴旋转,因此布局视图中显示为西侧的接口,在印刷电路板(PCB)上的物理位置为芯片东侧;南北方向不受影响,与本表、ACE视图及板载芯片的方位一致。
  • 并非所有子系统都存在于所有器件中,具体请参考对应器件的数据手册。

  • 配置文件格式

    配置文件采用以下格式:

    # ——————————————
    # Configuration file
    # Supports both # and // comments
    # ——————————————

    # A comment line
    // Another comment line

    # Format is <cmd> <addr> <data>

    # Commands are
    "w" – write
    "r" – read
    "v" – read and verify
    "d" – Wait for the number of cycles in the data field.
    The address field is unused

    # Address is either 28-bit, (7 hex characters), or 42-bit, (11 hex characters).
    # 28-bits supports the configuration memory space of an single interface subsystem
    # 42-bits supports the full configuration memory space

    # Data is 32-bit, (8 hex characters).

    # For reads, put 0x0 for the data
    # For verify put the expected data value

    # Examples

    # Writes

    w 00005c0 76543210
    w 0000014 00004064

    # Reads
    r 00005c0 00000000
    r 0000014 00000000

    # Verify
    v 00005c0 76543210
    v 0000014 00004064

    # Wait for 50 cycles
    d 0000000 00000032

    地址宽度

    地址宽度根据文件的使用需求有所不同:

    • 寻址单个子系统时,仅使用地址字段的低28位,高14位由子系统名称推导得出;

    • 寻址完整的配置存储空间(接口子系统名称设为full)时,需要42位地址空间。该模式下,现场配置单元(FCU)会验证地址字段的[41:34]位是否设为8’h20,该值与二维片上网络(2D NoC)全局内存映射及控制状态寄存器(CSR)存储区对齐。通过该模式,单个配置文件可寻址多个接口子系统,更多细节请参考Speedster7t片上网络用户指南(UG089)。

    并行配置

    fcu.configure()任务被定义为SystemVerilog自动任务,支持可重入并能并行运行。因此,可通过fork – join结构对多个接口子系统进行并行编程,参考设计的测试平台中包含该并行编程的示例。

    SystemVerilog接口

    定义了以下SystemVerilog接口,用于直连接口(DCI)的信号分配。

    注:以下接口仅在仿真环境中可用。对于需要综合的代码,需自定义SystemVerilog接口,或使用参考设计中预定义的接口之一。

    interface t_ACX_AXI4
    #(DATA_WIDTH = 0,
    ADDR_WIDTH = 0,
    LEN_WIDTH = 0);

    logic aclk; // Clock reference
    logic awvalid; // AXI Interface
    logic awready;
    logic [ADDR_WIDTH -1:0] awaddr;
    logic [LEN_WIDTH -1:0] awlen;
    logic [8 -1:0] awid;
    logic [4 -1:0] awqos;
    logic [2 -1:0] awburst;
    logic awlock;
    logic [3 -1:0] awsize;
    logic [3 -1:0] awregion;
    logic [3:0] awcache;
    logic [2:0] awprot;
    logic wvalid;
    logic wready;
    logic [DATA_WIDTH -1:0] wdata;
    logic [(DATA_WIDTH/8) -1:0] wstrb;
    logic wlast;
    logic arready;
    logic [DATA_WIDTH -1:0] rdata;
    logic rlast;
    logic [2 -1:0] rresp;
    logic rvalid;
    logic [8 -1:0] rid;
    logic [ADDR_WIDTH -1:0] araddr;
    logic [LEN_WIDTH -1:0] arlen;
    logic [8 -1:0] arid;
    logic [4 -1:0] arqos;
    logic [2 -1:0] arburst;
    logic arlock;
    logic [3 -1:0] arsize;
    logic arvalid;
    logic [3 -1:0] arregion;
    logic [3:0] arcache;
    logic [2:0] arprot;
    logic aresetn;
    logic rready;
    logic bvalid;
    logic bready;
    logic [2 -1:0] bresp;
    logic [8 -1:0] bid;

    modport initiator (input awready, bresp, bvalid, bid, wready, arready, rdata,
    rlast, rresp, rvalid, rid,
    output awaddr, awlen, awid, awqos, awburst, awlock, awsize,
    awvalid, awregion, bready, wdata, wlast, rready, wstrb, wvalid,
    araddr, arlen, arid, arqos, arburst, arlock, arsize,
    arvalid, arregion);

    modport responder (output awready, bresp, bvalid, bid, wready, arready, rdata,
    rlast, rresp, rvalid, rid,
    input awaddr, awlen, awid, awqos, awburst, awlock, awsize,
    awvalid, awregion,
    bready, wdata, wlast, rready, wstrb, wvalid,
    araddr, arlen, arid, arqos, arburst, arlock, arsize,
    arvalid, arregion);

    modport monitor (input awready, bresp, bvalid, bid, wready, arready, rdata,
    rlast, rresp, rvalid, rid,
    awaddr, awlen, awid, awqos, awburst, awlock, awsize,
    awvalid, awregion, awprot, awcache,
    bready, rready, wstrb, wvalid, wdata, wlast,
    araddr, arlen, arid, arqos, arburst, arlock, arsize,
    arvalid, arregion, arprot, arcache);
    endinterface : t_ACX_AXI4

    环境变量

    ACE和仿真包的路径由两个环境变量控制,在运行所有参考设计的仿真前,必须设置这两个变量。

    ACE_INSTALL_DIR

    环境变量ACE_INSTALL_DIR必须设置为ace(Linux系统)或ace.exe(Windows系统)可执行文件所在的目录。该变量会被仿真和综合流程共同使用,用于定位正确的器件库文件。

    ACX_DEVICE_INSTALL_DIR

    可选环境变量ACX_DEVICE_INSTALL_DIR用于选择设备仿真模型(DSM)文件,应设置为DSM包中器件文件的完整路径(包含基础目录)。

    • 以ACE集成模式安装时,按如下方式设置(以Speedster7t AC7t1500 FPGA为例):

      ACX_DEVICE_INSTALL_DIR = $ACE_INSTALL_DIR/system/data/AC7t1500

    • 以独立模式安装时,按如下方式设置(以Speedster7t AC7t1500 FPGA为例):

      ACX_DEVICE_INSTALL_DIR = <location of standalone package>/system/data/AC7t1500

    仅当DSM未以ACE集成模式安装时,仿真才需要设置ACX_DEVICE_INSTALL_DIR变量。在所有提供的参考设计中,仿真Makefile会按ACE集成模式的方式定义该变量,该定义优先级高于本地环境变量。若使用提供的仿真Makefile,可通过如下方式在Make流程调用中覆盖ACX_DEVICE_INSTALL_DIR的定义(以Speedster7t AC7t1500 FPGA为例):

    > make ACX_DEVICE_INSTALL_DIR=<location of standalone package>/system/data/AC7t1500

    官网:www.achronix.com

    所发布的内容经achronix官方允许

    参考设计完整工程在个人下载中心,可根据个人需求前往下载,如有问题可私信博主

    赞(0)
    未经允许不得转载:171主机测评 » 4TbpsGDDR6——针对AI和高带宽运算应用场景
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址