Description
I am using NoC access points (NAPs) in my AC7t1500 design. How are the NAPs numbered so that I can set placement constraints, and send commands to a NAP over the NoC?
Answer
Whether using placement constraints in a PDC file for ACE, or setting the placement for your NAPs in bind statements for simulation, the NAPs are numbered in the same fashion. NAPs use a coordinate of (column, row) to specify the location.
- Columns – Columns are numbered 1 to 10, with 1 being on the west side of the device and 10 being on the east side of the device
- Rows – Rows are numbered 1 to 8, with 1 being on the south end of the device and 8 being on the north end of the device
Below is a figure showing the numbering of NAPs in the AC7t1500 along with example locations:
Figure: NAP Numbering for AC7t1500
Placement in ACE
If specifying the placement of the NAP in ACE, the recommended method is to specify the placement in a PDC file. Below is an example of how to set the placement of the NAPs shown in the above figure.
NAP Placement in PDC file
# place blue NAP (AXI slave)
# col=3 row=3
set_placement -fixed {i:i_nap_blue.i_nap_slave} {s:x_core.NOC[3][3].logic.noc.nap_s}
# place green NAP (AXI slave)
# col=6 row=5
set_placement -fixed {i:i_nap_green.i_nap_slave} {s:x_core.NOC[6][5].logic.noc.nap_s}
# place yellow NAP (AXI master)
# col=10 row=8
set_placement -fixed {i:i_nap_yellow.i_nap_master} {s:x_core.NOC[10][8].logic.noc.nap_m
Placement in Simulation
When simulating with NAPs, users set the placement of the NAPs through bind statements in the testbench. Below is an example of how to use the bind statements to set the NAPs shown in the figure above.
NAP Placement in Bind Statement
// Blue NAP AXI slave NAP at col=3, row=3
`ACX_BIND_NAP_AXI_SLAVE(DUT.i_nap_blue.i_nap_slave,3,3);
// Green NAP AXI slave NAP at col=6, row=5
`ACX_BIND_NAP_AXI_SLAVE(DUT.i_nap_green.i_nap_slave,6,5);
// Yellow NAP AXI master NAP at col=10, row=8
`ACX_BIND_NAP_AXI_MASTER(DUT.i_nap_yellow.i_nap_master,10,8);
Addressing a NAP in AXI Command
If sending an AXI command to a NAP, users need to use the NAP coordinates to specify the address. The same (column, row) format is used, but in order to save bits, the numbering of (X, Y) becomes (X-1, Y-1). Below shows the global address space the NoC uses for addressing NAP locations.
Table: Address Map for NAPs
Address Bit | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
41 | 40 | 39 | 38 | 37 | 36 | 35 | 34 | 33 | 32 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | … | 0 | |
Destination NAP |
0 | 0 | 0 | 1 | 0 | 0 | 0 | NAP Column | NAP Row | Memory Address |
When sending a command to the yellow AXI master NAP, a user would set bits [41:28] to be {7'b0001000, 4'b1001, 3'b111}. Notice the column is set to 9 and the row is set to 7, which is 10-1 and 8-1 respectively.