Hard Processor System Component Reference Manual: Agilex™ 5 SoCs
ID
813752
Date
8/15/2025
Public
1. Introduction to the Agilex™ 5 Hard Processor System Component
2. Configuring the Agilex™ 5 Hard Processor System Component
3. Simulating the Agilex™ 5 HPS Component
4. Simulating the Agilex™ 5 HPS bridges (H2F, LWH2F, F2SDRAM, F2H)
5. Design Guidelines
6. Document Revision History for the Hard Processor System Component Reference Manual Agilex™ 5 SoCs
2.1. Parameterizing the HPS Component
2.2. HPS-FPGA Interfaces
2.3. SDRAM
2.4. HPS Clocks, Reset, Power
2.5. I/O Delays
2.6. Pin Mux and Peripherals
2.7. Generating and Compiling the HPS Component
2.8. Using the Address Span Extender Component
2.9. Configuring the Agilex™ 5 Hard Processor System Component Revision History
2.2.1.1. Enable MPU Standby and Event Signals
2.2.1.2. Enable General Purpose Signals
2.2.1.3. Enable Debug APB* Interface
2.2.1.4. Enable System Trace Macrocell (STM) Hardware Events
2.2.1.5. Enable SWJ-DP JTAG Interface
2.2.1.6. Enable FPGA Cross Trigger Interface
2.2.1.7. Enable AMBA* Trace Bus (ATB)
2.3.1. Configurations for HPS IP
2.3.2. Configurations for HPS EMIF IP
2.3.3. Graphical Connections of HPS to HPS-EMIF
2.3.4. Configuration when using ECC
2.3.5. Configuration of HPS EMIF Calibration Settings
2.3.6. Supported Memory Protocols Among Device Families
2.3.7. IO96 Bank and Lane Usage for HPS EMIF
2.3.8. Quartus Report of I/O Bank Usage
2.3.9. Debugging with the External Memory Interface Debug Toolkit
4.3.5. test_f2h.sv
- Change directory to <project directory>/simple_tb/simple_tb/sim/.
- Create a file named test_f2h.sv and edit with contents as shown below.
// test_f2h.sv `timescale 1 ps / 1 ps `define DUT simple_inst // name of top of design localparam ADDR_WIDTH = 40; // must be in BITS localparam DATA_WIDTH = (256 / 8); // must be in BYTES !!!! localparam ID_WIDTH = 5; localparam USER_WIDTH = 8; import altera_lnsim_ver. ace5_lite_bfm_types_pkg::*; import altera_lnsim_ver. ace5_lite_operations_class_pkg::*; import altera_lnsim_ver. ace5_lite_memory_class_pkg::*; import altera_lnsim_ver. ace5_lite_burst_class_pkg::*; import altera_lnsim_ver. ace5_lite_transaction_class_pkg::*; `define mgr_bfm `DUT. ace5lite_bfm_mm_manager_0.ace5lite_bfm_mm_manager_0.\ requester_bfm.requestor_bfm_top `define sub_bfm `DUT. intel_agilex_5_soc_0.intel_agilex_5_soc_0.\ sm_mpfe.sundancemesa_mpfe_inst.f2soc_bfm_gen.\ f2h_ace5lite_slave_inst `define CLK_PATH `DUT. clock_in.out_clk `define RESET_PATH `DUT. reset_in.out_reset module test_f2h#(); logic [255:0] out_data; reg f; // write/read response ace5_lite_xresp_t w_rsp; ace5_lite_xresp_t r_rsp; //////////////////////////////////////////////////////////////////////////////////// initial begin $timeformat(-9, 3, "ns", 4); $display(""); // Wait until reset is deasserted. wait(~`sub_bfm.ace5_lite_bus.rst_n); wait(`sub_bfm.ace5_lite_bus.rst_n); f<= 1'b0; #1000; `mgr_bfm.write256(.address( 0), .data(256'h12341234), .response(w_rsp)); `mgr_bfm.write256(.address('h1000), .data(256'haaaabbbb), .response(w_rsp)); `mgr_bfm.write256(.address('h2000), .data(256'hbbbbcccc), .response(w_rsp)); `mgr_bfm.write256(.address('h3000), .data(256'habcdabcd), .response(w_rsp)); `mgr_bfm.write256(.address('h4000), .data(256'h12121212), .response(w_rsp)); #1000; `mgr_bfm.read256(.address(0), .data(out_data), .response(r_rsp)); if(out_data == 256'h12341234) begin $display("Success. Read data matches Write data "); end else begin $display("Error: 0x0000 Read data = %h, Write data: 0x12341234", out_data); f<= 1'b1; end `mgr_bfm.read256(.address('h1000), .data(out_data), .response(r_rsp)); if(out_data == 256'haaaabbbb) begin $display("Success. Read data matches Write data "); end else begin $display("Error: 'h1000 Read data = %h, Write data: haaaabbbb", out_data); f<= 1'b1; end `mgr_bfm.read256(.address('h2000), .data(out_data), .response(r_rsp)); if(out_data == 256'hbbbbcccc) begin $display("Success. Read data matches Write data "); end else begin $display("Error: 'h2000 Read data = %h, Write data: hbbbbcccc", out_data); f<= 1'b1; end `mgr_bfm.read256(.address('h3000), .data(out_data), .response(r_rsp)); if(out_data == 256'habcdabcd) begin $display("Success. Read data matches Write data "); end else begin $display("Error: 'h3000 Read data = %h, Write data: habcdabcd", out_data); f<= 1'b1; end `mgr_bfm.read256(.address('h4000), .data(out_data), .response(r_rsp)); if(out_data == 256'h12121212) begin $display("Success. Read data matches Write data "); end else begin $display("Error: 'h4000 Read data = %h, Write data: h12121212", out_data); f<= 1'b1; end /////////////////////////////////////////// CHECK TESTS //////////////////// #(18000000 - $time) // wait until a certain time if (f==1'b1) $display ("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> fail F2H "); else $display ("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pass F2H "); end endmodule