Upon reset, NSF3V module is idle. When idle, NSF3V ignores VPin, and does not send anything on VPout (VS/HS/VE/HE/EN/DATA = 0).
For single-frame mode of operation, software initializes or changes various parameters, with NSF3V_CFG[7] ONESHOT = 1, then writes 1 to the NSF3V_CTRL[0] EN bit to enable processing of one frame. After NSF3V_CTRL[0] EN is written 1, the module is ready to accept a new frame from the input video port.
For video mode of operation, software initializes or changes various parameters, with NSF3V_CFG[7] ONESHOT = 0, then writes 1 to the NSF3V_CTRL[0] EN bit to enable processing of image frames
To exit video mode, software writes 0 to NSF3V_CTRL[0] EN, and after the current frame processing is completed, NSF3V become idle again.
To program NSF3V to process image frame(s), image width/height, algorithm/processing features, and algorithm parameters should be programmed, then NSF3V_CTRL[0] EN bit written 1, then proper ISP/ISS components configured to start sending image frame(s) to NSF3V.
NSF3V processing/algorithm parameters are as follows:
- Mode of operation (NSF3V_CFG[3:0] MODE), with these options: {BAYER, BAYER_I2x2, BAYER_I3x3, YUV422, YUV420Y, YUV420UV, YUV422_I, YUV420Y_I, YUV420UV_I}.
- Border replication (NSF3V_CFG[11] LBORDER_REP, NSF3V_CFG[12] RBORDER_REP, NSF3V_CFG[13] TBORDER_REP, NSF3V_CFG[14] BBORDER_REP). When enabled, replicate left, right, top, and bottom borders, respectively, to selectively keep the border contribution to width/height, or reduce by the border width.
- Video port output data rate configured via NSF3V_VPOUT_CTRL[15:0] PCLK. Output EN signal would asserted and data (8/12/16-bit according to operation mode) at functional clock * NSF3V_VPOUT_CTRL[15:0] PCLK / 65536.
The following pseudo code sets a binary value on EN based on PCLK
ACC = 0;
while (1)
{
wait_until_rising_edge_of_clock( );
ACC += PCLK;
EN = (ACC >= 65536);
ACC = ACC % 65536;
}
CAUTION: Due to dependency, NSF3V requires horizontal and vertical blanking. Having blanking provided by the upstream module would suffice, but this adds inter-module dependency that can be difficult to debug. Having NSF3V drives its own output date rate would avoid this inter-module dependency.
Note: The SUSPEND signal from video port output would cause ignoring functional clock pulses and slowing down the output data rate.
- Edge enhancement enable (NSF3V_CFG[8] EE_EN).
- Radial shading gain enable (NSF3V_CFG[9] SHD_EN).
- Desaturation enable (NSF3V_CFG[10] DESAT_EN).
- YUV422 UV path hard thresholding enable (NSF3V_CFG[6] HARD_THR_EN_422UV).
- Image width and height in pixels (NSF3V_DIM[13:0] IW, NSF3V_DIM[29:16] IH).
- Radial shading parameters (NSF3V_SHD_ST .X/Y, NSF3V_SHD_HA , NSF3V_SHD_VA , NSF3V_SHD_HSVS , NSF3V_SHD_ADJ). Note that SHD_ST.X/Y are in pixels and lines, as opposed to data points
- Noise threshold piece-wise linear function parameters: NSF3V_TN_C[0..3][0..5].S[0..3]_[XYS], C[0..3] for the 4 color planes, and S[0..3] for the 4 segments. Together there are 4x4x3 = 48 parameters, each taking up 16-bit. Each color’s S0_X is fixed at 0.
- Tn1-to-Tn2 and Tn3-to-Tn2 scaling factors (NSF3V_TN_SCALE[7:0] TN1_TO_TN2 and TN3_TO_TN2).
- Soft thresholding function knee points u1, u2, u3 (NSF3V_THR_KNEE .U[1..3]).
- Soft thresholding suppression_max for each color/subband (NSF3V_SUP_C[0..3][0..1].L[1..3]_ [LH, HH]), 4x3x2 = 24 parameters, each taking up a byte.
- Edge enhancement ee_max for each color/subband (NSF3V_EE_C[0..3]_L[1..3]. [LH, HH]), 24 parameters
- Desaturation parameters (NSF3V_CFG[10] DESAT_EN, NSF3V_DS_THR[] .THR1/2, NSF3V_DS_SLOPE[] SLOPE1/2)