Visible to Intel only — GUID: icu1491859490455
Ixiasoft
Visible to Intel only — GUID: icu1491859490455
Ixiasoft
1.10.2. Simulating PR Persona Replacement
Create RTL wrapper logic to represent the top-level of the persona. The wrapper instantiates the default persona during compilation. During simulation, the wrapper allows the replacement of the active persona with another persona. Instantiate each persona as the behavioral RTL in the PR simulation model the Quartus® Prime EDA Netlist Writer generates.
The Quartus® Prime software includes simulation modules to interface with your simulation testbench:
- altera_pr_wrapper_mux_in
- altera_pr_wrapper_mux_out
- altera_pr_persona_if (SystemVerilog interface allows you to connect the wrapper multiplexers to a testbench driver)
RTL Wrapper for PR Persona Switching Simulation
The pr_activate input of the altera_pr_wrapper_mux_out module enables the MUX to output X. This functionality allows the simulation of unknown outputs from the PR persona, and also verifies the normal operation of the design’s freeze logic. The following code corresponds to the simulation of PR persona switching, shown in the above figure:
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