仅对英特尔可见 — GUID: icu1491859490455
Ixiasoft
1.1. 部分重配置术语
1.2. 部分重配置过程序列
1.3. 内部主机部分重配置
1.4. 外部主机部分重配置
1.5. 部分重配置设计考量
1.6. 部分重配置设计流程
1.7. 层次化部分重配置(Hierarchical Partial Reconfiguration)
1.8. 部分重配置设计时序分析
1.9. 部分重配置设计仿真
1.10. 部分重配置设计调试
1.11. PR比特流安全性验证( Intel® Stratix® 10和 Intel® Agilex™ 设计)
1.12. PR比特流压缩和加密( Intel® Arria® 10和 Intel® Cyclone® 10 GX设计)
1.13. 避免PR编程错误
1.14. 对PR设计导出与版本兼容的编译数据库
1.15. 创建一个部分重配置设计修订历史
2.1. 内部和外部PR主机配置
2.2. Partial Reconfiguration Controller Intel® FPGA IP
2.3. Partial Reconfiguration Controller Intel® Arria® 10 /Cyclone 10 FPGA IP
2.4. Partial Reconfiguration External Configuration Controller Intel® FPGA IP
2.5. Partial Reconfiguration Region Controller Intel® FPGA IP
2.6. Avalon-MM Partial Reconfiguration Freeze Bridge Intel® FPGA IP
2.7. Avalon-ST Partial Reconfiguration Freeze Bridge Intel® FPGA IP
2.8. 生成和仿真 Intel® FPGA IP
2.9. Intel® Quartus® Prime Pro Edition用户指南:部分重配置存档
2.10. 部分重配置解决方案IP用户指南修订历史
仅对英特尔可见 — GUID: icu1491859490455
Ixiasoft
1.9.1.1. 仿真PR角色替换
当在部分重配置过程中加载新角色时,PR分区的逻辑操作会更改。在使用多路复用器在仿真的角色的输入和输出上仿真角色的替换。创建RTL wrapper逻辑以代表角色的顶层。wrapper在编译期间例化默认角色。在仿真过程中,wrapper支持将活动角色替换为另一个角色。在 Intel® Quartus® Prime EDA Netlist Writer创建的PR仿真模型中将每个角色例化为行为RTL。 Intel® Quartus® Prime软件包括仿真模块,可与仿真测试台连接:
- altera_pr_wrapper_mux_in
- altera_pr_wrapper_mux_out
- altera_pr_persona_if (SystemVerilog实例使您能够将wrapper multiplexer连接到testbench driver)
图 32. PR角色切换的仿真
PR角色切换仿真的RTL Wrapper
altera_pr_wrapper_mux_out模块的pr_activate输入使MUX输出X。此功能允许PR角色的未知输出的仿真,还验证设计冻结逻辑的正常运行。以下代码对应于PR角色切换的仿真,如上图所示:
module pr_core_wrapper ( input wire a, input wire b, output wire o ); localparam ENABLE_PERSONA_1 = 1; localparam ENABLE_PERSONA_2 = 1; localparam ENABLE_PERSONA_3 = 1; localparam NUM_PERSONA = 3; logic pr_activate; int persona_select; altera_pr_persona_if persona_bfm(); assign pr_activate = persona_bfm.pr_activate; assign persona_select = persona_bfm.persona_select; wire a_mux [NUM_PERSONA-1:0]; wire b_mux [NUM_PERSONA-1:0]; wire o_mux [NUM_PERSONA-1:0]; generate if (ENABLE_PERSONA_1) begin localparam persona_id = 0; `ifdef ALTERA_ENABLE_PR_MODEL assign u_persona_0.altera_sim_pr_activate = pr_activate; `endif pr_and u_persona_0 ( .a(a_mux[persona_id]), .b(b_mux[persona_id]), .o(o_mux[persona_id]) ); end endgenerate generate if (ENABLE_PERSONA_2) begin localparam persona_id = 1; `ifdef ALTERA_ENABLE_PR_MODEL assign u_persona_1.altera_sim_pr_activate = pr_activate; `endif pr_or u_persona_1 ( .a(a_mux[persona_id]), .b(b_mux[persona_id]), .o(o_mux[persona_id]) ); end endgenerate generate if (ENABLE_PERSONA_3) begin localparam persona_id = 2; `ifdef ALTERA ENABLE PR MODEL assign u_persona_2.altera_sim_pr_activate = pr_activate; `endif pr_empty u_persona_2 ( .a(a_mux[persona_id]), .b(b_mux[persona_id]), .o(o_mux[persona_id]) ); end endgenerate altera_pr_wrapper_mux_in #(.NUM_PERSONA(NUM_PERSONA), .WIDTH(1)) \ u_a_mux(.sel(persona_select), .mux_in(a), .mux_out(a_mux)); altera_pr_wrapper_mux_in #(.NUM_PERSONA(NUM_PERSONA), .WIDTH(1)) \ u_b_mux(.sel(persona_select), .mux_in(b), .mux_out(b_mux)); altera_pr_wrapper_mux_out #(.NUM_PERSONA(NUM_PERSONA), .WIDTH(1)) \ u_o_mux(.sel(persona_select), .mux_in(o_mux), .mux_out(o), .pr_activate \ (pr_activate)); endmodule