Table of Contents |
---|
Introduction
This document aims at giving guidelines on These guidelines describe how to use the provided NX components provided in VHDL source code for NXmap3. Its purpose is to explain how to Impulse and correctly instantiate the different supported NX components provided by NanoXplore for NXmap3 synthesis and implementation the Impulse Synthesis and Implementation tools.
For each NX component, the reader will find a quick A brief introduction and a description of both the generics and ports . He will also find is included for each NX component along with a diagram of the component with and an instantiation example in VHDL.
...
Distribution and Management of Clocks
NX_BD
Description
The NX_BD component describes a Buffer Driver circuit that allows the user to direct the routing of a signal to the general routing or low-skew network.
Generics
system
mode string
default value “local_lowskew”
...
If mode is set to “global_lowskew”, the output signal is routed to global low skew network of fabric.
Ports
Ports | Direction | Type | Description |
I | input | std_logic | Input signal |
O | output | std_logic | Output signal |
Example
This documentation only provides the instantiation of the component.
Code Block |
---|
BD_0 : NX_BD generic map ( system => “global_lowskew” port map ( I => BUF_IN , O => BUF_OUT ); |
NX_GCK_U
Description
The NX_GCK_U component describes a configurable ClocK Switch circuit that allows glitch free clock generation. It can be used to enable/disable the clock to part of the user’s logic – providing that the output signal will be glitch free – and the delay from the main clock to the generated one is un-significant.
...
The NX_GCK_U can be used exclusively by instantiation. The current version of NXmap3 Impulse does not yet support inference for this device.
Generics
inv_in
type bit
default value ‘0’
This generic select wether to invert (inv_in = ‘1’) or not both clock inputs pins SI1 and SI2.
inv_out
type bit
default value ‘0’
This generic select wether to invert (inv_out = ‘1’) or not the clock output pin SO.
std_mode
type string
default value “BYPASS”
Select the configuration mode of the NX_GCK_U. NX_GCK_U can be configured into the following modes:
BYPASS, where the SO output pin copies the clock input SI1.
MUX, where the NX_GCK_U acts as a glitch free clock mux which allow to select with CMD pin either SI1 or SI2 clock signal to broadcast. In MUX mode, CMD=0 => SO=SI2 et CMD=1 => SO=SI1.
CKS, where the NX_GCK_U is configured as a clock switch controlled by CMD pin to gate the SI1 input clock to be broadcast or not on SO output. In CKS mode, CMD=0 => SO=0 et CMD=1 => SO=SI1.
CSC, where the NX_GCK_U is configured as common to system converter as the CMD input is copied on SO clock output. In CSC mode, SO=CMD.
Ports
Ports | Direction | Type | Description |
SI1 | input | std_logic | First Input clock |
SI2 | input | std_logic | Second Input clock |
CMD | Input | Std_logic | Command input |
SO | output | std_logic | Output clock |
Examples
This documentation only provides the instantiation of the component.
Code Block |
---|
GCK_0 : NX_GCK_U generic map ( std_mode => “MUX”, inv_in => ‘0’ , inv_out => ‘0’ ) port map ( SI1 => CK1 , SI2 => CK2 , CMD => ENABLE , SO => CKG -- SO <= SI1.CMD or SI2.not(CMD) ); GCK_1 : NX_GCK_U generic map ( std_mode => “MUX”, inv_in => ‘0’ , inv_out => ‘1’ ) port map ( SI1 => CK1 , SI2 => CK2 , CMD => ENABLE , SO => CKG -- SO <= not( SI1.CMD or SI2.not(CMD)) ); |
NX_CKS
Description
The NX_CKS component describes a ClocK Switch circuit that allows glitch free clock generation. It can be used to enable/disable the clock to part of the user’s logic – providing that the output signal will be glitch free – and the delay from the main clock to the generated one is un-significant. NX_CKS implements and automatically configures a NX_GCK_U primitive in CKS mode.
...
The NX_CKS can be used exclusively by instantiation. The current version of NXmap Impulse does not yet support inference for this device.
...
The blue internal signals are CMD signal sampled on rising edge (SPL1) and then sampled on falling edge (SPL0). SPL0 is the final enable.
Ports
Ports | Direction | Type | Description |
CKI | input | std_logic | Input clock |
CMD | input | std_logic | Command |
CKO | output | std_logic | Output clock |
Example
This documentation only provides the instantiation of the component.
Code Block |
---|
CKS_0 : NX_CKS port map ( CKI => CK , CMD => ENABLE , CKO => CKG ); |
NX_CMUX
Description
The NX_CMUX component describes a Clock mux circuit that allows glitch free clock selection between two input clock signals. It can be used to enable/disable the clock to part of the user’s logic – providing that the output signal will be glitch free – and the delay from the main clock to the generated one is un-significant. NX_CMUX implements and automatically configures a NX_GCK_U primitive in MUX mode.
...
The NX_CMUX can be used exclusively by instantiation. The current version of NXmap Impulse does not yet support inference for this device.
Ports
Ports | Direction | Type | Description |
CKI0 | input | std_logic | First Input clock |
CKI1 | input | std_logic | Second Input clock |
SEL | input | std_logic | Select input to choose wether CKO <= CKI0 (SEL=0) or CKO <= CKI1 (SEL=1) |
CKO | output | std_logic | Output clock |
Example
This documentation only provides the instantiation of the component.
Code Block |
---|
CMUX_0 : NX_CMUX port map ( CKI0 => CK0 , CKI1 => CK1 , SEL => ENABLE , CKO => CKG ); |
NX_PLL_U
Description
The NX_PLL_U component describes a Phase Locked Loop circuit available in NG-ULTRA with an associated calibration delay module. The PLL just as the WaveForm Generators (WFG) is part of the ClocK Generator block (also called CKG). There are 7 CKG blocks in NG-ULTRA, 4 on in each corner of the FPGA die plus 2 on each side of the SoC and one at the center bottom of the FPGA die.
...
Figure 2: NG-ULTRA CKG block diagram
The next figure shows a block diagram of the NX_PLL_U and the user’s settings (in yellow).
Figure 3: Simplified NG-ULTRA PLL block diagram
Generics
location
type string
default value “”
This generic allows to define the NX_PLL_U location directly in the source code (instead of using the nxpython addPLLLocation method).
Example : location => “CKG2.PLL1”
use_pll
type bit
default value 0
Set to 1 to enable the PLL. When set to 0, the PLL is bypassed with Fvco = Frefo.
pll_odf
type bit_vector (1 downto 0)
default value others => ‘0’
Define the output division factor of the PLL (factors: 1, 2, 5 and 10).
pll_odf | Output Division factor |
0 | 1 |
1 | 2 |
2 | 5 |
3 | 10 |
pll_lock
type bit_vector (1 downto 0)
default value others => ‘0’
Configure the frequency lock.
pll_lock value | PPM approx |
0 | 20 |
1 | 40 |
2 | 60 |
3 | 80 |
4 | 100 |
5 | 200 |
6 | 400 |
7 | 600 |
8 | 800 |
9 | 1000 |
10 | 2000 |
11 | 4000 |
12 | 6000 |
13 | 8000 |
14 | 10000 |
15 | 20000 |
ref_intdiv
type bit_vector (4 downto 0)
default value others => ‘0’
The REFerence frequency can be divided by factors ranging from 1 to 32 before reaching the VCO input. This allows to give more flexibility of the PLL generated output frequency, and increase the PLL input frequency range.
REF input frequency range | ref_intdiv value | Vco input frequency |
5 to 50 MHz | 0 | Fref |
10 to 100 MHz | 1 | Fref / 2 |
15 to 150 MHz | 2 | Fref / 3 |
20 to 200 MHz | 3 | Fref / 4 |
… | ... | … |
150 MHz to 1,5 GHz | 29 | Fref / 30 |
155 MHz to 1,55 GHz | 30 | Fref / 31 |
160 MHz to 1,6 GHz | 31 | Fref / 32 |
For VCO expected at 400MHz, ref_intdiv value must be set to 8 with a REF input frequency range between 45 and 450 Mhz.
ref_osc_on
type bit
default value ‘0’
This generic configures the source of the PLL reference.
If ref_osc_on is set to ‘0’, the input reference of the pll is the REF input pin.
If set to ‘1’, the internal oscillator is used as reference of the PLL.
ext_fbk_on
type bit
default value ‘0’
When ‘0’, the internal feedback path is selected. The output of the FBK_INTDIV divider is used as feedback source. The VCO output frequency is divided by (fbk_intdiv + 1)
When ‘1’, the external feedback path is selected. This is particularly useful for “zero delay” clock generation.
fbk_intdiv
type bit_vector (6 downto 0)
default value others => ‘0’
Internal feedback divider of N+1 ratio (with division from 1 to 128).
fbk_delay_on
type bit
default value ‘0’
This generic configures whether the delay of the feedback path is active (‘1’) or not (‘0’).
fbk_delay
type bit_vector (5 downto 0)
default value others => ‘0’
The number of delay taps on the feedback path (internal or external) can be adjusted to meet the required phase on the VCO outputs. When using external feedback, it can be used to compensate the delay on the reference clock input to the REF pin of the PLL via the semi-dedicated clock input pin and associated direct routing.
The delay can be selected or not (see fbk_delay_on). When selected, it can be adjusted from 340 ps (fbk_delay = 0) to 10580 ps (fbk_delay = 63) by steps of 160 ps.
clk_outdiv1 : applies to CLK_DIV1
type bit_vector (2 downto 0)
default value others => ‘0’
...
CLK_DIV1 = Fpll/(2*7+3) = Fpll / 17
clk_outdiv2 : applies to CLK_DIV2
type bit_vector (2 downto 0)
default value others => ‘0’
...
CLK_DIV2 = Fpll/(2*7+5) = Fpll / 19
clk_outdiv3 : applies to CLK_DIV3
type bit_vector (2 downto 0)
default value others => ‘0’
...
CLK_DIV3 = Fpll/(2*0+5) = Fpll / 7
If clk_outdiv3 = 7
CLK_DIV3 = Fpll/(2*7+5) = Fpll / 21
clk_outdiv4 : applies to CLK_DIV4
type bit_vector (2 downto 0)
default value others => ‘0’
...
CLK_DIV4 = Fpll/(2*0+5) = Fpll / 9
If clk_outdiv4 = 7
CLK_DIV4 = Fpll/(2*7+5) = Fpll / 23
clk_outdivd* : applies to CLK_DIVD*
type bit_vector (3 downto 0)
default value others => ‘0’
...
This generic allows to define the divider value of the CLK_DIVD* output. There are 16 possible values:
clk_outdivd* | ratio | Fpll_div_dyn (ex: Fpll = 800Mhz) |
0 | 2 | 400 |
1 | 4 | 200 |
2 | 6 | 133.33 |
3 | 8 | 100 |
4 | 10 | 80 |
5 | 20 | 40 |
6 | 40 | 20 |
7 | 60 | 13.33 |
8 | 80 | 10 |
9 | 100 | 8 |
10 | 200 | 4 |
11 | 400 | 2 |
12 | 600 | 1.33 |
13 | 800 | 1 |
14 | 1000 | 0.8 |
15 | 2000 | 0.4 |
* clk_outdivd1/2/3/4/5 respectively apply to CLK_DIVD1/2/3/4/5
use_cal
type bit
default value ‘0’
When set to 0, the calibration module is bypassed. When set to 1, the calibration module is activated with cal_div and cal_delay generics used to define divide and delay values of the calibration engine.
clk_cal_sel
type bit_vector (1 downto 0)
default value “01”
Select the clock used for internal calibration.
cal_div
type bit_vector (3 downto 0)
default value “0111”
Set the division factor of the calibration engine.
cal_delay
type bit_vector (5 downto 0)
default value “011011”
Set the delay value of the calibration engine.
Notes about user’s adjustable delays on NG-ULTRA:
The PLL has a user’s selectable and adjustable delay line (no delay or 0 to 63 x 100 ps +/- 5% delay taps) on the feedback path. A similar delay chain is available in each WFGs. Finally, the IO banks have input, output and tri-state command 64-tap delay chains.
All the delay chain taps are calibrated with the same automatic process and hardware resources.
The procedure is transparent to the user.
The delays calibration system uses the PLL 400 MHz oscillator output as reference clock to calibrate all delays: feedback path in the PLL itself, WFG delays and calibration delay in same CKG), and IO delays in the neighboring complex IO banks:
CKG1 oscillator calibrates the delays in CKG1 (PLL + CAL+ WFGs)
Banks 11 to 13
CKG2 oscillator calibrates the delays in CKG2 (PLL + CAL + WFGs)
Banks 2 to 3
CKG3 oscillator calibrates the delays in CKG3 (PLL + CAL + WFGs)
CKG4 oscillator calibrates the delays in CKG4 (PLL + CAL + WFGs)
Banks 4 to 5
CKG5 oscillator calibrates the delays in CKG5 (PLL + CAL+ WFGs)
Banks 8 to 10
CKG6 oscillator calibrates the delays in CKG6 (PLL + CAL+ WFGs)
Banks 8 to 10
CKG7 oscillator calibrates the delays in CKG7 (PLL + CAL+ WFGs)
Banks 11 to 13
The calibration procedure takes about 10 µs at startup. The “CAL_LOCKED” output goes high when the delay calibration process is complete. Can be used as status bit.
Ports
Ports | Direction | Type | Description |
REF | In | std_logic | Reference clock input Connectivity: semi-dedicated clock inputs, clock trees (low skew network) |
FBK | In | std_logic | External FeedBack input Connectivity: semi-dedicated clock inputs, clock trees (low skew network) |
R | In | std_logic | Active high Reset input. Must be activated when REF input frequency changes to force a re-locking process of the PLL |
ARST_CAL | In | std_logic | Active high asynchronous reset input of the calibration module |
CAL_CLK | In | std_logic | Clock input of the calibration module. |
EXT_CAL_LOCKED | In | sdt_logic | Input of the calibration module coming from the fabric. Indicates the calibration is locked |
EXT_CAL1/2/3/4/5 | In | sdt_logic | Input of the calibration module coming from the fabric. Indicates the calibration value send by fabric |
VCO | Out | std_logic | VCO output: - Fvco = REF * 2 * (fbk_intdiv+1) / (ref_intdiv+1) with use_pll = 1 - Fvco = Frefo when use_pll = 0 |
REFO | Out | std_logic | Output of the REFerence divider. The division factor is set by the generic “ref_intdiv” |
LDFO | Out | std_logic | Output of the FBK_INTDIV divider. The division factor is set by the generic ‘fbk_intdiv” |
CLK_DIV1 | Out | std_logic | This output delivers a divided (by 2N+3) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdiv1” |
CLK_DIV2 | Out | std_logic | This output delivers a divided (by 2N+5) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdiv2” |
CLK_DIV3 | Out | std_logic | This output delivers a divided (by 2N+7) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdiv3” |
CLK_DIV4 | Out | std_logic | This output delivers a divided (by 2N+9) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdiv4” |
CLK_DIVD1 | Out | std_logic | This output delivers a dynamically divided (by N+2) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdivd1” |
CLK_DIVD2 | Out | std_logic | This output delivers a dynamically divided (by N+2) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdivd2” |
CLK_DIVD3 | Out | std_logic | This output delivers a dynamically divided (by N+2) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdivd3” |
CLK_DIVD4 | Out | std_logic | This output delivers a dynamically divided (by N+2) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdivd4” |
CLK_DIVD5 | Out | std_logic | This output delivers a dynamically divided (by N+2) PLL frequency or REF frequency (in case PLL is bypassed). The division factor is set by the generic “clk_outdivd5” |
OSC | Out | std_logic | Internal 400 MHz oscillator Connectivity: WFG inputs, delay calibration engine |
PLL_LOCKED | Out | std_logic | High when PLL is locked synchronously (fine grain) Connectivity: RDY inputs of WFGs, fabric… |
PLL_LOCKEDA | Out | std_logic | High when PLL is locked asynchronously (coarse grain) Connectivity: RDY inputs of WFGs, fabric… |
CLK_CAL_DIV | Out | std_logic | Divided Clock of the calibration module sent to fabric |
CAL_LOCKED | Out | std_logic | High when the automatic calibration procedure of the current FPGA quarte area is complete Connectivity: fabric |
CAL1/2/3/4/5 | Out | std_logic | Calibration value sent to fabric |
Instantiation Example
This documentation only provides the instantiation of the component.
Code Block |
---|
-- In this example : -- Fref = 96 MHz (and “ref_intdiv” = 11 for division factor of 12) -- Fvco = 417 MHz (96 MHz x 2 x (“fbk_intdiv” + 1) / (“ref_intdiv” + 1)) -- Fvco = 417 MHz (96 MHz x 2 x (24 + 1) / (11 + 1)) -- Please note that Fvco must be in the range 200 to 800 MHz -- Fdiv1 = 417 MHz / (2 * “clk_outdiv1” + 3) = 417 MHz / 7 = 59.52 MHz -- Fdiv2 = 417 MHz / (2 * “clk_outdiv2” + 5) = 417 MHz / 11 = 37.88 MHz -- Fdiv3 = 417 MHz / (2 * “clk_outdiv3” + 7) = 417 MHz / 13 = 32.05 MHz -- Fdiv4 = 417 MHz / (2 * “clk_outdiv4” + 9) = 417 MHz / 15 = 27.78 MHz -- Fdivd1 = 417 MHz / (“clk_outdivd1” ratio) = 417 MHz / 2 = 208 MHz -- Fdivd2 = 417 MHz / (“clk_outdivd2” ratio) = 417 MHz / 8 = 52 MHz -- Fdivd3 = 417 MHz / (“clk_outdivd3” ratio) = 417 MHz / 40 = 10.42 MHz -- Fdivd4 = 417 MHz / (“clk_outdivd4” ratio) = 417 MHz / 80 = 5.21 MHz -- Fdivd5 = 417 MHz / (“clk_outdivd5” ratio) = 417 MHz / 2000 = 0.208 MHz PLL0 : NX_PLL_U generic map ( location => “CKG4.PLL1”, ref_intdiv => “01011”, -- 0 to 31 ((N+1 : (%1 to %32) -- 11 for div by 12 ref_osc_on => '0', -- 0: disabled - 1: enabled ext_fbk_on => '0', -- 0: disabled - 1: enabled fbk_intdiv => “0011000”, -- 0 to 31 ((N+1) : %4 to %66 by step 2) -- Div by 25 fbk_delay_on => '0', -- 0: no delay - 1: delay fbk_delay => “000000”, -- clk_outdiv1 => “010”, -- 0 to 7 D1 (2N+3) -- Div by 7 clk_outdiv2 => “011”, -- 0 to 7 D2 (2N+5) -- Div by 11 clk_outdiv3 => “011”, -- 0 to 7 D3 (2N+7) -- Div by 13 clk_outdiv4 => “011”, -- 0 to 7 D4 (2N+9) -- Div by 15 clk_outdivd1 => “0000”, -- 0 to 15 DIVD1 -- Div by 2 clk_outdivd2 => “0011”, -- 0 to 15 DIVD2 -- Div by 8 clk_outdivd3 => “0110”, -- 0 to 15 DIVD3 -- Div by 40 clk_outdivd4 => “1000”, -- 0 to 15 DIVD4 -- Div by 80 clk_outdivd5 => “1111” -- 0 to 15 DIVD5 -- Div by 2000 ) port map ( REF => REFIN, FBK => FBK, R => RST, ARST => ARST, VCO => VCO, LDFO => LDFO, REFO => REFO, CLK_DIV1 => DIV1, CLK_DIV2 => DIV2, CLK_DIV3 => DIV3, CLK_DIV3 => DIV3, CLK_DIVP1 => DIVP1, CLK_DIVP2 => DIVP2, CLK_DIVP3 => DIVP3, CLK_DIVP4 => DIVP4, CLK_DIVP5 => DIVP5, OSC => OSC, PLL_LOCKED => PLL_LOCKED, PLL_LOCKEDA => PLL_LOCKEDA, CAL => CAL, CAL_DIV => CAL_DIV, CAL_LOCKED => CAL_LOCKED ); |
Simulation
The NX_PLL VHDL simulation model is included in the NxLibrary (NxPackage.vhd). It allows to simulate any one of the possible NX_PLL configurations.
NX_WFG_U
Description
The NX_WFG_U component is used to access the low skew lines and clock trees on NG-ULTRA. The NX_WFG_U is very similar to the NX_WFG_L of NG-LARGE. The difference is that the NX_WFG_U doesn’t have a RDY pin, only a R pin which can receive any external reset signal from the design and be internally combined with three other different sources of synchronization (coming from PLL lock output signals if one or several of the associated generics (reset_on_pll_lock_n, reset_on_pll_locka_n and reset_on_cal_lock_n) is set to 1. The NX_WFG_U also provides a full set of additional generic parameters.
...
Figure 4: NX_WFG_U diagram
Generics
location
type string
default value “” (no location constraint)
This generic allows to define the NX_WFG_L location directly in the source code (with the addWFGLocation method)
Example : location => “CKG2.WFG_C2”,
delay
type integer
default value 0
...
This generic configures whether the input clock is inverted (‘1’) or not (‘0’). When sampling the input clock, this generic configures whether the sampling is done on rising edge (‘0’) or falling edge (‘1’).
Ports
Ports | Direction | Type | Description |
SI | input | std_logic | Synchronization input (connected to the synchronization output of the master WFG) |
ZI | input | std_logic | Input clock (connected to PLL VCO or D1, D2 or D3 output) |
R | Input | std_logic | Active High Reset. Can be fed by any signal coming from outside the CKG. |
SO | output | std_logic | Synchronization output (Master WFG SO output is connected to all slave WFGs SI inputs) |
ZO | output | std_logic | Generated clock (connected to clock tree) |
...
When sampling the input clock, the synchronization input must be connected either to another WFG (using pattern) synchronization output or the synchronization output of the WFG itself.
Example
This documentation only provides the instantiation of the component.
...
Code Block |
---|
-- CK50MHz at 50 MHz -- NOTCK = ~CK50MHz -- CK25MHz = CK50MHz / 2 WFG_0 : NX_WFG_U generic map ( location => “CKG1.WFG_C2”, wfg_edge => ‘1’ ) port map ( SI => OPEN, SO => OPEN , ZI => CK50MHz, ZO => NOTCK ); WFG_1 : NX_WFG_U Generic map ( location => “CKG1.WFG_C2”, mode => ‘1’, div_ratio => 0, div_phase => ‘1’, pattern_end => 1, pattern => b"1000000000000000" ) port map ( SI => SYNC, SO => SYNC , ZI => CK50MHz, ZO => CK25MHz ); |
Simulation
The NX_WFG_U VHDL simulation model is included in the NxLibrary (NxPackage.vhd). It allows to simulate any one of the possible NX_WFG_U configurations.
Core logic
NX_CY (!)
(!) : Important note : on nxmap3Impulse, the NX_CY primitive includes only the dedicated arithmetic logic, excluding the Functional Element LUTs and FFs – unlike on nxmap2Impulse, where the NX_CY primitive included the FE logic shown in dashed lines.
Description
The NX_ADD component describes a 4-bit adder and carry look ahead circuit. It’s available on the FEs having arithmetic logic capabilities.
The NX_ADD is composed of 4 stages numbered from 1 to 4 where 1 represents the LSB.
Figure 6: NX_ADD diagram
Generics
add_carry
type integer range 0 to 2
...
This generic represents the way the CI (carry in) port is connected: 0 is for low, 1 for high and 2 for propagate which means it is connected to the previous NX_CY CO (carry out) port.
Ports
Ports | Direction | Type | Description |
A[1:4] | input | std_logic | A input of each stage |
BI[1:4] | input | std_logic | B input of each stage |
CI | input | std_logic | Carry input |
CO | output | std_logic | Carry output |
S[1:4] | output | std_logic | Output of each stage |
Example
This documentation only provides the instantiation of the component..
Code Block |
---|
-- SUM[3:0] <= A[3:0] + ”10”&B[1:0] ADD_0 : NX_CY generic map ( add_carry => 0 -- low ) port map ( A1 => A(0), B1 => B(0) , A2 => A(1), B2 => B(1) , A3 => A(2), B3 => ‘0’ , A4 => A(3), B4 => ‘1’ , CI => OPEN, CO => OPEN , S1 => SUM(0), S2 => SUM(1), S3 => SUM(2), S4 => SUM(3) ); |
NX_LUT
Description
The NX_LUT component describes a 4-input LUT as part of a functional element (FE) as shown in the following diagram:
Figure 7: NX_LUT diagram
Generics
lut_table
type bit_vector(15 downto 0)
...
I4 and I3 and I2 and I1 => lut_table = b“1000000000000000” (or x”8000”)
I4 or I3 or I2 or I1 => lut_table = b“1111111111111110” (or x”FFFE”)
(I4 and I3) xor (I2 and I1) => lut_table = x”0111 1000 1000 1000” (or x”7888”)
Ports
Ports | Direction | Type | Description |
I[1:4] | input | std_logic | LUT inputs |
O | output | std_logic | Output |
Example
This documentation only provides the instantiation of the component.
Code Block |
---|
LUT_0 : NX_LUT generic map ( lut_table => b“1000000000000000” -– O <= A and B and C and D ) port map ( I1 => A , I2 => B , I3 => C , I4 => D , O => OUT ); |
NX_DFF
Description
The NX_DFF component describes a DFF of the functional elements as shown in the following diagram:
...
Figure 8: NX_DFF diagram
Generics
dff_ctxt
type std_logic
default value ‘U’
...
This generic represents whether the reset must initialize the DFF to 0 or 1. dff_type is set to ‘0’ for reset initializing the DFF to 0, dff_type is set to ‘1’ for reset initializing the DFF to 1. dff_type can also be set to 2 to configure set/reset on signal.
Ports
Ports | Direction | Type | Description |
I | input | std_logic | Input |
CK | input | std_logic | Clock |
L | input | std_logic | Load |
R | input | std_logic | Reset, active high |
O | output | std_logic | Output |
Example
This documentation only provides the instantiation of the component.
...
Code Block |
---|
DFF_0 : NX_DFF generic map ( dff_edge => ‘0’ -- rising edge , dff_load => ‘0’ -- always load , dff_init => ‘1’ -- use connected reset net , dff_sync => ‘1’ -- synchronous reset , dff_ctxt => ‘0’ -- initial value is 0 ) port map ( I => IN , O => OUT , CK => CLK , R => RST , L => OPEN ); |
NX_FIFO_U
Description
The NX_FIFO_U component provides a combination of two Register File Blocks circuit used as a base component for dedicated NX IPs defined for FIFO configuration of the RF with CDC (clock domain crossing) features: DPREG, XFIFO_64x18 (extended number of words) and 2 for XFIFO_32x36 (extended word size). Note that dedicated hard IPs are available for specific FIFO configurations : NX_XFIFO_64x18 and NX_XFIFO_32x36
Generics
wck_edge
type bit
default value ‘0’
...
This generic defines the desired FIFO configuration among: 0 for DPREG, 1 for XFIFO_64x18 (extended number of words) and 2 for XFIFO_32x36 (extended word size).
Ports
Ports | Direction | Type | Description |
RCK | input | std_logic | Read clock |
WCK | input | std_logic | Write clock |
I1 to I36 | input | std_logic | Write data (2x18 input bits) |
O1 to O36 | output | std_logic | Read Data (2x18 output bits) |
WRSTI | input | std_logic | Reset from the write clock domain. Active High |
RRSTI | input | std_logic | Reset from the read clock domain. Active High |
RAI1 to RAI7 | input | std_logic | Read pointer from read clock domain |
RAO1 to RAO7 | output | std_logic | Read pointer to write clock domain |
WAI1 to WAI7 | input | std_logic | Write pointer from write clock domain |
WAO1 to WAO7 | output | std_logic | Write pointer to read clock domain |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all (we in all registers) |
WEQ1 to WEQ2 | output | std_logic | Comparison of read/write pointers in write clock domain |
REQ1 to REQ2 | output | std_logic | Comparison of read/write pointers in read clock domain |
NX_FIFO_DPREG
Description
The NX_FIFO_DPREG is a wrapper component around NX_FIFO_U to have bus interfaces instead of bit to bit signals and defining a 32x18 DPREG configuration based on RF implementation.
Generics
wck_edge
type bit
default value ‘0’
...
type bit_vector(5 downto 0)
default value “000000”
Ports
Ports | Direction | Type | Description |
RCK | input | std_logic | Read clock |
WCK | input | std_logic | Write clock |
I | input | std_logic_vector (17 downto 0) | Write data |
O | output | std_logic_vector (17 downto 0) | Read Data |
WRSTI | input | std_logic | Reset from the write clock domain. Active High |
RRSTI | input | std_logic | Reset from the read clock domain. Active High |
RAI | input | std_logic_vector (5 downto 0) | Read pointer from read clock domain |
RAO | output | std_logic_vector (5 downto 0) | Read pointer to write clock domain |
WAI | input | std_logic_vector (5 downto 0) | Write pointer from write clock domain |
WAO | output | std_logic_vector (5 downto 0) | Write pointer to read clock domain |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all (we in all registers) |
WEQ | output | std_logic | Comparison of read/write pointers in write clock domain |
REQ | output | std_logic | Comparison of read/write pointers in read clock domain |
NX_XFIFO_64x18
Description
The NX_XFIFO_64x18 provides a direct hard IP configuration for a memory based on register file elements made of 64 words of 18 bits using the NX_FIFO_U component.
Generics
wck_edge
type bit
default value ‘0’
...
type bit_vector(6 downto 0)
default value “0000000”
Ports
Ports | Direction | Type | Description |
RCK | input | std_logic | Read clock |
WCK | input | std_logic | Write clock |
I | input | std_logic_vector (17 downto 0) | Write data bus |
O | output | std_logic_vector (17 downto 0) | Read Data |
WRSTI | input | std_logic | Reset from the write clock domain. Active High |
RRSTI | input | std_logic | Reset from the read clock domain. Active High |
RAI | input | std_logic_vector (6 downto 0) | Read pointer from read clock domain |
RAO | output | std_logic_vector (6 downto 0) | Read pointer to write clock domain |
WAI | input | std_logic_vector (6 downto 0) | Write pointer from write clock domain |
WAO | output | std_logic_vector (17 downto 0) | Write pointer to read clock domain |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all (we in all registers) |
WEQ | output | std_logic_vector (1 downto 0) | Comparison of read/write pointers in write clock domain |
REQ | output | std_logic_vector (1 downto 0) | Comparison of read/write pointers in read clock domain |
NX_XFIFO_32x36
Description
The NX_XFIFO_32x36 provides a direct hard IP configuration for a memory based on register file elements made of 32 words of 36 bits using the NX_FIFO_U component.
Generics
wck_edge
type bit
default value ‘0’
...
type bit_vector(6 downto 0)
default value “0000000”
Ports
Ports | Direction | Type | Description |
RCK | input | std_logic | Read clock |
WCK | input | std_logic | Write clock |
I | input | std_logic_vector (35 downto 0) | Write data bus |
O | output | std_logic_vector (35 downto 0) | Read Data |
WRSTI | input | std_logic | Reset from the write clock domain. Active High |
RRSTI | input | std_logic | Reset from the read clock domain. Active High |
RAI | input | std_logic_vector (5 downto 0) | Read pointer from read clock domain |
RAO | output | std_logic_vector (5 downto 0) | Read pointer to write clock domain |
WAI | input | std_logic_vector (5 downto 0) | Write pointer from write clock domain |
WAO | output | std_logic_vector (5 downto 0) | Write pointer to read clock domain |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all (we in all registers) |
WEQ | output | std_logic | Comparison of read/write pointers in write clock domain |
REQ | output | std_logic | Comparison of read/write pointers in read clock domain |
NX_RFB_U
Description
Each TILE of NG-Ultra implements two Simple Dual Port memory of 32 words of 18-bit (one port is dedicated to write, the second port is dedicated to read) which can be combined to form deeper or larger memories.
...
The NX_RFB_U component provides a Register File Block circuit which combine the interfaces of two Simple Dual Port memory of 32 words of 18-bit, and which is used as a base component for dedicated NX IPs defined for each possible configuration of the RF: DPREG, SPREG, XRF_64x18 (Extended RF using both 32x18 RF for extended word size memory), XRF_32x36 (Extended RF using both 32x18 RF for extended bit length memory) and XRF_2R_1W (configuration as a RF with 2 read ports and 1 write port).
The nxmap Impulse nxLibrary-Ultra.vhdp defines several dedicated NX IP models, instantiating NX_RFB_U component, for each of the above configurations.
...
Implement simple decoding functions for Write_Enable or Write_Enable_all
Address/Data multiplexers to implement time multiplexed two write ports and/or two read ports (not yet supported by NXmapImpulse)
(see NXmap Impulse related notes for more details)
...
If the Register_File is used and configured with optional output pipeline registers, those registers can be implemented with FE Flip-Flops of the same tile section (Up to 18 FFs for Data_out)
If the Register_File is partially used (for example as 32 x 10 SDP RAM), the remaining 8 FEs will stay free to implement other unrelated logic functions)
NXmap Impulse support: The current version of NXmap Impulse supports the implementation of simple decoders on the Write_Enable and Read_Enable commands paths (the Register_File must be instantiated). LUTs are used as transparent for data inputs as well as read and write addresses (both inference and instantiation). Future versions of NXmap Impulse will support higher flexibility such as multiplexers and other simple combinatorial function on the data and address input paths. |
Generics
wck_edge
type bit
default value ‘0’
...
This generic defines the desired RF configuration: 0 for DPREG, 1 for SPREG, 2 for XRF_64x18, 3 for XRF_32x36 and 4 for XRF_2R_1W.
Ports
Ports | Direction | Type | Description |
WCK | input | std_logic | Write clock |
I1 to I36 | input | std_logic | Data input (2x18 input bits) |
O1 to O36 | output | std_logic | Data output (2x18 output bits) |
RA1 to RA10 | input | std_logic | Read address (2x5 input bits) |
WA1 to WA6 | input | std_logic | Write address |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all (we in all registers) |
Instantiation Example
This documentation only provides the instantiation of the component.
Code Block |
---|
-- RFB 32 words of 18 bits RFB_0 : NX_RFB_U generic map ( mode => 0 –- DPREG mode selected , wck_edge => ‘0’ – rising edge detection for clock , mem_context => "1111111111111111,0011001100110011," & "1100110011001100,1111111111111111," & "..." -- other 64 words must be also initialized ) port map ( WCK => CLK , I1 => DI(0), ... , I16 => DI(15) , COR => COR, ERR => ERR , O1 => DO(0), ... , O16 => DO(15) , RA1 => RA(0), ... , RA6 => RA(5) , WA1 => WA(0), ... , WA6 => WA(5) , RE1 => OPEN, ... , RE4 => OPEN , WE1 => WE , WE2 => OPEN, ... , WE4 => OPEN ); |
NX_XRFB_64x18
Description
The NX_XRFB_64x18 implements a configured DPREG of 64 words of 18 bits with write clock edge configuration, using NX_RFB_U component, and providing compact vector interfaces for user convenience.
Generics
wck_edge
type bit
default value ‘0’
...
When a word size exceeds 18 bits or when the number of words exceeds 64, an error occurs.
Ports
Ports | Direction | Type | Description |
WCK | input | std_logic | Write clock |
I[17:0] | input | std_logic_vector | Data input |
O[17:0] | output | std_logic_vector | Data output |
RA[5:0] | input | std_logic_vector | Read address |
WA[5:0] | input | std_logic_vector | Write address |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all registers |
Instantiation Example
This documentation only provides the instantiation of the component.
Code Block |
---|
-- RFB 64 words of 18 bits RFB_0 : NX_XRFB_64x18 generic map ( wck_edge => ‘0’ , mem_context => "1111111111111111,0011001100110011," & "1100110011001100,1111111111111111," & "..." -- other 64 words must be also initialized ) port map ( WCK => CLK , I => DI(17 downto 0) , O => DO(17 downto 0) , RA => RA(5 downto 0) , WA => WA(5 downto 0) , WE => WE , WEA => WEA ); |
NX_XRFB_32x36
Description
The NX_XRFB_32x36 implements a configured DPREG of 32 words of 36 bits (combining both Register files of a TILE) with write clock edge configuration, using NX_RFB_U component, and providing compact vector interfaces for user convenience.
Generics
wck_edge
type bit
default value ‘0’
...
When a word size exceeds 36 bits or when the number of words exceeds 32, an error occurs.
Ports
Ports | Direction | Type | Description |
WCK | input | std_logic | Write clock |
I[35:0] | input | std_logic_vector | Data input |
O[35:0] | output | std_logic_vector | Data output |
RA[4:0] | input | std_logic_vector | Read address |
WA[4:0] | input | std_logic_vector | Write address |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all registers |
NX_XRFB_2R_1W
Description
The NX_XRFB_2R_1W implements a Register File configured with two read ports of 18 bits each and one write port of 18 bits with write clock edge configuration, using NX_RFB_U component, and providing compact vector interfaces for user convenience.
Generics
wck_edge
type bit
default value ‘0’
...
When a word size exceeds 18 bits or when the number of words exceeds 32, an error occurs.
Ports
Ports | Direction | Type | Description |
WCK | input | std_logic | Write clock |
I[17:0] | input | std_logic_vector | Data input write port |
A0[17:0] | output | std_logic_vector | Data output first read port |
B0[17:0] | output | std_logic_vector | Data output second read port |
ARA[4:0] | input | std_logic_vector | Read address for first port |
BRA[4:0] | input | std_logic_vector | Read address for second port |
WA[4:0] | input | std_logic_vector | Write address |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all registers |
NX_RFBSP_U_WRAP
Description
The NX_RFBSP_U_WRAP implements a 32x18 Register File configured with a single write/read port.
Generics
wck_edge
type bit
default value ‘0’
...
When a word size exceeds 18 bits or when the number of words exceeds 32, an error occurs.
Ports
Ports | Direction | Type | Description |
WCK | input | std_logic | Write clock |
I[17:0] | input | std_logic_vector | Data input write port |
0[17:0] | output | std_logic_vector | Data output first read port |
WA[4:0] | input | std_logic_vector | Write address |
WE | input | std_logic | Write enable |
WEA | input | std_logic | Write enable all registers |
NX_CDC_U_2DFF
Description
The NX_CDC_U_2DFF component describes a CDC (Clock Domain Crossing) module that transmits data between two clock domains CK0 and CK1. The data provided on ports A and B in source clock domain are synchronized in destination clock domain with two pipe registers.
Generics
ck0_edge
type bit
default value ‘0’
...
This generic allows to use destination reset connected to BDRSTO output when set to ‘1’.
Ports
Ports | Direction | Type | Description |
CK1 | input | std_logic | Reference clock 0 |
CK2 | input | std_logic | Reference clock 1 |
ADRSTI | input | std_logic | Asynchronous reset related to port A used for destination synchronization pipe registers. Active high. |
ADRSTO | output | std_logic | Asynchronous destination reset related to port A synchronized in destination clock domain. Active high. |
AI | intput | std_logic_vector (5 downto 0) | Data input port A on source clock domain |
AO | output | std_logic_vector (5 downto 0) | Data output port A on destination clock domain |
BDRSTI | input | std_logic | Asynchronous destination reset related to port B used for destination synchronization pipe registers. Active high. |
BDRSTO | output | std_logic | Asynchronous destination reset related to port B synchronized in destination clock domain. Active high. |
BI | intput | std_logic_vector (5 downto 0) | Data input port B on source clock domain |
BO | output | std_logic_vector (5 downto 0) | Data output port B on destination clock domain |
NX_CDC_U_3DFF
Description
The NX_CDC_U_3DFF component describes a CDC (Clock Domain Crossing) module that transmits data between two clock domains CK0 and CK1. The data provided on ports A and B are registered in source clock domain with one pipe register and the synchronization of these data is done in destination clock domain with two pipe registers.
Generics
ck0_edge
type bit
default value ‘0’
...
This generic allows to use destination reset connected to BDRSTO output when set to ‘1’ in order to reset the data destination pipe registers.
Ports
Ports | Direction | Type | Description |
CK1 | input | std_logic | Reference clock 0 |
CK2 | input | std_logic | Reference clock 1 |
ASRSTI | input | std_logic | Asynchronous reset related to port A used for source pipe register. Active high. |
ADRSTI | input | std_logic | Asynchronous reset related to port A used for destination synchronization pipe registers. Active high. |
ASRSTO | output | std_logic | Asynchronous source reset related to port A synchronized in destination clock domain. Active high. |
ADRSTO | output | std_logic | Asynchronous destination reset related to port A synchronized in destination clock domain. Active high. |
AI | intput | std_logic_vector (5 downto 0) | Data input port A on source clock domain |
AO | output | std_logic_vector (5 downto 0) | Data output port A on destination clock domain |
BSRSTI | input | std_logic | Asynchronous reset related to port B used for source pipe register. Active high. |
BDRSTI | input | std_logic | Asynchronous reset related to port B used for destination synchronization pipe registers. Active high. |
BSRSTO | output | std_logic | Asynchronous source reset related to port B synchronized in destination clock domain. Active high. |
BDRSTO | output | std_logic | Asynchronous destination reset related to port B synchronized in destination clock domain. Active high. |
BI | intput | std_logic_vector (5 downto 0) | Data input port B on source clock domain |
BO | output | std_logic_vector (5 downto 0) | Data output port B on destination clock domain |
NX_CDC_U_BIN2GRAY
Description
The NX_CDC_U_BIN2GRAY component describes a hard IP that can be used before NX_CDC_U_2DFF and NX_CDC_U_3DFF clock domain crossing modules in order to translate the input data in ports A and B from binary to gray representation.
Ports
Ports | Direction | Type | Description |
AI | intput | std_logic_vector (5 downto 0) | Data input port A on binary representation |
AO | output | std_logic_vector (5 downto 0) | Data output port A on gray representation |
BI | intput | std_logic_vector (5 downto 0) | Data input port B on binary representation |
BO | output | std_logic_vector (5 downto 0) | Data output port B on gray representation |
NX_CDC_U_GRAY2BIN
Description
The NX_CDC_U_GRAY2BIN component describes a hard IP that can be used before NX_CDC_U_2DFF and NX_CDC_U_3DFF clock domain crossing modules in order to translate the input data in ports A and B from gray to binary representation.
Ports
Ports | Direction | Type | Description |
AI | intput | std_logic_vector (5 downto 0) | Data input port A on gray representation |
AO | output | std_logic_vector (5 downto 0) | Data output port A on binary representation |
BI | intput | std_logic_vector (5 downto 0) | Data input port B on gray representation |
BO | output | std_logic_vector (5 downto 0) | Data output port B on binary representation |
NX_XCDC_U
Description
The NX_XCDC_U component implements a fully external CDC (Clock Domain Crossing) module that transmits data between two clock domains CK1 and CK2 for 4 data ports A, B, C and D. The data provided on ports A, B, C and D are registered in source clock domain with one pipe register and the synchronization of these data is done in destination clock domain with two pipe registers.
Generics
ck0_edge
type bit
default value ‘0’
...
This generic allows to use destination reset connected to DDRSTO output when set to ‘1’ in order to reset the data destination pipe registers.
Ports
Ports | Direction | Type | Description |
CK1 | input | std_logic | Reference clock 0 |
CK2 | input | std_logic | Reference clock 1 |
ASRSTI | input | std_logic | Asynchronous reset related to port A used for source pipe register. Active high. |
ADRSTI | input | std_logic | Asynchronous reset related to port A used for destination synchronization pipe registers. Active high. |
ASRSTO | output | std_logic | Asynchronous source reset related to port A synchronized in destination clock domain. Active high. |
ADRSTO | output | std_logic | Asynchronous destination reset related to port A synchronized in destination clock domain. Active high. |
AI | intput | std_logic_vector (5 downto 0) | Data input port A on source clock domain |
AO | output | std_logic_vector (5 downto 0) | Data output port A on destination clock domain |
BSRSTI | input | std_logic | Asynchronous reset related to port B used for source pipe register. Active high. |
BDRSTI | input | std_logic | Asynchronous reset related to port B used for destination synchronization pipe registers. Active high. |
BSRSTO | output | std_logic | Asynchronous source reset related to port B synchronized in destination clock domain. Active high. |
BDRSTO | output | std_logic | Asynchronous destination reset related to port B synchronized in destination clock domain. Active high. |
BI | intput | std_logic_vector (5 downto 0) | Data input port B on source clock domain |
BO | output | std_logic_vector (5 downto 0) | Data output port B on destination clock domain |
CSRSTI | input | std_logic | Asynchronous reset related to port C used for source pipe register. Active high. |
CDRSTI | input | std_logic | Asynchronous reset related to port C used for destination synchronization pipe registers. Active high. |
CSRSTO | output | std_logic | Asynchronous source reset related to port C synchronized in destination clock domain. Active high. |
CDRSTO | output | std_logic | Asynchronous destination reset related to port C synchronized in destination clock domain. Active high. |
CI | intput | std_logic_vector (5 downto 0) | Data input port C on source clock domain |
CO | output | std_logic_vector (5 downto 0) | Data output port C on destination clock domain |
DSRSTI | input | std_logic | Asynchronous reset related to port D used for source pipe register. Active high. |
DDRSTI | input | std_logic | Asynchronous reset related to port D used for destination synchronization pipe registers. Active high. |
DSRSTO | output | std_logic | Asynchronous source reset related to port D synchronized in destination clock domain. Active high. |
DDRSTO | output | std_logic | Asynchronous destination reset related to port D synchronized in destination clock domain. Active high. |
DI | intput | std_logic_vector (5 downto 0) | Data input port D on source clock domain |
DO | output | std_logic_vector (5 downto 0) | Data output port D on destination clock domain |
NX_DSP_U
Description
The NX_DSP_U component describes a Digital Signal Processor circuit that allows implementation of arithmetic computations such as multiply, add/subtract.
...
the reset R pin which will reset all registers (input, internal and output PR_Z registers) except the cascaded output register PR_CZ
the reset RZ pin which will reset only the cascaded output register PR_CZ.
note also that write enable signals are used in a similar way, with WE affecting input, internal and output PR_Z registers and WEZ affecting only the cascaded output register PR_CZ.
Generics
std_mode
type string
default value “”
...
Name | Index | Description |
INV_WE | 26 | Invert write enable on input/internal registers: ‘0’ : do not invert ‘1’ : invert |
INV_WEZ | 25 | Invert write enable on cascaded output register: ‘0’ : do not invert ‘1’ : invert |
INV_RST | 24 | Invert reset on input/internal registers: ‘0’ : do not invert ‘1’ : invert |
INV_RSTZ | 23 | Invert reset on cascaded output register: ‘0’ : do not invert ‘1’ : invert |
MUX_CCO | 22 | Carry out MUX ‘0’ : Select CO43 ‘1’ : Select CO57 |
ALU_DYNAMIC_OP | 21:20 | ALU Dynamic Operation ‘00’: static operation ‘x1’: dynamic control from C operand ‘10’: dynamic control from D operand |
SATURATION_RANK | 19:14 | MSB position for saturation and overflow Signed : “100000” for range -2**31 to (2**31)-1 Unsigned : “100000” for range 0 to (2**32)-1 Max value = “110111” (55) |
ENABLE_SATURATION | 13 | ‘0’: disable, ‘1’: enable |
MUX_Z | 12 | Selection for Z output ‘0’ : ALU PR_Y ‘1’ : PR_YALU |
MUX_CCI | 11 | Carry cascade in MUX ‘0’ : CCYI cascade input ‘1’ : CCYO cascade output |
MUX_CI | 10 | Carry in MUX ‘0’ : CYI input ‘1’ : CCYI cascade input |
MUX_Y | 9 | Y operand MUX ‘0’ : MULT ‘1’ : Concat (B, A) |
MUX_CZ | 8 | Selection for cascaded CZ output ‘0’ : ALU ‘1’ : PR_Y |
MUX_X | 7:5 | X operand MUX “000” : D[7:0] & C[33:0] (sign extended to 56-bit) “001” : C (sign extended to 56-bit) “010” : CZI[39:0] & C[15:0] (concat) “011” : CZI “100” : CZI (6-bit right shifted) “101” : CZI (12-bit right shifted) “110” : CZI (17-bit right shifted) “111” : CZI (18-bit right shifted) |
MUX_P | 4 | Pre-adder/ B MUX (to multiplier) ‘0’ : B (sign extended) ‘1’ : Pre-adder |
MUX_B | 3 | B input MUX ‘0’ : Select B input port ‘1’ : Select CBI input |
MUX_A | 2 | A input MUX. ‘0’ : Select A input port ‘1’ : Select CAI input |
PRE_ADDER_OP | 1 | Pre-adder operation ‘0’ : add (B + D) ‘1’ : subtract (B - D) |
SIGNED_MODE | 0 | ‘0’ : unsigned, ‘1’: signed |
...
DSP modes | Configuration | Equation |
Addition operations | ||
ADD42 | 1 DSP | Z[42:0] = X[41:0] + Y[41:0] |
ADD84 | 2 DSP | Z[84:0] = X[83:0] + Y[83:0] |
ADD84 | 1 DSP 2 cycles | Z[84:0] = X[83:0] + Y[83:0] |
Multiplication operations | ||
UMUL24x18 | 1 DSP | Z[41:0] = X[23:0] * Y[17:0] |
SMUL24x18 | 1 DSP | Z[40:0] = X[23:0] * Y[17:0] |
UMUL24x32 | 2 DSP | Z[55:0] = X[23:0] * Y[31:0] |
UMUL24x32 | 1 DSP 2 cycles | Z[55:0] = X[23:0] * Y[31:0] |
SMUL24x32 | 2 DSP | Z[54:0] = X[23:0] * Y[31:0] |
SMUL24x32 | 1 DSP 2 cycles | Z[54:0] = X[23:0] * Y[31:0] |
UMUL24x36 | 2 DSP | Z[59:0] = X[23:0] * Y[35:0] |
UMUL24x36 | 1 DSP 2 cycles | Z[59:0] = X[23:0] * Y[35:0] |
SMUL24x35 | 2 DSP | Z[57:0] = X[23:0] * Y[34:0] |
SMUL24x35 | 1 DSP 2 cycles | Z[57:0] = X[23:0] * Y[34:0] |
UMUL48x36 | 4 DSP | Z[83:0] = X[47:0] * Y[35:0] |
UMUL48x36 | 1 DSP 4 cycles | Z[83:0] = X[47:0] * Y[35:0] |
SMUL47x35 | 4 DSP | Z[80:0] = X[46:0] * Y[34:0] |
SMUL47x35 | 1 DSP 4 cycles | Z[80:0] = X[46:0] * Y[34:0] |
Multiplication and addition operations | ||
UMADD18 | 1 DSP | Z[42:0] = A[23:0] * B[17:0] + C[41:0] |
SMADD18 | 1 DSP | Z[41:0] = A[23:0] * B[17:0] + C[40:0] |
UMADD24 | 2 DSP | Z[55:0] = A[23:0] * B[31:0] + C[55:0] |
UMADD24 | 1 DSP 2 cycles | Z[55:0] = A[23:0] * B[31:0] + C[55:0] |
SMADD24 | 2 DSP | Z[54:0] = A[23:0] * B[31:0] + C[54:0] |
SMADD24 | 1 DSP 2 cycles | Z[54:0] = A[23:0] * B[31:0] + C[54:0] |
Multiplication and accumulation operations | ||
UMACC18 | 1 DSP | Z[55:0] += X[23:0] * Y[17:0] |
SMACC18 | 1 DSP | Z[55:0] += X[23:0] * Y[17:0] |
Multiplication and addition with pre-adder operations | ||
UAMADD18 | 1 DSP | Z[43:0] = A[23:0] * (B [17:0]+D[17:0]) + C[35:0] |
SAMADD18 | 1 DSP | Z[42:0] = A[23:0] * (B [17:0]+D[17:0]) + C[35:0] |
Anchor | ||||
---|---|---|---|---|
|
Anchor | ||||
---|---|---|---|---|
|
Ports | Direction | Type | Description |
A1 to A24 | input | std_logic | 24-bit A input |
B1 to B18 | input | std_logic | 18-bit B input |
C1 to C36 | input | std_logic | 36-bit C input |
CAI1 to CAI24 | input | std_logic | 24-bit Cascaded A input |
CAO1 to CAO24 | output | std_logic | 24-bit Cascaded A output |
CBI1to CBI18 | input | std_logic | 18-bit Cascaded B input |
CBO1 to CBO18 | output | std_logic | 18-bit Cascaded B output |
CCI | input | std_logic | Cascaded Carry input |
CCO | output | std_logic | Cascaded Carry output |
CI | input | std_logic | Carry input |
CK | input | std_logic | Clock (works on rising edges) |
CO | output | std_logic | Carry output |
CO43 | output | std_logic | Carry output bit 43 |
CO57 | output | std_logic | Carry output bit 57 |
RESERVED | Output | std_logic | |
CZI1 to CZI56 | input | std_logic | 56-bit Cascaded Z input |
CZO1 to CZO56 | output | std_logic | 56-bit Cascaded Z output |
D1 to D18 | input | std_logic | 18-bit D input |
OVF | output | std_logic | Overflow output flag |
R | input | std_logic | Reset for all pipeline registers except cascaded output register PR_CZ (active high) |
RZ | input | std_logic | Reset for cascaded output register PR_CZ only (active high) |
WE | input | std_logic | Write enable for all registers except cascaded output register PR_CZ: ‘0’: all DSP internal registers are frozen, ‘1’: normal operation |
WEZ | input | std_logic | Write enable for cascaded output register PR_CZ: ‘0’: DSP cascaded output register PR_CZ is frozen, ‘1’: normal operation |
Z1 to Z56 | output | std_logic | 56-bit Z output |
Instantiation Example
This documentation only provides the instantiation of the component.
Code Block |
---|
-- MUL(41:0) <= A(23:0) * B(17:0) unsigned signal link : std_logic_vector(35 downto 0) DSP_0 : NX_DSP_U generic map ( std_mode => “UMUL_18” ) port map ( A1 => A(0) , ... , A24 => A(23) , B1 => B(12) , ... , B12 => B(23) , B13 => OPEN , ... , B18 => OPEN , C1 => OPEN , ... , C36 => OPEN , D1 => OPEN , ... , D18 => OPEN , Z1 => OPEN , ... , Z56 => OPEN , CAI1 => OPEN , ... , CAI18 => OPEN , CAO1 => OPEN , ... , CAO18 => OPEN , CBI1 => OPEN , ... , CBI18 => OPEN , CBO1 => OPEN , ... , CBO18 => OPEN , CZI1 => OPEN , ... , CZO56 => OPEN , CZO1 => link(0), ... , CZO36 => link(35) , CZO37 => OPEN , ... , CZO56 => OPEN , CCI => OPEN , CCO => OPEN, CK => OPEN , CI => OPEN , CO => OPEN, CO43 => OPEN, CO57 => OPEN , OVF => OPEN , R => OPEN, RZ => OPEN, WE => OPEN, WEZ => OPEN ); DSP_1 : NX_DSP_U generic map ( std_mode => “UMUL_EXT” ) port map ( A1 => A(0) , ... , A24 => A(23) , B1 => B(0) , ... , B12 => B(11) , B13 => OPEN , ... , B18 => OPEN , C1 => OPEN , ... , C36 => OPEN , D1 => OPEN , ... , D18 => OPEN , Z1 => MUL(0) , ... , Z48 => MUL(47) , Z49 => OPEN , ... , Z56 => OPEN , CAI1 => OPEN , ... , CAI18 => OPEN , CAO1 => OPEN , ... , CAO18 => OPEN , CBI1 => OPEN , ... , CBI18 => OPEN , CBO1 => OPEN , ... , CBO18 => OPEN , CZI1 => link(0), ... , CZO36 => link(35) , CZI36 => OPEN , ... , CZI56 => OPEN , CZO1 => OPEN , ... , CZO56 => OPEN , CCI => OPEN , CCO => OPEN, CK => OPEN , CI => OPEN , CO => OPEN, CO43 => OPEN, CO57 => OPEN , OVF => OPEN , R => OPEN, RZ => OPEN, WE => OPEN, WEZ => OPEN ); |
Simulation
The NX_DSP_U VHDL simulation model is included in the NxLibrary (NxPackage). It allows to simulate any one of the possible NX_DSP_U configurations.
Use Models
DSPs can be chained to create operations with greater operands.
Addition
...
Figure 11: DSP 84 bits addition
Multiplication
...
Figure 12: DSP 24x32 bits unsigned multiplication
...
Figure 15: DSP 47x35 bits signed multiplication
Multiplication and Addition
Figure 16: DSP 24x32 bits multiplication then 56 bits addition
NX_DSP_U_SPLIT
The NX_DSP_U_SPLIT is an alternate primitive for using DSP blocks. It can be instantiated as many times as required in your design.
...
The following is the declaration of the component NX_DSP_U_SPLIT, included in the nxLibrary-Ultra.vhdp package.
component NX_DSP_U_SPLIT
generic (
-------------------------------------------------------------------------
...
-------------------------------------------------------------------------
SIGNED_MODE : bit := '0';
INV_WE : bit := '0';
INV_WEZ : bit := '0';
INV_RST: bit := '0';
INV_RSTZ : bit := '0';
ALU_DYNAMIC_OP : bit_vector(1 downto 0) := B"00"; -- '00' for Static,
-- '-1' for Dynamic control from C
-- '10' for Dynamic control from D
SATURATION_RANK : bit_vector(5 downto 0) := B"000000"; -- Weight of useful MSB on Z and CZO result
-- (to define saturation and overflow)
ENABLE_SATURATION : bit := '0'; -- '0' for Disable, '1' for Enable
MUX_CCO : bit := '0'; -- '0' for CCO = ALU(42), '1' for CCO = ALU(56)
MUX_Z : bit := '0'; -- Select Z output. '0' for Y, '1' Saturation / ALU
MUX_CZ : bit := '0'; -- Select MUX_X input. '0' for CZI, '1' for CZO
MUX_Y : bit := '0'; -- Select ALU's Y input. '0' for MULT output, '1' for (B & A)
MUX_X : bit_vector(2 downto 0) := B"000"; -- Select MUX_X operation
...
-- "110" for MUX_X >> 17
-- "111" for MUX_X >> 18
MUX_CCI : bit := '0'; -- Select '1' input of CI mux. '0' for CCI, '1' for CO_feddback
MUX_CI : bit := '0'; -- Select input carry of ALU. '0' for CI, '1' for CCI/CO_feedback mux
MUX_P : bit := '0'; -- '0' for PRE_ADDER, '0' for B input
MUX_B : bit := '0'; -- '0' = B input, '1' = CBI input
MUX_A : bit := '0'; -- '0' = A input, '1' = CAI input
PRE_ADDER_OP : bit := '0'; -- '0' = Add, '1' = Sub
-------------------------------------------------------------------------
...
-------------------------------------------------------------------------
PR_WE_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_WEZ_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_RST_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_RSTZ_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_OV_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_CO_MUX : bit := '0'; -- Registered carry out (CO42 & CO56)
PR_CCO_MUX : bit := '0'; -- Registered cascade carry out
PR_Z_MUX : bit := '0'; -- Registered output
PR_CZ_MUX : bit := '0'; -- Registered Cascade output
PR_Y_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_X_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_CI_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_MULT_MUX : bit := '0'; -- No pipe reg -- Register inside MULT
PR_P_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg (Pre-adder)
PR_D_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_C_MUX : bit := '0'; -- '0' for No pipe reg, '1' for 1 pipe reg
PR_B_CASCADE_MUX : bit_vector(1 downto 0) := "00"; -- Number of pipe reg levels for CAO output. "-0" for 0 level, "01" for 1 level, "11" for 2 levels
PR_B_MUX : bit_vector(1 downto 0) := "00"; -- Number of pipe reg levels on B input. "-0" for 0 level, "01" for 1 level, "11" for 2 levels
PR_A_CASCADE_MUX : bit_vector(1 downto 0) := "00"; -- Number of pipe reg levels for CAO output. "-0" for 0 level, "01" for 1 level, "11" for 2 levels
PR_A_MUX : bit_vector(1 downto 0) := "00"; -- Number of pipe reg levels on A input. "-0" for 0 level, "01" for 1 level, "11" for 2 levels
...
-------------------------------------------------------------------------
ENABLE_PR_OV_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_CO_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_CCO_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_Z_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_CZ_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_Y_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_X_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_CI_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_MULT_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_P_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_D_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_C_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_B_RST : bit := '1'; -- '0' for Disable, '1' for Enable
ENABLE_PR_A_RST : bit := '1'; -- '0' for Disable, '1' for Enable
-- PR_CZ_INIT : bit_vector(5 downto 0) := B"000000"; -- Value of CZ's pipe register on reset
...
-------------------------------------------------------------------------
ALU_OP : bit_vector(2 downto 0) := B"000"; -- ALU operation
-- x+y+c = "000"
...
-- -x+y-c = "110"
-- -x-y+c-2 = "111"
);
port(
CK : IN std_logic;
R : IN std_logic;
RZ : IN std_logic;
WE : IN std_logic;
WEZ : IN std_logic;
CI : IN std_logic;
A : IN std_logic_vector(23 downto 0);
B : IN std_logic_vector(17 downto 0);
C : IN std_logic_vector(35 downto 0);
D : IN std_logic_vector(17 downto 0);
CAI : IN std_logic_vector(23 downto 0);
CBI : IN std_logic_vector(17 downto 0);
CZI : IN std_logic_vector(55 downto 0);
CCI : IN std_logic;
Z : out std_logic_vector(55 downto 0);
CO42 : OUT std_logic;
CO56 : OUT std_logic;
OVF : OUT std_logic;
CAO : OUT std_logic_vector(23 downto 0);
CBO : OUT std_logic_vector(17 downto 0);
CZO : OUT std_logic_vector(55 downto 0);
CCO : OUT std_logic
);
end component
NX_DSP_U_WRAP
Description
The NX_DSP_U_WRAP component provides a wrapper around NX_DSPU IP for user convenience, concatening bits into vector interfaces. The generics are the same as NX_DSP_U, check the associated section for detail explanations.
Ports
Ports | Direction | Type | Description |
A | input | std_logic_vector (23 downto 0) | 24-bit A input |
B | input | std_logic_vector (17 downto 0) | 18-bit B input |
C | input | std_logic_vector (35 downto 0) | 36-bit C input |
CAI | input | std_logic_vector (23 downto 0) | 24-bit Cascaded A input |
CAO | output | std_logic_vector (23 downto 0) | 24-bit Cascaded A output |
CBI | input | std_logic_vector (17 downto 0) | 18-bit Cascaded B input |
CBO | output | std_logic_vector (17 downto 0) | 18-bit Cascaded B output |
CCI | input | std_logic | Cascaded Carry input |
CCO | output | std_logic | Cascaded Carry output |
CI | input | std_logic | Carry input |
CK | input | std_logic | Clock (works on rising edges) |
CO43 | output | std_logic | Carry output bit 43 |
CO57 | output | std_logic | Carry output bit 57 |
CZI | input | std_logic_vector (55 downto 0) | 56-bit Cascaded Z input |
CZO | output | std_logic_vector (55 downto 0) | 56-bit Cascaded Z output |
D | input | std_logic_vector (17 downto 0) | 18-bit D input |
OVF | output | std_logic | Overflow output flag |
R | input | std_logic | Reset for pipeline registers except Z output register (active high) |
RZ | input | std_logic | Reset for Z output register only(active high) |
WE | input | std_logic | Write enable for internal registers: ‘0’: all DSP internal registers are frozen, ‘1’: normal operation |
WEZ | input | std_logic | Write enable for output registers: ‘0’: all DSP output registers are frozen, ‘1’: normal operation |
Z | output | std_logic_vector (55 downto 0) | 56-bit Z output |
ADD84_2DSP
Description
The ADD84_2DSP component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer an addition between two 84-bit operands using two DSP.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside all DSP.
Ports
Ports | Direction | Type | Description |
X | input | std_logic_vector (83 downto 0) | 84-bit X first operand |
Y | input | std_logic_vector (83 downto 0) | 84-bit Y second operand |
Z | output | std_logic_vector (84 downto 0) | 85-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
SMUL47x35_4DSP
Description
The SMUL47x35_4DSP component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer a signed multiplication between two operands of 47 and 35-bit using four DSP.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside the four DSP.
Ports
Ports | Direction | Type | Description |
A | input | std_logic_vector (46 downto 0) | 47-bit A first operand |
B | input | std_logic_vector (34 downto 0) | 35-bit B second operand |
Z | output | std_logic_vector (80 downto 0) | 81-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
UMADD24_2DSP
Description
The UMADD_2DSP component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer an unsigned multiplication with addition based on a 24-bit operand and using two DSP.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside all DSP.
Anchor | ||||
---|---|---|---|---|
|
Anchor | ||||
---|---|---|---|---|
|
Ports | Direction | Type | Description |
A | input | std_logic_vector (23 downto 0) | 24-bit A first operand |
B | input | std_logic_vector (31 downto 0) | 32-bit B second operand |
C | input | std_logic_vector (55 downto 0) | 56-bit C second operand |
Z | output | std_logic_vector (55 downto 0) | 56-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
UMUL24x32_1DSP_2CYCLES
Description
The UMUL24x32_1DSP_2CYCLES component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer an unsigned 24x32 multiplication using one DSP with cascade interface during 2 cycles.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside all DSP.
Anchor | ||||
---|---|---|---|---|
|
Anchor | ||||
---|---|---|---|---|
|
Ports | Direction | Type | Description |
A | input | std_logic_vector (23 downto 0) | 24-bit A first operand |
B | input | std_logic_vector (15 downto 0) | 16-bit B second operand |
Z | output | std_logic_vector (55 downto 0) | 56-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
UMUL24x32_2DSP
Description
The UMUL24x32_2DSP component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer an unsigned 24x32 multiplication using two DSP.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside all DSP.
Ports
Ports | Direction | Type | Description |
A | input | std_logic_vector (23 downto 0) | 24-bit A first operand |
B | input | std_logic_vector (31 downto 0) | 32-bit B second operand |
Z | output | std_logic_vector (55 downto 0) | 56-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
UMUL24x36_1DSP_2CYCLES
Description
The UMUL24x36_1DSP_2CYCLES component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer an unsigned 24x36 multiplication using one DSP with cascade interface during 2 cycles.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside all DSP.
Ports
Ports | Direction | Type | Description |
A | input | std_logic_vector (23 downto 0) | 24-bit A first operand |
B | input | std_logic_vector (17 downto 0) | 18-bit B second operand |
Z | output | std_logic_vector (59 downto 0) | 60-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
UMUL24x36_2DSP
Description
The UMUL24x36_2DSP component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer an unsigned 24x36 multiplication using two DSP.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside all DSP.
Ports
Ports | Direction | Type | Description |
A | input | std_logic_vector (23 downto 0) | 24-bit A first operand |
B | input | std_logic_vector (35 downto 0) | 36-bit B second operand |
Z | output | std_logic_vector (59 downto 0) | 60-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
UMUL48x36_1DSP_4CYCLES
Description
The UMUL48x36_1DSP_4CYCLES component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer an unsigned 48x36 multiplication using one DSP with cascade interface during 4 cycles.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside all DSP.
Ports
Ports | Direction | Type | Description |
A | input | std_logic_vector (23 downto 0) | 24-bit A first operand |
B | input | std_logic_vector (17 downto 0) | 18-bit B second operand |
Z | output | std_logic_vector (83 downto 0) | 84-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
UMUL48x36_4DSP
Description
The UMUL48x36_2DSP component provides a wrapper around NX_DSP_U_WRAP IP fully configured to offer an unsigned 48x36 multiplication using four DSP.
Generics
piped
type boolean
default value “true”
This generic enables by default the use of pipeline registers inside all DSP.
Ports
Ports | Direction | Type | Description |
A | input | std_logic_vector (47 downto 0) | 48-bit A first operand |
B | input | std_logic_vector (35 downto 0) | 36-bit B second operand |
Z | output | std_logic_vector (83 downto 0) | 84-bit Z result |
clk | input | std_logic | Clock (works on rising edges) |
rst | input | std_logic | Reset for pipeline registers & Z output registers for both DSP (active high) |
NX_RAM
Description
The NX_RAM component describes a synchronous True Dual Port Random Access Memory circuit of 48 Kbits available in NG-MEDIUM. The circuit supports Error Code Correction (ECC, also called EDAC – Error Detection and Correction).
...
However, simultaneous write access on both ports at the same physical address, or write access simultaneous with a read access at the same physical address are not allowed.
Figure 17: RAM diagram
Memory ports configurations
Optional input and output behavior and pipeline registers:
By default, the RAM block do not use pipeline registers. The output delivers a valid data Taccess_time after the clock edge that samples the read address (ACS = ‘1’ and AWE = ‘0’) or BCS = ‘1’ and BWE = ‘0’).
...
In addition, the polarity of the block RAM clock as well as the one of the register clocks can be modified by the user (see NX_RAM raw_config0).
No ECC modes
The NO_ECC configuration mode is set by generics (raw_config1(15:12) = “0000”.
...
In 16K x 3 configuration, the 3-bit data input must be replicated 8 times
In 8K x 6 configuration, the 3-bit data input must be replicated 4 times
ECC modes
When used with ECC, the user array size is restricted to 2K x 18. The 6 remaining bits of each internal address of 24-bit words are used to store the ECC signature of each 18-bit data.
...
Figure 21: Address and data connections (ECC FAST or SLOW)
ECC data correction in FAST mode
If a single bit error is found, it will be automatically detected and corrected at the RAM output port. The flags ACOR or BCOR are set during the read cycle to signal the error detection and correction. However, the internal memory array remains corrupt.
If a double bit error is detected, it can’t be corrected, and the flags AERR or BERR are asserted.
ECC data correction in SLOW mode
This mode is also called Read Repair Mode (RRM).
If a single bit error is found, it will be automatically detected and corrected at the RAM output port, and the memory content is automatically updated with the corrected value. The flags ACOR or BCOR are set during the user’s read cycle to signal the error detection and correction.
If a double bit error is detected, it can’t be corrected, but the flags AERR or BERR are asserted.
In order to correct a possible error during a read access, the read cycle becomes a read modify write, where the write half cycle is transparent to the user. For this, the NG-MEDIUM RAM blocks use a doubled internal frequency. This internal clock is generated by using an exclusive OR, between the main clock (CKA or CKB) and the 90° shifted clock (ACKD or BCKD) required to support the ECC SLOW mode.
Using ACKD and/or BCKD in ECC SLOW mode is mandatory. It must be a 90° phase shifted version of the main clock input (ACK and/or BCK). ACKD and BCKD can each be generated with ACK and BCK by using PLL and WFGs.
In this mode, the internal RAM block works a frequency that is double of the user’s clock. The maximum user’s clock frequency is then reduced by a factor of 2, approximately.
Generics
mcka_edge
type bit
default value ‘0’
...
Extended modes for NG-ULTRA (scrubbing, test, …).
Ports
Ports | Direction | Type | Description |
ACK | input | std_logic | A port memory main clock |
ACKC | input | std_logic | A port memory clock clone. Must be connected to the same clock source as ACK |
ACKD | input | std_logic | A port memory 90° shifted clock. ACKD must be used when Read Repair Mode is selected on this port. It allows to internally generate a double frequency for the memory matrix, to allow read modify write during a single user’s clock cycle. |
ACKR | input | std_logic | A port register clock. ACKR must be fed by a valid clock (typically ACK), if the optional input or output pipeline registers are used. |
BCK | input | std_logic | B port memory main clock. |
BCKC | input | std_logic | B port memory clock clone. Same comments as for ACKC |
BCKD | input | std_logic | B port memory 90° shifted clock. Just as ACKD, BCKD is used when Read Repair Mode is selected on B port. |
BCKR | input | std_logic | B port register clock. BCKR must be fed by a valid clock (typically BCK), if the optional input or output pipeline registers are used. |
AI1 to AI24 | input | std_logic | A port input data. See notes on data input width for proper operation. |
BI1 to BI24 | input | std_logic | B port input data. See notes on data input width for proper operation. |
ACOR | output | std_logic | Goes high for one clock cycle when an error has been detected and corrected on port A |
AERR | output | std_logic | Goes high for one clock cycle when an uncorrectable error has been found on port A |
BCOR | output | std_logic | Goes high for one clock cycle when an error has been detected and corrected on port A |
BERR | output | std_logic | Goes high for one clock cycle when an uncorrectable error has been found on port A |
AO1 to AO24 | output | std_logic | A port output data. See notes on data output width for proper operation |
BO1 to BO24 | output | std_logic | B port output data. See notes on data output width for proper operation |
AA1 to AA16 | input | std_logic | A port address. See notes on physical and logical addresses for proper operation |
ACS | input | std_logic | A port chip select (active high) |
AWE | input | std_logic | A port write enable (active high) |
AR | input | std_logic | A port registers reset (active high) |
BA1 to BA16 | input | std_logic | B port address. See notes on physical and logical addresses for proper operation |
BCS | input | std_logic | B port chip select (active high) |
BWE | input | std_logic | B port write enable (active high) |
BR | input | std_logic | B port registers reset (active high) |
...
The BCKC and BCKD ports must be connected as described for ACKC and ACKD. BR is the synchronous reset of the optional input and output registers on port B.
Instantiation Example
Code Block |
---|
-- RAM with Fast ECC: 1024 words of 18 bits and 1 read/write port RAM_0 : NX_RAM generic map ( std_mode => "FAST_2kx18", mem_context => ( "000000111111111111111111,000000001100110011001100, 000000110011001100110011,000000111111111111111111" & "000000111111111111111111000000001100110011001100, 000000110011001100110011,000000111111111111111111" & “...” "000000111111000000111001,000000001100110011001100, 000000110011001100110011,000000111000111111000110" & "000000111111111111111111,000000001100110011001100, 000000110011001100110011,000000111010110011111001" -- other 2048 words must be also initialized ) port map ( ACK => CLK, ACKC => CLK, ACKD => OPEN, ACKR => OPEN , AI1 => DI(0), ... , AI18 => DI(17) , AI19 => OPEN, ... , AI24 => OPEN , ACOR => COR, AERR => ERR , AO1 => DO(0), ... , AO18 => DO(17) , AO19 => OPEN, ... , AO24 => OPEN , AA1 => AD(0), ... , AA10 => AD(9) , AA11 => OPEN, ... , AA16 => OPEN , ACS => ‘1’, AWE => WE, AR => OPEN , BCK => OPEN, BCKC => OPEN, BCKD => OPEN, BCKR => OPEN , BI1 => OPEN, ... , BI24 => OPEN , BCOR => OPEN, BERR => OPEN , BO1 => OPEN, ... , BO24 => OPEN , BA1 => OPEN, ... , BA16 => OPEN , BCS => OPEN, BWE => OPEN, BR => OPEN ); |
Simulation
The NX_RAM VHDL simulation model is included in the NxLibrary (NxPackage.vhd). It allows to simulate any one of the possible configurations, including with ECC in FAST or SLOW modes.
NX_RAM_WRAP
Description
The NX_RAM_WRAP provides an alternate way to instantiate NX_RAM. It uses the same generics as NX_RAM, and the ports are grouped as busses whenever possible.
Generics
std_mode : string := "";
mcka_edge : bit := '0';
...
Please, refer to the NX_RAM chapter for more detailed information.
Ports
Ports | Direction | Type | Description |
ACK | input | std_logic | A port memory main clock |
ACKD | input | std_logic | A port memory 90° shifted clock. ACKD must be used when Read Repair Mode is selected on this port. It allows to internally generate a double frequency for the memory matrix, to allow read modify write during a single user’s clock cycle. |
ACKR | input | std_logic | A port register clock. ACKR must be fed by a valid clock (typically ACK), if the optional input or output pipeline registers are used. |
BCK | input | std_logic | B port memory main clock. |
BCKD | input | std_logic | B port memory 90° shifted clock. Just as ACKD, BCKD is used when Read Repair Mode is selected on B port. |
BCKR | input | std_logic | B port register clock. BCKR must be fed by a valid clock (typically BCK), if the optional input or output pipeline registers are used. |
AI(23:0) | input | std_logic_vector | A port input data. See notes on data input width for proper operation. |
BI(23:0) | input | std_logic_vector | B port input data. See notes on data input width for proper operation. |
ACOR | output | std_logic | Goes high for one clock cycle when an error has been detected and corrected on port A |
AERR | output | std_logic | Goes high for one clock cycle when an uncorrectable error has been found on port A |
BCOR | output | std_logic | Goes high for one clock cycle when an error has been detected and corrected on port A |
BERR | output | std_logic | Goes high for one clock cycle when an uncorrectable error has been found on port A |
AO(23:0) | output | std_logic_vector | A port output data. See notes on data output width for proper operation |
BO(23:0) | output | std_logic_vector | B port output data. See notes on data output width for proper operation |
AA(15:0) | input | std_logic_vector | A port address. See notes on physical and logical addresses for proper operation |
ACS | input | std_logic | A port chip select (active high) |
AWE | input | std_logic | A port write enable (active high) |
AR | input | std_logic | A port registers reset (active high) |
BA(15:0) | input | std_logic_vector | B port address. See notes on physical and logical addresses for proper operation |
BCS | input | std_logic | B port chip select (active high) |
BWE | input | std_logic | B port write enable (active high) |
BR | input | std_logic | B port registers reset (active high) |
Instantiation Example
Code Block |
---|
-- RAM with Fast ECC: 1024 words of 18 bits and 1 read/write port RAM_0 : NX_RAM generic map ( std_mode => "FAST_2kx18", mem_context => ( "000000111111111111111111,000000001100110011001100, 000000110011001100110011,000000111111111111111111" & "000000111111111111111111000000001100110011001100, 000000110011001100110011,000000111111111111111111" & “...” "000000111111000000111001,000000001100110011001100, 000000110011001100110011,000000111000111111000110" & "000000111111111111111111,000000001100110011001100, 000000110011001100110011,000000111010110011111001" -- other 2048 words must be also initialized ) port map ( ACK => CLK, ACKC => CLK, ACKD => OPEN, ACKR => OPEN , AI1 => DI(0), ... , AI18 => DI(17) , AI19 => OPEN, ... , AI24 => OPEN , ACOR => COR, AERR => ERR , AO1 => DO(0), ... , AO18 => DO(17) , AO19 => OPEN, ... , AO24 => OPEN , AA1 => AD(0), ... , AA10 => AD(9) , AA11 => OPEN, ... , AA16 => OPEN , ACS => ‘1’, AWE => WE, AR => OPEN , BCK => OPEN, BCKC => OPEN, BCKD => OPEN, BCKR => OPEN , BI1 => OPEN, ... , BI24 => OPEN , BCOR => OPEN, BERR => OPEN , BO1 => OPEN, ... , BO24 => OPEN , BA1 => OPEN, ... , BA16 => OPEN , BCS => OPEN, BWE => OPEN, BR => OPEN ); |
Simulation
The NX_RAM VHDL simulation model is included in the NxLibrary (NxPackage.vhd). It allows to simulate any one of the possible configurations, including with ECC in FAST or SLOW modes.
SOC
NX_SOC_INTERFACE_WRAP
Description
The NX_SOC_INTERFACE_WRAP component describes the complete set of signals transiting between the System-On-Chip (SOC) and the fabric of NG-Ultra. Through this hard IP, the fabric is connected to the network interconnect of the SoC and can receive/send data requests from/to various functions of the SoC.
Generics
bsm_config
type bit_vector(31 downto 0)
...
This generic specifies the configuration for the ahb interface.
Ports
Clock, reset and config signals
The following array list the clock, reset and config (interruptions, trigger, hold) signals exchanged between the fabric and the SOC.
...
Ports | Direction | Type | Description |
fabric_lowskew_o | Output | std_logic_vector (1 downto 0) | dahlia_rstn_fpga_out_i / dahlia_clk_fpga_i going to fabric |
fabric_lowskew_i | Input | std_logic_vector (18 downto 2) | 10 FPGA clocks (dahlia_clk_fpga_nic_o) send by fabric 18 => fpga_ddr0 17 => llpp3_s 16 => llpp2_s 15 => llpp1_s 14 => llpp0_s 13 => fpga_apb 12 => axi_s2 11 => axi_s1 10 => axi_m2 9 => axi_m1 8 => dma_hs_5 7 => dma_hs_4 6 => dma_hs_3 5 => dma_hs_2 4 => dma_hs_1 3 => dma_hs_0 2 => qos_pclk |
fabric_enable_TMR_i | Input | std_logic_vector(3 downto 0) | Control bits to enable signals going from SoC to Fabric. Default value set to 1 for each bit |
fabric_fpga_nic_rstn_i | Input | std_logic_vector (9 downto 0) | 10 FPGA resets (dahlia_fpga_pmrstn_o) send by fabric Same mapping than fabric_lowskew_i |
fabric_fpga_pmrstn_i | Input | std_logic | Power monitoring reset. Active low |
fabric_fpga_sysrstn_i | Input | std_logic | System reset. Active low |
fabric_fpga_trigger_in_o | Output | std_logic_vector (7 downto 0) | Trigger in bus |
fabric_fpga_trigger_out_i | Input | std_logic_vector (7 downto 0) | Trigger out bus |
fabric_fpga_interrupt_in_i | Input | std_logic_vector (119 downto 0) | Interrupt bus |
fabric_sysc_hold_on_debug_i | Input | std_logic | Hold |
fabric_fpga_events60_i | Input | std_logic_vector (59 downto 0) | Fpga event bus |
fabric_spw_interrupts_toggle_o | Output | std_logic_vector(2 downto 0) | Spacewire interruption toggle |
fabric_spw_interrupts_o | Output | std_logic_vector(2 downto 0) | Spacewire interruption |
fabric_flash_irq_toggle_o | Output | std_logic | Flash interruption toggle |
fabric_flash_irq_o | Output | std_logic | Flash interruption |
AXI Master requests
The Network interconnect of the SoC (NIC) handles different protocols for different interfaces, including two set of AXI master interfaces connected to the fabric.
...
* : valid for M1 and M2 AXI Master requests
AXI Slave requests
The Network interconnect of the SoC (NIC) handles different protocols for different interfaces, including two set of AXI slave interfaces connected to the fabric.
...
* : valid for S1 and S2 slave requests
DDR request
The Network interconnect of the SoC (NIC) handles different protocols for different interfaces, including a FPGA DDR interface through which the fabric can send requests to the DDR controller in the SoC.
...
Ports | Direction | Type |
fabric_fpga_ddr0_arready_o | Output | std_logic |
fabric_fpga_ddr0_awready_o | Output | std_logic |
fabric_fpga_ddr0_bid_o | Output | std_logic_vector (4 downto 0) |
fabric_fpga_ddr0_bresp_o | Output | std_logic_vector (1 downto 0) |
fabric_fpga_ddr0_bvalid_o | Output | std_logic |
fabric_fpga_ddr0_rdata_o | Output | out std_logic_vector (127 downto 0) |
fabric_fpga_ddr0_rid_o | Output | out std_logic_vector (4 downto 0) |
fabric_fpga_ddr0_rlast_o | Output | std_logic |
fabric_fpga_ddr0_rresp_o | Output | std_logic_vector (1 downto 0) |
fabric_fpga_ddr0_rvalid_o | Output | std_logic |
fabric_fpga_ddr0_wready_o | Output | std_logic |
fabric_fpga_ddr0_araddr_i | Input | std_logic_vector (39 downto 0) |
fabric_fpga_ddr0_arburst_i | Input | std_logic_vector (1 downto 0) |
fabric_fpga_ddr0_arcache_i | Input | std_logic_vector (3 downto 0) |
fabric_fpga_ddr0_arid_i | Input | std_logic_vector (4 downto 0) |
fabric_fpga_ddr0_arlen_i | Input | std_logic_vector (7 downto 0) |
fabric_fpga_ddr0_arlock_i | Input | std_logic |
fabric_fpga_ddr0_arprot_i | Input | std_logic_vector (2 downto 0) |
fabric_fpga_ddr0_arqos_i | Input | std_logic_vector (3 downto 0) |
fabric_fpga_ddr0_arsize_i | Input | std_logic_vector (2 downto 0) |
fabric_fpga_ddr0_arvalid_i | Input | std_logic |
fabric_fpga_ddr0_awaddr_i | Input | std_logic_vector (39 downto 0) |
fabric_fpga_ddr0_awburst_i | Input | std_logic_vector (1 downto 0) |
fabric_fpga_ddr0_awcache_i | Input | std_logic_vector (3 downto 0) |
fabric_fpga_ddr0_awid_i | Input | std_logic_vector (4 downto 0) |
fabric_fpga_ddr0_awlen_i | Input | std_logic_vector (7 downto 0) |
fabric_fpga_ddr0_awlock_i | Input | std_logic |
fabric_fpga_ddr0_awprot_i | Input | std_logic_vector (2 downto 0) |
fabric_fpga_ddr0_awqos_i | Input | std_logic_vector (3 downto 0) |
fabric_fpga_ddr0_awsize_i | Input | std_logic_vector (2 downto 0) |
fabric_fpga_ddr0_awvalid_i | Input | std_logic |
fabric_fpga_ddr0_bready_i | Input | std_logic |
fabric_fpga_ddr0_rready_i | Input | std_logic |
fabric_fpga_ddr0_wdata_i | Input | std_logic_vector (127 downto 0) |
fabric_fpga_ddr0_wlast_i | Input | std_logic |
fabric_fpga_ddr0_wstrb_i | Input | std_logic_vector (15 downto 0) |
fabric_fpga_ddr0_wvalid_i | Input | std_logic |
LLPP requests
The Network interconnect of the SoC (NIC) handles different protocols for different interfaces, including four Low Latency Parallel Port (LLPP) interfaces through which R52 cores of the SoC can send requests directly to the fabric.
...
* : valid for llpp0, llpp1, llpp2 and llpp3 requests
Debug and quality of service
The SoC provides several services and error management & monitoring functionalities which are connected to the NIC and can be available through the fabric with the following interface.
...
Ports | Direction | Type |
fabric_qos_pprdata_o | Output | std_logic_vector (31 downto 0) |
fabric_qos_ppready_o | Output | std_logic |
fabric_qos_ppslverr_o | Output | std_logic |
fabric_qos_ppaddr_i | Input | std_logic_vector (31 downto 0) |
fabric_qos_ppenable_i | Input | std_logic |
fabric_qos_ppwdata_i | Input | std_logic_vector (31 downto 0) |
fabric_qos_ppwrite_i | Input | std_logic |
fabric_qos_presetn_i | Input | std_logic |
fabric_qos_psel_i | Input | std_logic |
fabric_tnd_hssl_flushin_o | Output | std_logic |
fabric_tnd_hssl_trigin_o | Output | std_logic |
fabric_tnd_fpga_apb_master_paddr_o | Output | std_logic_vector (31 downto 0) |
fabric_tnd_fpga_apb_master_penable_o | Output | std_logic |
fabric_tnd_fpga_apb_master_psel_o | Output | std_logic |
fabric_tnd_fpga_apb_master_pwdata_o | Output | std_logic_vector (31 downto 0) |
fabric_tnd_fpga_apb_master_pwrite_o | Output | std_logic |
fabric_tnd_fpga_atb_master_afvalid_o | Output | std_logic |
fabric_tnd_fpga_atb_master_atready_o | Output | std_logic |
fabric_tnd_fpga_atb_master_syncreq_o | Output | std_logic |
fabric_tnd_hssl_apb_master_paddr_o | Output | std_logic_vector (31 downto 0) |
fabric_tnd_hssl_apb_master_penable_o | Output | std_logic |
fabric_tnd_hssl_apb_master_psel_o | Output | std_logic |
fabric_tnd_hssl_apb_master_pwdata_o | Output | std_logic_vector (31 downto 0) |
fabric_tnd_hssl_apb_master_pwrite_o | Output | std_logic |
fabric_tnd_hssl_atb_master_afready_o | Output | std_logic |
fabric_tnd_hssl_atb_master_atbytes_o | Output | std_logic_vector (3 downto 0) |
fabric_tnd_hssl_atb_master_atdata_o | Output | std_logic_vector (127 downto 0) |
fabric_tnd_hssl_atb_master_atid_o | Output | std_logic_vector (6 downto 0) |
fabric_tnd_hssl_atb_master_atvalid_o | Output | std_logic |
fabric_tnd_trace_clk_traceoutportintf_o | Output | std_logic |
fabric_tnd_trace_ctl_traceoutportintf_o | Output | std_logic |
fabric_tnd_trace_data_traceoutportintf_o | Output | std_logic_vector (31 downto 0) |
fabric_tsvalue_tsgen_fpga_o | Output | std_logic_vector (63 downto 0) |
fabric_tnd_fpga_apb_master_prdata_i | Input | std_logic_vector (31 downto 0) |
fabric_tnd_fpga_apb_master_pready_i | Input | std_logic |
fabric_tnd_fpga_apb_master_pslverr_i | Input | std_logic |
fabric_tnd_fpga_atb_master_afready_i | Input | std_logic |
fabric_tnd_fpga_atb_master_atbytes_i | Input | std_logic_vector (3 downto 0) |
fabric_tnd_fpga_atb_master_atdata_i | Input | std_logic_vector (127 downto 0) |
fabric_tnd_fpga_atb_master_atid_i | Input | std_logic_vector (6 downto 0) |
fabric_tnd_fpga_atb_master_atvalid_i | Input | std_logic |
fabric_tnd_hssl_apb_master_prdata_i | Input | std_logic_vector (31 downto 0) |
fabric_tnd_hssl_apb_master_pready_i | Input | std_logic |
fabric_tnd_hssl_apb_master_pslverr_i | Input | std_logic |
fabric_tnd_hssl_atb_master_afvalid_i | Input | std_logic |
fabric_tnd_hssl_atb_master_atready_i | Input | std_logic |
fabric_tnd_hssl_atb_master_syncreq_i | Input | std_logic |
fabric_watchdog0_signal_0_o | Output | std_logic |
fabric_watchdog0_signal_1_o | Output | std_logic |
fabric_watchdog1_signal_0_o | Output | std_logic |
fabric_watchdog1_signal_1_o | Output | std_logic |
fabric_watchdog2_signal_0_o | Output | std_logic |
fabric_watchdog2_signal_1_o | Output | std_logic |
fabric_watchdog3_signal_0_o | Output | std_logic |
fabric_watchdog3_signal_1_o | Output | std_logic |
fabric_tst_pll_lock_o | Output | std_logic_vector (6 downto 0) |
fabric_soc_mon_sensor_alarm_o | Output | std_logic |
fabric_erom_fpga_cpu0_dbgen_i | Input | std_logic |
fabric_erom_fpga_cpu0_hiden_i | Input | std_logic |
fabric_erom_fpga_cpu0_hniden_i | Input | std_logic |
fabric_erom_fpga_cpu0_niden_i | Input | std_logic |
fabric_erom_fpga_cpu1_dbgen_i | Input | std_logic |
fabric_erom_fpga_cpu1_hiden_i | Input | std_logic |
fabric_erom_fpga_cpu1_hniden_i | Input | std_logic |
fabric_erom_fpga_cpu1_niden_i | Input | std_logic |
fabric_erom_fpga_cpu2_dbgen_i | Input | std_logic |
fabric_erom_fpga_cpu2_hiden_i | Input | std_logic |
fabric_erom_fpga_cpu2_hniden_i | Input | std_logic |
fabric_erom_fpga_cpu2_niden_i | Input | std_logic |
fabric_erom_fpga_cpu3_dbgen_i | Input | std_logic |
fabric_erom_fpga_cpu3_hiden_i | Input | std_logic |
fabric_erom_fpga_cpu3_hniden_i | Input | std_logic |
fabric_erom_fpga_cpu3_niden_i | Input | std_logic |
fabric_erom_fpga_cs_dbgen_i | Input | std_logic |
fabric_erom_fpga_cs_niden_i | Input | std_logic |
fabric_erom_fpga_cs_deviceen_i | Input | std_logic |
fabric_erom_fpga_cs_rst_n_i | Input | std_logic |
fabric_erom_fpga_debug_en_i | Input | std_logic |
SERVICE
NX_SERVICE_U_WRAP
Description
The NX_SERVICE_U_WRAP component describes the complete set of signals transiting between the Service bank) and the fabric of NG-Ultra.
Generics
bsm_config
type bit_vector(31 downto 0)
...
This generic specifies the configuration for the ahb interface.
Ports
Lowskew
Ports | Direction | Type | Description |
fabric_lowskew_o3 | Output | std_logic | clk_bsm |
fabric_lowskew_o4 | Output | std_logic | tck |
fabric_lowskew_o5 | Output | std_logic | clk_otp_out |
fabric_lowskew_o6 | Output | std_logic | user_0 |
fabric_lowskew_i20 | Input | std_logic | otp_clk |
fabric_lowskew_i21 | Input | std_logic | user_clk |
fabric_lowskew_i22 | Input | std_logic | otp_user_clk |
fabric_lowskew_i23 | Input | std_logic | clk_mrepair |
BSM
Ports | Direction | Type |
fabric_ahb_direct_data_o | Output | std_logic_vector(31 downto 0) |
fabric_io_out_o | Output | std_logic_vector(24 downto 0) |
fabric_user_data_o | Output | std_logic_vector(31 downto 0) |
fabric_user_write_cycle_o | Output | std_logic |
fabric_user_read_cycle_o | Output | std_logic |
fabric_cfg_fabric_user_flag_o | Output | std_logic |
fabric_cfg_fabric_user_unmask_o | Output | std_logic |
fabric_parusr_data_o | Output | std_logic_vector(15 downto 0) |
fabric_parusr_data_val_o | Output | std_logic |
fabric_jtag_trst_n_o | Output | std_logic |
fabric_jtag_tms_o | Output | std_logic |
fabric_jtag_tdi_o | Output | std_logic |
fabric_jtag_usr1_o | Output | std_logic |
fabric_jtag_usr2_o | Output | std_logic |
fabric_direct_data_o | Output | std_logic |
fabric_status_cold_start_o | Output | std_logic |
fabric_flag_trigger_o | Output | std_logic |
fabric_flag_error_o | Output | std_logic |
fabric_flag_ready_o | Output | std_logic |
fabric_ahb_direct_data_i | Input | std_logic_vector(31 downto 0) |
fabric_io_in_i | Input | std_logic |
fabric_io_oe_i | Input | std_logic |
fabric_user_data_i | Input | std_logic_vector(31 downto 0) |
fabric_parusr_cs_i | Input | std_logic |
fabric_parusr_type_i | Input | std_logic_vector(1 downto 0) |
fabric_parusr_data_i | Input | std_logic_vector(15 downto 0) |
fabric_jtag_tdo_usr1_i | Input | std_logic |
fabric_jtag_tdo_usr2_i | Input | std_logic |
fabric_direct_data_i | Input | std_logic_vector(31 downto 0) |
Debug
Ports | Direction | Type |
fabric_otp_apb_ready_o | Output | std_logic |
fabric_otp_apb_rdata_o | Output | std_logic_vector(31 downto 0) |
fabric_otp_security_ack_o | Output | std_logic |
fabric_otp_security_bist_end1_o | Output | std_logic |
fabric_otp_security_bist_end2_o | Output | std_logic |
fabric_otp_security_bist_bad_o | Output | std_logic |
fabric_otp_security_bist_fail1_o | Output | std_logic_vector(7 downto 0) |
fabric_otp_security_bist_fail2_o | Output | std_logic_vector(6 downto 0) |
fabric_otp_security_scanout_o | Output | std_logic_vector(3 downto 0) |
fabric_debug_lifecycle_o | Output | std_logic_vector(3 downto 0) |
fabric_debug_fsm_state_o | Output | std_logic_vector(2 downto 0) |
fabric_debug_rst_soft_o | Output | std_logic |
fabric_debug_error_o | Output | std_logic |
fabric_debug_otp_manager_read_otp_o | Output | std_logic |
fabric_debug_otp_manager_read_done_o | Output | std_logic |
fabric_debug_direct_permission_write_o | Output | std_logic_vector(3 downto 0) |
fabric_debug_direct_permission_read_o | Output | std_logic_vector(3 downto 0) |
fabric_debug_frame_use_encryption_o | Output | std_logic |
fabric_debug_frame_permission_frame_o | Output | std_logic_vector(3 downto 0) |
fabric_debug_key_correct_o | Output | std_logic |
fabric_debug_otpmgmt_state_o | Output | std_logic_vector(2 downto 0) |
fabric_debug_otpapb_state_o | Output | std_logic_vector(2 downto 0) |
fabric_debug_otpboot_state_o | Output | std_logic_vector(2 downto 0) |
fabric_debug_otp_reload_err_o | Output | std_logic |
fabric_debug_cpt_retry_o | Output | std_logic |
fabric_debug_bsec_core_status_o | Output | std_logic_vector(31 downto 0) |
fabric_debug_otpboot_curr_addr_o | Output | std_logic |
fabric_debug_access_reg_data_ready_o | Output | std_logic |
fabric_debug_security_error_read_o | Output | std_logic |
fabric_debug_security_boot_done_o | Output | std_logic |
fabric_debug_lock_reg_o | Output | std_logic |
fabric_otp_rstn_i | Input | std_logic |
fabric_otp_apb_addr_i | Input | std_logic_vector(31 downto 0) |
fabric_otp_apb_write_i | Input | std_logic |
fabric_otp_apb_sel_i | Input | std_logic |
fabric_otp_apb_enable_i | Input | std_logic |
fabric_otp_apb_wdata_i | Input | std_logic_vector(31 downto 0) |
fabric_otp_cfg_fabric_apb_en_i | Input | std_logic |
fabric_otp_cfg_loader_read_en_i | Input | std_logic |
fabric_otp_cfg_loader_write_en_i | Input | std_logic |
fabric_otp_cfg_clk_otpm_disable_i | Input | std_logic |
fabric_otp_cfg_clk_fab_en_i | Input | std_logic |
fabric_otp_security_rbact1_i | Input | std_logic |
fabric_otp_security_rbact2_i | Input | std_logic |
fabric_otp_security_bistmode_i | Input | std_logic |
fabric_otp_security_force_pdn1_i | Input | std_logic |
fabric_otp_security_scanin_i | Input | std_logic_vector(4 downto 0) |
fabric_otp_security_testmode_i | Input | std_logic |
fabric_otp_security_scanenable_i | Input | std_logic |
OTP User
Ports | Direction | Type |
fabric_otp_user_bistmode_i | Input | std_logic |
fabric_otp_user_disturbcheck_i | Input | std_logic |
fabric_otp_user_eccbypass_i | Input | std_logic |
fabric_otp_user_pdn_i | Input | std_logic |
fabric_otp_user_prog_i | Input | std_logic |
fabric_otp_user_rbact1_i | Input | std_logic |
fabric_otp_user_rbact2_i | Input | std_logic |
fabric_otp_user_read_i | Input | std_logic |
fabric_otp_user_redbypass_i | Input | std_logic |
fabric_otp_user_suppadd_i | Input | std_logic |
fabric_otp_user_tm_i | Input | std_logic |
fabric_otp_user_tst_scanenable_i | Input | std_logic |
fabric_otp_user_wordlock_i | Input | std_logic |
fabric_otp_user_add_i | Input | std_logic_vector(6 downto 0) |
fabric_otp_user_configreg_i | Input | std_logic_vector(31 downto 0) |
fabric_otp_user_din_i | Input | std_logic_vector(38 downto 0) |
fabric_otp_user_prgwidth_i | Input | std_logic_vector(2 downto 0) |
fabric_otp_user_tst_scanin_i | Input | std_logic_vector(4 downto 0) |
fabric_otp_user_ack_o | Output | std_logic |
fabric_otp_user_bbad_o | Output | std_logic |
fabric_otp_user_bend1_o | Output | std_logic |
fabric_otp_user_bend2_o | Output | std_logic |
fabric_otp_user_calibrated_o | Output | std_logic |
fabric_otp_user_ded_o | Output | std_logic |
fabric_otp_user_disturbed_o | Output | std_logic |
fabric_otp_user_locked_o | Output | std_logic |
fabric_otp_user_progfail_o | Output | std_logic |
fabric_otp_user_pwok_o | Output | std_logic |
fabric_otp_user_sec_o | Output | std_logic |
fabric_otp_user_bist1fail_o | Output | std_logic_vector(7 downto 0) |
fabric_otp_user_bist2fail_o | Output | std_logic_vector(6 downto 0) |
fabric_otp_user_dout_o | Output | std_logic_vector(40 downto 0) |
fabric_otp_user_flagstate_o | Output | std_logic_vector(3 downto 0) |
fabric_otp_user_startword_o | Output | std_logic_vector(15 downto 0) |
fabric_otp_user_tst_scanout_o | Output | std_logic_vector(4 downto 0) |
fabric_otp_user_wlromout_o | Output | std_logic_vector(9 downto 0) |
Mrepair OTP
Ports | Direction | Type |
fabric_mrepair_fuse_pdn_i | Input | std_logic |
fabric_mrepair_fuse_bistmode_i | Input | std_logic |
fabric_mrepair_fuse_tm_i | Input | std_logic |
fabric_mrepair_fuse_add_i | Input | std_logic_vector(6 downto 0) |
fabric_mrepair_fuse_din_i | Input | std_logic_vector(38 downto 0) |
fabric_mrepair_fuse_read_i | Input | std_logic |
fabric_mrepair_fuse_prog_i | Input | std_logic |
fabric_mrepair_fuse_rbact1_i | Input | std_logic |
fabric_mrepair_fuse_rbact2_i | Input | std_logic |
fabric_mrepair_fuse_tstscanenable_i | Input | std_logic |
fabric_mrepair_fuse_tst_scanin_i | Input | std_logic_vector(4 downto 0) |
fabric_mrepair_fuse_eccbypass_i | Input | std_logic |
fabric_mrepair_fuse_wordlock_i | Input | std_logic |
fabric_mrepair_fuse_suppadd_i | Input | std_logic |
fabric_mrepair_fuse_redbypass_i | Input | std_logic |
fabric_mrepair_fuse_prgwidth_i | Input | std_logic_vector(2 downto 0) |
fabric_mrepair_fuse_configreg_i | Input | std_logic_vector(31 downto 0) |
fabric_mrepair_fuse_disturbchecked_i | Input | std_logic |
fabric_data_shift_en_i | Input | std_logic |
fabric_mrepair_fuse_disturbed_o | Output | std_logic |
fabric_mrepair_fuse_wlromout_o | Output | std_logic_vector(9 downto 0) |
fabric_mrepair_fuse_pwok_o | Output | std_logic |
fabric_mrepair_fuse_dout_o | Output | std_logic_vector(40 downto 0) |
fabric_mrepair_fuse_startword_o | Output | std_logic_vector(15 downto 0) |
fabric_mrepair_fuse_ack_o | Output | std_logic |
fabric_mrepair_fuse_sec_o | Output | std_logic |
fabric_mrepair_fuse_ded_o | Output | std_logic |
fabric_mrepair_fuse_progfail_o | Output | std_logic |
fabric_mrepair_fuse_locked_o | Output | std_logic |
fabric_mrepair_fuse_bist1fail_o | Output | std_logic_vector(7 downto 0) |
fabric_mrepair_fuse_bist2fail_o | Output | std_logic_vector(6 downto 0) |
fabric_mrepair_fuse_bend1_o | Output | std_logic |
fabric_mrepair_fuse_bend2_o | Output | std_logic |
fabric_mrepair_fuse_bbad_o | Output | std_logic |
fabric_mrepair_fuse_tstscanout_o | Output | std_logic_vector(4 downto 0) |
fabric_mrepair_fuse_flagstate_o | Output | std_logic_vector(3 downto 0) |
fabric_mrepair_fuse_calibrated_o | Output | std_logic |
fabric_fuse_status_o | Output | std_logic_vector(2 downto 0) |
fabric_mrepair_fuse_prg_block_space_read_error_flag_q_o | Output | std_logic |
fabric_mrepair_fuse_ready_o | Output | std_logic |
Mrepair
Ports | Direction | Type |
fabric_data_to_bist_o | Output | std_logic_vector(23 downto 0) |
fabric_shift_en_to_bist_o | Output | std_logic_vector(23 downto 0) |
fabric_sif_load_en_to_bist_o | Output | std_logic_vector(23 downto 0) |
fabric_sif_update_en_to_bist_o | Output | std_logic_vector(23 downto 0) |
fabric_sif_reg_en_to_bist_o | Output | std_logic_vector(119 downto 0) |
fabric_system_data_from_mem_bist_o | Output | std_logic_vector(23 downto 0) |
fabric_data_to_system_o | Output | std_logic |
fabric_chip_status_o | Output | std_logic_vector(71 downto 0) |
fabric_global_chip_status_o | Output | std_logic_vector(2 downto 0) |
fabric_pd_ready_o | Output | std_logic_vector(23 downto 0) |
fabric_system_dataready_o | Output | std_logic |
fabric_decoder_init_ready_o | Output | std_logic |
fabric_data_from_bist_i | Input | std_logic_vector(23 downto 0) |
fabric_system_data_to_mem_bist_i | Input | std_logic_vector(23 downto 0) |
fabric_shift_en_i | Input | std_logic_vector(23 downto 0) |
fabric_sif_load_en_i | Input | std_logic_vector(23 downto 0) |
fabric_sif_update_en_i | Input | std_logic_vector(23 downto 0) |
fabric_sif_reg_en_i | Input | std_logic_vector(119 downto 0) |
fabric_tst_atpg_mrepair_i | Input | std_logic |
fabric_data_from_system_i | Input | std_logic |
fabric_end_encoding_i | Input | std_logic |
fabric_pd_active_i | Input | std_logic_vector(23 downto 0) |
fabric_mrepair_mode_i | Input | std_logic_vector(3 downto 0) |
I/O elements
NX_IOB
Description
The NX_IOB component describes a bidirectional port of the design. The behavior is:
...
The NX_IOB can be instantiated anywhere in the design hierarchy. It allows to define buried ports (no signal appears in the ports list).
Figure 22: IOB diagram
Generics
Note that the generic assigned to this primitive can be overridden by the addPad or addPads methods in the script file.
...
location => ”IO_B2_D01_P_SWDO”,
locked => ‘1’
Ports
Ports | Direction | Type | Description |
I | Input | std_logic | From FPGA fabric |
C | Input | std_logic | Tristate control ‘0’: High impedance ‘1’: Enable output |
T | Input | std_logic | Termination control ‘0’: No calibration ‘1’: calibration activated |
O | output | std_logic | To FPGA fabric |
IO | inout | std_logic | External pad |
Example
This documentation only provides the instantiation of the component.
...
-- The pad will take the name of the instance
);
NX_IOB_I
Description
The NX_IOB_I component describes an input port of the design. The behavior is:
...
Anchor | ||||
---|---|---|---|---|
|
...
Figure 23: IOB_I diagram
Generics
Note that the generic assigned to this primitive can be overridden by the addPad or addPads methods used in nxpython script file.
...
location => ”IO_B2_D01_P_SWDO”,
locked => ‘1’
Ports
Ports | Direction | Type | Description |
C | Input | Std_logic | Not used. Must be left “open” or unconnected |
T | Input | std_logic | Termination control ‘0’ : No termination ‘1’ : Input termination activated |
O | output | std_logic | From FPGA fabric |
IO | Input | std_logic | External pad |
Example
This documentation only provides the instantiation of the component.
Code Block |
---|
IOB_0 : NX_IOB_I generic map( location => “IO_B12_D10_N”, standard => “LVCMOS“, drive => “4mA“, turbo => “True”, inputDelayOn => ‘1’, inputDelayLine => “13”, inputSignalSlope => “8”, locked => ‘1’ ) port map ( O => toFPGAcore , T => ’1’ , IO => open -- A signal name is not required on the external -- signal -- The pad will take the name of the instance ); |
NX_IOB_O
Description
The NX_IOB_O component describes an output port of the design. The behavior is:
...
The NX_IOB can be instantiated anywhere in the design hierarchy. It allows to define buried ports (no signal appears in the ports list).
...
Figure 24: IOB_O diagram
Generics
Note that the generic assigned to this primitive can be overridden by the addPad or addPads methods in the script file.
...
location => ”IO_B2_D01_P_SWDO”,
locked => ‘1’
Anchor | ||||
---|---|---|---|---|
|
Anchor | ||||
---|---|---|---|---|
|
Ports | Direction | Type | Description |
I | input | std_logic | From FPGA fabric |
C | input | std_logic | Tristate control (‘0’ for High Z) |
T | input | std_logic | Not used. . Must be left “open” or unconnected |
IO | output | std_logic | External pad |
Example
This documentation only provides the instantiation of the component.
...
-- The pad will take the name of the instance
);
SERializers and DESerializers
Introduction
The NG-ULTRA complex I/O banks provide serializers and deserializer features.
...
All I/O related delay lines have 0 to 63 x 100 ps steps delays.
SERDES architecture overview
The serializers/deserializers architecture contains two main blocks :
...
Figure 26: SERDES delay lines control block simplified diagram
DPA : Dynamic Phase Adjustment
NG-ULTRA architecture provides hardware support for Dynamic Phase Adjustment on NX_DES. The following describes how to implement the adjustment procedure.
...
Figure 30: SER_DES IP Core simplified diagram
NX_DES
Description
The NX_DES is a high performance DESerializer. The complex banks allows to configure the I/Os as DESerializers with deserialization factor from 2 to 5. Higher deserialization factors (6, 7, 8, 9 and 10) can be achieved by combining the two deserializers of a differential IO pair.
...
Figure 31 NX_DES primitive
Generics
data_size
type integer (range 2 to 10)
...
Example :
dpath_dynamic => ‘1’
Ports
Ports | Direction | Type | Description |
FCK | In | Std_logic | Fast clock (bit clock) |
SCK | In | Std_logic | Slow clock (word clock) |
R | In | Std_logic | Active high Reset |
IO | In | Std_logic | Input pad |
O | Out | Std_logic_vector (data_size-1 downto 0) | Sampled word to FPGA fabric |
DCK | In | Std_logic | Delay lines management registers clock |
DRL | In | Std_logic | Delay Registers Load |
DIG | In | Std_logic | ‘0’ for Multicast write (*) ‘1’ for normal operation |
DS | In | Std_logic_vector (1 downto 0) | Delay Select : 00 => out & tri-state regs 01 => input delay register 10 => DPA delay register 11 => RESERVED |
DRA | In | Std_logic_vector (5 downto 0) | Delay address (0 to 33) |
DRI | In | Std_logic_vector (5 downto 0) | Data input to delay registers |
DRO | Out (with tri-state) | Std_logic_vector (5 downto 0) | Delay value being read Active when DRA = DID else high impedance |
DID | Out | Std_logic_vector (5 downto 0) | Pad address identification |
FZ | In | Std_logic | Active low Flags Reset |
FLD | Out (with tri-state) | Std_logic | Early capture flag Active when DRA = DID else high impedance |
FLG | Out (with tri-state) | Std_logic | Late capture flag Active when DRA = DID else high impedance |
...
DIG must be high for normal operation, particularly for delay calibration.
NX _SER
Description
The NX_SER is a high performance SERializer. The complex banks allows to configure the I/Os as SERializers with serialization factor from 2 to 5. Higher serialization factors (6, 7, 8, 9 and 10) can be achieved by combining the two serializers of a differential IO pair.
...
Figure 32: NX_SER primitive
Generics
data_size
type integer
default value Undefined (no default value)
...
Example :
dpath_dynamic => ‘1’
Ports
Ports | Direction | Type | Description |
FCK | In | Std_logic | Fast clock (bit clock) |
SCK | In | Std_logic | Slow clock (word clock) |
R | In | Std_logic | Active high Reset |
IO | Out | Std_logic | Input pad |
I | In | Std_logic_vector (data_size-1 downto 0) | Data to be serialized from fabric |
DCK | In | Std_logic | Delay lines management registers clock |
DRL | In | Std_logic | Delay Registers Load |
DS | In | Std_logic_vector (1 downto 0) | Delay Select : 00 => out & tri-state regs 01 => input delay register 10 => DPA delay register 11 => RESERVED |
DRA | In | Std_logic_vector (5 downto 0) | Delay address (0 to 33) |
DRI | In | Std_logic_vector (5 downto 0) | Data input to delay registers |
DRO | Out (with tri-state) | Std_logic_vector (5 downto 0) | Delay value being read Active when DRA = DID, else high-impedance) |
DID | Out | Std_logic_vector (5 downto 0) | Pad address identifier (0 to 33) |
NX _SERDES
Description
The NX_SERDES combines functionalities of NX_SER and NX_DES to perform a high performance SERializer/DESerializer component.
Generics
data_size
type integer (range 2 to 10)
...
Example :
dpath_dynamic => ‘1’
Ports
Ports | Direction | Type | Description |
FCK | In | Std_logic | Fast clock (bit clock) |
SCK | In | Std_logic | Slow clock (word clock) |
RTX | In | Std_logic | Active high Reset on TX path |
RRX | In | Std_logic | Active high Reset on RX path |
CI | In | Std_logic | Configure pad in input mode when set to 1 else pad in output mode |
CCK | In | Std_logic | Control clock for the register on the enable path |
CL | In | Std_logic | Control load to force use of register on enable path |
CR | In | Std_logic | Control Reset used to reset the register on enable path |
IO | inout | Std_logic | Inout data pad. Configured as input when CI=1 and output when CI=0 |
I | In | Std_logic_vector (data_size-1 downto 0) | Data to be serialized from the fabric |
O | Out | Std_logic_vector (data_size-1 downto 0) | Data to be deserialized and sent to the fabric |
DELAY CONTROL | |||
DCK | In | Std_logic | Delay lines management registers clock |
DRL | In | Std_logic | Delay Registers Load |
DIG | In | Std_logic | ‘0’ for Multicast write (*) ‘1’ for normal operation |
DS | In | Std_logic_vector (1 downto 0) | Delay Select : 00 => out & tri-state regs 01 => input delay register 10 => DPA delay register 11 => RESERVED |
DRA | In | Std_logic_vector (5 downto 0) | Delay Register address (0 to 33) |
DRI | In | Std_logic_vector (5 downto 0) | Data input to delay registers |
FZ | In | Std_logic | Active low Flags Reset |
DRO | Out (with tri-state) | Std_logic_vector (5 downto 0) | Delay value being read Active when DRA = DID, else high-impedance) |
DID | Out | Std_logic_vector (5 downto 0) | Pad address identification (0 to 33) |
FLD | Out (with tri-state) | Std_logic | Early capture flag Active when DRA = DID else high impedance |
FLG | Out (with tri-state) | Std_logic | Late capture flag Active when DRA = DID else high impedance |
...
DIG must be high for normal operation, particularly for delay calibration.
Reserved
There are some other components defined in NX library that are reserved for post synthesis and post place & route simulation. These components cannot be instantiated in pre synthesis VHDL.
...