Compare commits
100 Commits
43f91b281b
...
v2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
19fd4dfb2d | ||
|
|
1622f922f9 | ||
|
|
041218aa7f | ||
|
|
d9f7798814 | ||
|
|
1ab873419e | ||
|
|
65cef793ac | ||
|
|
99c6b62fc6 | ||
|
|
dc76c69731 | ||
|
|
1d0309f060 | ||
|
|
19b0513809 | ||
|
|
b3ba729f8b | ||
|
|
c7cb4e770f | ||
|
|
6093942ab3 | ||
|
|
edef1dbed3 | ||
|
|
b8d2d6a5dd | ||
|
|
4216288e2a | ||
|
|
df335aac1e | ||
|
|
1ebf8aa076 | ||
|
|
f9a2eff397 | ||
|
|
2f5a466ace | ||
|
|
ff3aa5e89f | ||
|
|
a7e710b603 | ||
|
|
c10736a5d7 | ||
|
|
2b7d05b3d9 | ||
|
|
4cbe3b5699 | ||
|
|
bbf87121f0 | ||
|
|
525a5f65e5 | ||
|
|
9a7a05f450 | ||
|
|
0df1044d13 | ||
|
|
f5ec4e6b6e | ||
|
|
293b0e6c50 | ||
|
|
9a0404f1a9 | ||
|
|
6098d86851 | ||
|
|
4ad5c3c5ea | ||
|
|
4b1b94c424 | ||
|
|
78a7d1ae68 | ||
|
|
97d5494781 | ||
|
|
7f369d8692 | ||
|
|
286c464f5a | ||
|
|
91b02cdc79 | ||
|
|
0b1dc081e5 | ||
|
|
d8fe924f6e | ||
|
|
b2ce956f41 | ||
|
|
fc50e71ab5 | ||
|
|
ce87190fba | ||
|
|
cb56e78923 | ||
|
|
a3d46a9113 | ||
|
|
15f20619b1 | ||
|
|
88e9df3dbb | ||
|
|
beb5410390 | ||
|
|
2b8f8de030 | ||
|
|
9fd110f451 | ||
|
|
aad231b55a | ||
|
|
3748b65872 | ||
|
|
d83006c50c | ||
|
|
5e5bba3ce6 | ||
|
|
ccc6b9cd73 | ||
|
|
f221e14c2c | ||
|
|
a01186484e | ||
|
|
4241699c3d | ||
|
|
d4e53a67ee | ||
|
|
2e570cee8b | ||
|
|
f8edb31dc2 | ||
|
|
520a37f520 | ||
|
|
cd91e3066b | ||
|
|
5a3bc8891d | ||
|
|
fdde9ec62b | ||
|
|
84b795203a | ||
|
|
ada7e324cd | ||
|
|
7813d9744c | ||
|
|
05b74503dc | ||
|
|
72b9a34db9 | ||
|
|
3c6ae0cfe9 | ||
|
|
eb14676581 | ||
|
|
040834d511 | ||
|
|
a92709b500 | ||
|
|
27ec12161c | ||
|
|
5caaa7fd9a | ||
|
|
ea0ecefae1 | ||
|
|
e810145620 | ||
|
|
a82aed0d5a | ||
|
|
62ab58b741 | ||
|
|
8e397fa41e | ||
|
|
790c2fdb37 | ||
|
|
872fbfcd6e | ||
|
|
9794b2d540 | ||
|
|
b72a8cd616 | ||
|
|
f66c3ffd06 | ||
|
|
0c6938bff2 | ||
|
|
66ad6149e6 | ||
|
|
a9b4ad9e17 | ||
|
|
0ea6881d1e | ||
|
|
278e318715 | ||
|
|
e0765a6afe | ||
|
|
dd70d58f2a | ||
|
|
d8a9e026ff | ||
|
|
1613ae8ad9 | ||
|
|
7b04d52204 | ||
|
|
30b31509c1 | ||
|
|
10644b0475 |
92
README.md
Normal file
92
README.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# 📡 RFSoC Channelizer + PS Processing (R-ESM Prototype)
|
||||
|
||||
## Overview
|
||||
|
||||
This project is based on the RFSoC SoC Blockset reference design, adapted as a prototype for a Radar Electronic Support Measures (R-ESM) receiver.
|
||||
|
||||
The system implements a high-throughput signal chain in the FPGA (PL) and performs frame-based processing in the processor (PS).
|
||||
|
||||
---
|
||||
|
||||
## Current Status
|
||||
|
||||
- Tx subsystem: LFM pulse generator (DDS-based, complex output)
|
||||
- Rx subsystem: fully functional channelizer pipeline (PFB-based) or bypass
|
||||
- PL → PS interface: AXI4-Stream + DMA operational
|
||||
- PS processing: frame-based algorithm on a Data Process Window (DPW)
|
||||
|
||||
---
|
||||
|
||||
## System Architecture
|
||||
|
||||
Tx (PL)
|
||||
→ Waveform Generator (LFM / CW / Pulsed)
|
||||
→ DAC
|
||||
→ RF Loopback / Input
|
||||
|
||||
Rx (PL)
|
||||
→ ADC
|
||||
→ Channelizer (PFB, 512 bins) / Bypass / Counter
|
||||
→ Capture (frame control)
|
||||
→ AXI4-Stream (128-bit, 4 samples/clock)
|
||||
→ DMA (S2MM)
|
||||
→ PS Memory
|
||||
→ Processor Algorithm
|
||||
|
||||
Post Processing (PS)
|
||||
→ Triggered Capture
|
||||
→ Sample Unpacking (I/Q)
|
||||
→ Data Reshaping → [FrameSize x nFrames x nTriggers]
|
||||
→ Host Communication / Processing / Visualization
|
||||
→ One DPW is a windows of FrameSize x nFrames samples
|
||||
|
||||
---
|
||||
|
||||
## Key Parameters
|
||||
|
||||
- ADC Sampling Rate: 4096 MSPS
|
||||
- Decimation: 8
|
||||
- Effective BW: 512 MHz
|
||||
- Channels (FFT size): 512
|
||||
- Samples per clock: 4
|
||||
- FPGA clock: 128 MHz
|
||||
- Frame size (PS): 512 samples
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
### FPGA (PL)
|
||||
|
||||
- [Tx Subsystem (Pulse Generator)](docs/pl_tx_subsystem.md)
|
||||
- [Rx Subsystem (Channelizer)](docs/pl_rx_subsystem.md)
|
||||
|
||||
### Processor (PS)
|
||||
|
||||
- [PS Subsystem](docs/ps_subsystem.md)
|
||||
|
||||
---
|
||||
|
||||
## System Flow
|
||||
|
||||
Tx → Rx → PS
|
||||
|
||||
- Tx generates waveform
|
||||
- Rx captures and channelizes
|
||||
- PS processes frames
|
||||
|
||||
---
|
||||
|
||||
## Roadmap
|
||||
|
||||
1. Functional FrFT (PS)
|
||||
2. Profiling
|
||||
3. NEON optimization
|
||||
4. Throughput tuning
|
||||
5. PL acceleration
|
||||
|
||||
---
|
||||
|
||||
## Key Takeaway
|
||||
|
||||
First make it work end-to-end, then make it fast.
|
||||
BIN
block_bypass/TBm_bypass.slx
Normal file
BIN
block_bypass/TBm_bypass.slx
Normal file
Binary file not shown.
BIN
block_capture/TBm_capture.slx
Normal file
BIN
block_capture/TBm_capture.slx
Normal file
Binary file not shown.
BIN
block_pulsegen/TBm_pulsegen.slx
Normal file
BIN
block_pulsegen/TBm_pulsegen.slx
Normal file
Binary file not shown.
142
codegen_frft/TBc_lfm_fracF.m
Normal file
142
codegen_frft/TBc_lfm_fracF.m
Normal file
@@ -0,0 +1,142 @@
|
||||
%% FrFT Validation Script (Reference vs Original)
|
||||
% Author: Canisio Barth
|
||||
|
||||
clear; clc; close all;
|
||||
|
||||
%% Parameters
|
||||
Fs = 512e6; % Sampling rate
|
||||
T = 1e-6; % Signal duration
|
||||
N = Fs*T; % 512 samples
|
||||
|
||||
n = (0:N-1).';
|
||||
t = (n - N/2)/ Fs;
|
||||
|
||||
% Beta range (Hz/s)
|
||||
betas = (-32e12 : 8e12 : 32e12);
|
||||
|
||||
% Order sweep (for heatmap)
|
||||
a_vec = linspace( 0.5, 1.5, 100);
|
||||
|
||||
% Center frequency
|
||||
f0 = 0e6; % center frequency (Hz) — set as needed
|
||||
|
||||
%% ============================================================
|
||||
%% A) HEATMAP (single chirp, order sweep)
|
||||
%% ============================================================
|
||||
|
||||
beta0 = 64e12; % pick one chirp for visualization
|
||||
|
||||
% Generate LFM chirp
|
||||
x = exp(1j*(2*pi*f0*t + pi*beta0*t.^2));
|
||||
|
||||
% External interpolation (IMPORTANT)
|
||||
x_interp = bizinter(x);
|
||||
|
||||
N_interp = length(x_interp);
|
||||
N_out = N_interp/2; % after decimation
|
||||
|
||||
% Allocate
|
||||
FrFT_map_ref = zeros(N_out, length(a_vec));
|
||||
FrFT_map_cmp = zeros(N_out, length(a_vec));
|
||||
|
||||
for k = 1:length(a_vec)
|
||||
a = a_vec(k);
|
||||
|
||||
% Reference
|
||||
y_ref = fracF_ref(x_interp, a);
|
||||
%y_ref = fracF_cg(x_interp, a);
|
||||
|
||||
% Comparison (original / other implementation)
|
||||
%y_cmp = fracF_cg(x_interp, a);
|
||||
y_cmp = fracF_cg_mex(single(x_interp), single(a));
|
||||
|
||||
FrFT_map_ref(:,k) = y_ref;
|
||||
FrFT_map_cmp(:,k) = double(y_cmp);
|
||||
end
|
||||
|
||||
% Global relative error
|
||||
rel_err_global = norm(FrFT_map_ref(:) - FrFT_map_cmp(:)) / ...
|
||||
norm(FrFT_map_ref(:));
|
||||
|
||||
fprintf('Global relative error: %.3e\n', rel_err_global);
|
||||
|
||||
% Plot - Reference
|
||||
figure;
|
||||
imagesc(a_vec, -N_out/2:N_out/2-1, abs(FrFT_map_ref) / sqrt(N));
|
||||
axis xy;
|
||||
xlabel('Order a');
|
||||
ylabel('Index');
|
||||
title('FrFT Magnitude (Reference)');
|
||||
colorbar;
|
||||
|
||||
% Plot - Comparison
|
||||
figure;
|
||||
imagesc(a_vec, -N_out/2:N_out/2-1, abs(FrFT_map_cmp) / sqrt(N));
|
||||
axis xy;
|
||||
xlabel('Order a');
|
||||
ylabel('Index');
|
||||
title('FrFT Magnitude (Comparison)');
|
||||
colorbar;
|
||||
|
||||
% Plot - Difference
|
||||
figure;
|
||||
rel_err_map = abs(FrFT_map_ref - FrFT_map_cmp) ./ ...
|
||||
(abs(FrFT_map_ref) + eps);
|
||||
|
||||
imagesc(a_vec, -N_out/2:N_out/2-1, rel_err_map);
|
||||
axis xy;
|
||||
xlabel('Order a');
|
||||
ylabel('Index');
|
||||
title('Absolute Difference |Ref - Cmp|');
|
||||
colorbar;
|
||||
|
||||
|
||||
%% ============================================================
|
||||
%% B) PEAK VS BETA (matched order)
|
||||
%% ============================================================
|
||||
|
||||
peak_ref = zeros(size(betas));
|
||||
peak_cmp = zeros(size(betas));
|
||||
|
||||
for i = 1:length(betas)
|
||||
beta = betas(i);
|
||||
|
||||
% Generate chirp
|
||||
x = exp(1j*(2*pi*f0*t + pi*beta*t.^2));
|
||||
|
||||
% External interpolation
|
||||
x_interp = bizinter(x);
|
||||
|
||||
% Matched order
|
||||
a = -(2/pi)*atan(Fs/(beta*T));
|
||||
|
||||
% Compute FrFT
|
||||
y_ref = fracF_ref(x_interp, a);
|
||||
%y_ref = fracF_cg(x_interp, a);
|
||||
|
||||
%y_cmp = fracF_cg(x_interp, a);
|
||||
y_cmp = fracF_cg_mex(single(x_interp), single(a));
|
||||
|
||||
% Normalized peak magnitude
|
||||
peak_ref(i) = max(abs(y_ref)) / sqrt(N);
|
||||
peak_cmp(i) = max(abs(y_cmp)) / sqrt(N);
|
||||
end
|
||||
|
||||
% Plot peaks
|
||||
figure;
|
||||
plot(betas/1e12, peak_ref, 'o-', 'LineWidth', 1.5); hold on;
|
||||
plot(betas/1e12, peak_cmp, 's--', 'LineWidth', 1.5);
|
||||
xlabel('\beta (MHz/\mus)');
|
||||
ylabel('Peak Magnitude');
|
||||
title('Peak vs Chirp Rate');
|
||||
legend('Reference','Comparison');
|
||||
grid on;
|
||||
|
||||
% Plot relative error
|
||||
figure;
|
||||
rel_err = abs(peak_ref - peak_cmp) ./ peak_ref;
|
||||
plot(betas/1e12, rel_err, 'o-', 'LineWidth', 1.5);
|
||||
xlabel('\beta (MHz/\mus)');
|
||||
ylabel('Relative Error');
|
||||
title('Relative Error between Implementations');
|
||||
grid on;
|
||||
BIN
codegen_frft/TBm_lfm_fracF.slx
Normal file
BIN
codegen_frft/TBm_lfm_fracF.slx
Normal file
Binary file not shown.
37
codegen_frft/bizinter.m
Normal file
37
codegen_frft/bizinter.m
Normal file
@@ -0,0 +1,37 @@
|
||||
function xint=bizinter(x)
|
||||
|
||||
N=length(x);
|
||||
im = 0;
|
||||
if sum(abs(imag(x)))>0
|
||||
im = 1;
|
||||
imx = imag(x);
|
||||
x = real(x);
|
||||
end
|
||||
|
||||
x2=x(:);
|
||||
x2=[x2.'; zeros(1,N)];
|
||||
x2=x2(:);
|
||||
xf=fft(x2);
|
||||
if rem(N,2)==1 %N = odd
|
||||
N1=fix(N/2+1); N2=2*N-fix(N/2)+1;
|
||||
xint=2*real(ifft([xf(1:N1); zeros(N,1) ;xf(N2:2*N)].'));
|
||||
else
|
||||
xint=2*real(ifft([xf(1:N/2); zeros(N,1) ;xf(2*N-N/2+1:2*N)].'));
|
||||
end
|
||||
if ( im == 1)
|
||||
x2=imx(:);
|
||||
x2=[x2.'; zeros(1,N)];
|
||||
x2=x2(:);
|
||||
xf=fft(x2);
|
||||
if rem(N,2)==1 %N = odd
|
||||
N1=fix(N/2+1); N2=2*N-fix(N/2)+1;
|
||||
xmint=2*real(ifft([xf(1:N1); zeros(N,1) ;xf(N2:2*N)].'));
|
||||
else
|
||||
xmint=2*real(ifft([xf(1:N/2); zeros(N,1) ;xf(2*N-N/2+1:2*N)].'));
|
||||
end
|
||||
xint = xint + 1j*xmint;
|
||||
end
|
||||
|
||||
xint = xint(:);
|
||||
|
||||
end
|
||||
80
codegen_frft/fracF_cg.m
Normal file
80
codegen_frft/fracF_cg.m
Normal file
@@ -0,0 +1,80 @@
|
||||
function F = fracF_cg(f, a)
|
||||
%#codegen
|
||||
%% fracF_cg Fractional Fourier Transform (FrFT) - codegen-ready version
|
||||
%
|
||||
% Author: Canisio Barth
|
||||
%
|
||||
% F = fracF_cg(f, a) computes the Fractional Fourier Transform (FrFT)
|
||||
% of the input signal 'f' for a single transform order 'a'.
|
||||
%
|
||||
% This version is adapted for MATLAB Coder and hardware-oriented workflows.
|
||||
%
|
||||
% Key characteristics:
|
||||
% - Fixed input size: [1024 x 1] complex(single)
|
||||
% - Output size: [512 x 1] complex(single)
|
||||
% - Assumes input 'f' is already interpolated externally
|
||||
% - No input validation (assumes valid scalar 'a' in core region)
|
||||
% - Deterministic execution (no branching, no dynamic allocation)
|
||||
%
|
||||
% INPUTS:
|
||||
% f - [1024 x 1] complex(single)
|
||||
% a - scalar single
|
||||
%
|
||||
% OUTPUTS:
|
||||
% F - [512 x 1] complex(single)
|
||||
%
|
||||
% Notes:
|
||||
% - Internal FFT size = 2048
|
||||
% - Designed for code generation and future FPGA mapping
|
||||
|
||||
% Fixed sizes
|
||||
N = 1024;
|
||||
%N2 = 512;
|
||||
Nfft = 2048;
|
||||
|
||||
% Ensure types
|
||||
pi_s = single(pi);
|
||||
|
||||
% Transform parameter
|
||||
phi = a * (pi_s / 2);
|
||||
|
||||
% Precompute trig terms
|
||||
tan_half_phi = tan(phi / 2);
|
||||
sin_phi = sin(phi);
|
||||
cos_phi = cos(phi);
|
||||
|
||||
csc_phi = 1 / sin_phi;
|
||||
cot_phi = cos_phi / sin_phi;
|
||||
|
||||
twoDelta = 2 * sqrt(single(N) / 2);
|
||||
|
||||
%% === Chirp A ===
|
||||
n = single((-N/2:N/2-1).') / twoDelta;
|
||||
|
||||
Achirp = exp(-1j * pi_s * (n .* n) * tan_half_phi);
|
||||
|
||||
%% Chirp multiplication #1
|
||||
g = Achirp .* f;
|
||||
|
||||
%% === Chirp B ===
|
||||
m = single((-N:N-1).') / twoDelta;
|
||||
|
||||
Bchirp = exp(1j * pi_s * csc_phi .* (m .* m));
|
||||
|
||||
%% === Zero-padded buffer ===
|
||||
g_pad = complex(zeros(Nfft,1,'single'));
|
||||
g_pad(1:N) = g;
|
||||
|
||||
%% === FFT convolution ===
|
||||
G = ifft( fft(g_pad) .* fft(Bchirp) );
|
||||
|
||||
%% Extract valid part and decimate
|
||||
G_valid = G(N+1:2:end); % [512 x 1]
|
||||
|
||||
%% Complex phase constant
|
||||
Aphi = sqrt(1 - 1j * cot_phi);
|
||||
|
||||
%% === Chirp multiplication #2 ===
|
||||
F = (Aphi / twoDelta) .* G_valid .* Achirp(1:2:end);
|
||||
|
||||
end
|
||||
77
codegen_frft/fracF_ref.m
Normal file
77
codegen_frft/fracF_ref.m
Normal file
@@ -0,0 +1,77 @@
|
||||
function [F] = fracF_ref(f, a)
|
||||
%% fracF_ref Reference Fractional Fourier Transform (FrFT) implementation
|
||||
%
|
||||
% Author: Canisio Barth
|
||||
%
|
||||
% F = fracF_ref(f, a) computes the Fractional Fourier Transform (FrFT)
|
||||
% of the input signal 'f' for a single transform order 'a'.
|
||||
%
|
||||
% This function serves as a reference (golden model) for validation and
|
||||
% comparison against future code generation and hardware-oriented
|
||||
% implementations.
|
||||
%
|
||||
% Key characteristics:
|
||||
% - Scalar transform order 'a' (no vector support).
|
||||
% - Assumes input signal 'f' is already interpolated externally.
|
||||
% - Maintains original algorithm structure, including internal
|
||||
% decimation after convolution.
|
||||
% - Uses full MATLAB flexibility (not yet restricted for codegen).
|
||||
%
|
||||
% INPUTS:
|
||||
% f - Input signal, [N x 1] column vector.
|
||||
% IMPORTANT: 'f' must already be interpolated (expanded signal).
|
||||
%
|
||||
% a - Scalar transform order.
|
||||
% Expected to satisfy: 0.5 < |a| < 1.5
|
||||
%
|
||||
% OUTPUTS:
|
||||
% F - Fractional Fourier Transform, [(N/2) x 1] column vector.
|
||||
% (Decimated output, consistent with original algorithm.)
|
||||
%
|
||||
% LIMITATIONS:
|
||||
% - No internal interpolation is performed.
|
||||
% - Only valid for scalar 'a'.
|
||||
% - Assumes caller enforces correct parameter range and signal format.
|
||||
%
|
||||
% See also: fracF (Ozaktas)
|
||||
|
||||
% Validate scalar 'a'
|
||||
if ~isscalar(a)
|
||||
error('Parameter ''a'' must be scalar.');
|
||||
end
|
||||
|
||||
% Range check (core region)
|
||||
if abs(a) < 0.5 || abs(a) > 1.5
|
||||
error('Parameter ''a'' must be within the interval [0.5, 1.5].');
|
||||
end
|
||||
|
||||
N = length(f); % already interpolated length
|
||||
|
||||
% Transform parameter
|
||||
twoDelta = 2 * sqrt(N/2);
|
||||
phi = a * pi / 2;
|
||||
|
||||
% === Chirp A ===
|
||||
n = ((-N/2:N/2-1) / twoDelta).';
|
||||
Achirp = exp(-1j * pi * (n .* n) * tan(phi/2));
|
||||
|
||||
% Chirp multiplication #1
|
||||
g = Achirp .* f;
|
||||
|
||||
% === Chirp B ===
|
||||
m = ((-N:N-1) / twoDelta).';
|
||||
Bchirp = exp(1j * pi * csc(phi) .* (m .* m));
|
||||
|
||||
% === Chirp convolution ===
|
||||
G = ifft(fft([g; zeros(N,1)]) .* fft(Bchirp));
|
||||
|
||||
% Extract valid part and decimate
|
||||
G = G(end/2+1:2:end);
|
||||
|
||||
% Complex phase constant
|
||||
Aphi = sqrt(1 - 1j * cot(phi));
|
||||
|
||||
% === Chirp multiplication #2 ===
|
||||
F = (Aphi / twoDelta) .* G .* Achirp(1:2:end);
|
||||
|
||||
end
|
||||
144
docs/pl_rx_subsystem.md
Normal file
144
docs/pl_rx_subsystem.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# 📡 PL Rx Subsystem (Channelizer)
|
||||
|
||||
[🏠 Project Home](../README.md)
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The Rx subsystem implements a **polyphase filter bank (PFB) channelizer** followed by FFT processing, a **bypass path**, and a **multi-frame capture pipeline**.
|
||||
|
||||
It converts wideband ADC input into frequency-domain channels (or raw samples via bypass) and streams the result to the PS.
|
||||
|
||||
---
|
||||
|
||||
## Architecture
|
||||
|
||||
### Channelizer Path (default)
|
||||
|
||||
ADC
|
||||
↓
|
||||
PFB Channelizer (Decimation + Filtering)
|
||||
↓
|
||||
FFT (512 bins)
|
||||
↓
|
||||
Capture (frame control)
|
||||
↓
|
||||
AXI4-Stream (128-bit, 4 samples/clock)
|
||||
↓
|
||||
DMA
|
||||
|
||||
---
|
||||
|
||||
### Bypass Path (Debug / Raw Data)
|
||||
|
||||
ADC
|
||||
↓
|
||||
Bypass Path
|
||||
↓
|
||||
Capture (frame control)
|
||||
↓
|
||||
AXI4-Stream (128-bit, 4 samples/clock)
|
||||
↓
|
||||
DMA
|
||||
|
||||
---
|
||||
|
||||
## Capture Pipeline
|
||||
|
||||
- Multi-frame acquisition (configurable nFrames)
|
||||
- Frame size: 512 samples
|
||||
- Supports asynchronous capture start (not frame-aligned)
|
||||
- TLAST asserted at frame boundaries
|
||||
|
||||
### Behavior
|
||||
|
||||
- First frame may be partial
|
||||
- Frames may contain ≤ 2 frame indices (expected)
|
||||
- DPW spans nFrames frames but covers nFrames + 1 frame regions
|
||||
|
||||
---
|
||||
|
||||
## Processing Chain (Channelizer Mode)
|
||||
|
||||
### ADC Input
|
||||
- Sampling rate: 4096 MSPS
|
||||
- Data type: **fixdt(1,16,15)** (Q1.15)
|
||||
|
||||
### PFB Channelizer
|
||||
- Decimation: 8
|
||||
- Effective bandwidth: 512 MHz
|
||||
|
||||
### FFT
|
||||
- Size: 512
|
||||
- Produces frequency bins
|
||||
|
||||
### Capture
|
||||
- Defines frame boundaries (512 samples)
|
||||
- Generates TLAST
|
||||
|
||||
---
|
||||
|
||||
## Numeric Format and Scaling
|
||||
|
||||
### System Standardization
|
||||
|
||||
- End-to-end Q1.15 (**fixdt(1,16,15)**)
|
||||
|
||||
### Channelizer Output Scaling
|
||||
|
||||
- Native: **sFix25_En23**
|
||||
- Quantized to: **fixdt(1,16,15)** (round + saturate)
|
||||
|
||||
---
|
||||
|
||||
## Data Packing (Updated)
|
||||
|
||||
- 4 samples per clock
|
||||
- Each sample: complex (16-bit real + 16-bit imag)
|
||||
- Packed into **128-bit AXI4-Stream word**
|
||||
|
||||
Benefits:
|
||||
- Matches datapath parallelism
|
||||
- Efficient DMA transfers
|
||||
- Eliminates need for serializer stage
|
||||
|
||||
---
|
||||
|
||||
## AXI4-Stream Output
|
||||
|
||||
- Width: 128 bits
|
||||
- Contains 4 complex samples per cycle
|
||||
- TLAST = frame boundary
|
||||
|
||||
---
|
||||
|
||||
## Debug / Validation Features
|
||||
|
||||
A counter-based debug mode is implemented:
|
||||
|
||||
- Real part → sample counter (0..511)
|
||||
- Imag part → frame index
|
||||
|
||||
Used to validate:
|
||||
- Sample continuity
|
||||
- Frame boundaries
|
||||
- DMA ordering and integrity
|
||||
|
||||
---
|
||||
|
||||
## Key Characteristics
|
||||
|
||||
- Fully streaming pipeline
|
||||
- Deterministic latency
|
||||
- High throughput (4 samples/clock)
|
||||
- Dual-mode operation (channelizer / bypass)
|
||||
- Validated up to nFrames = 1024
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Related Components
|
||||
|
||||
- [🏠 Project Home](../README.md)
|
||||
- [PL Tx Subsystem](pl_tx_subsystem.md)
|
||||
- [PS Subsystem](ps_subsystem.md)
|
||||
177
docs/pl_tx_subsystem.md
Normal file
177
docs/pl_tx_subsystem.md
Normal file
@@ -0,0 +1,177 @@
|
||||
# 📡 PL Tx Subsystem (Pulse & Continuous LFM Generator)
|
||||
|
||||
[🏠 Project Home](../README.md)
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The Tx subsystem implements a **pulse-based and continuous Linear Frequency Modulated (LFM) chirp generator** using a DDS/NCO architecture in the FPGA (PL).
|
||||
|
||||
The generator produces **complex baseband output**:
|
||||
|
||||
x[n] = exp(j·φ[n])
|
||||
|
||||
and operates deterministically in the PL after a trigger from the PS.
|
||||
|
||||
---
|
||||
|
||||
## Architecture
|
||||
|
||||
TxPulseStart (PS)
|
||||
↓
|
||||
pulse_gen_ctrl (FSM)
|
||||
↓
|
||||
tx_active
|
||||
↓
|
||||
Phase Increment Logic
|
||||
↓
|
||||
NCO (DDS)
|
||||
↓
|
||||
Complex Output (I/Q)
|
||||
|
||||
---
|
||||
|
||||
## Operating Modes
|
||||
|
||||
The subsystem now supports multiple Tx modes:
|
||||
|
||||
### 1. Pulsed LFM (default)
|
||||
|
||||
- Chirp generated only during pulse window
|
||||
- Phase resets at each pulse start
|
||||
- Standard radar burst operation
|
||||
|
||||
---
|
||||
|
||||
### 2. CW Mode (Continuous Wave)
|
||||
|
||||
- `tx_active = 1` continuously
|
||||
- Generates a single-tone output
|
||||
- Achieved by setting constant phase increment
|
||||
|
||||
---
|
||||
|
||||
### 3. Continuous LFM (Workaround Implementation)
|
||||
|
||||
- `tx_active` forced HIGH continuously
|
||||
- A **1-cycle LOW pulse** is inserted periodically
|
||||
- This LOW→HIGH transition **resets the NCO**
|
||||
|
||||
Result:
|
||||
- Continuous chirp
|
||||
- Bounded bandwidth
|
||||
- Periodic repetition of LFM
|
||||
|
||||
---
|
||||
|
||||
## Chirp Generation Principle
|
||||
|
||||
The chirp is generated using a second-order phase accumulator:
|
||||
|
||||
Δφ[n] = Δφ[n−1] + step
|
||||
φ[n] = φ[n−1] + Δφ[n]
|
||||
|
||||
This results in a linear frequency sweep.
|
||||
|
||||
---
|
||||
|
||||
## Parameterization (PS → PL)
|
||||
|
||||
Inputs:
|
||||
|
||||
- Center frequency: Fc
|
||||
- Bandwidth: B
|
||||
- Pulse width: N (samples)
|
||||
|
||||
Derived internally:
|
||||
|
||||
f_start = Fc − B/2
|
||||
step = B / (N − 1)
|
||||
|
||||
These values are converted to DDS phase increments before being written to PL registers.
|
||||
|
||||
---
|
||||
|
||||
## Pulse Timing (FSM)
|
||||
|
||||
States:
|
||||
|
||||
- IDLE: waits for trigger and latches parameters
|
||||
- ACTIVE: generates pulses
|
||||
- DONE: waits for trigger reset
|
||||
|
||||
---
|
||||
|
||||
## Timing Behavior
|
||||
|
||||
### Pulsed Mode
|
||||
|
||||
|<------ PRI ------>|
|
||||
|<-- pulse -->| idle |
|
||||
|
||||
- tx_active = 1 → chirp output
|
||||
- tx_active = 0 → output zero
|
||||
|
||||
---
|
||||
|
||||
### Continuous LFM Mode
|
||||
|
||||
tx_active behavior:
|
||||
|
||||
1 1 1 1 1 0 1 1 1 1 ...
|
||||
|
||||
- 1-cycle LOW inserted at end of chirp period
|
||||
- Rising edge resets NCO
|
||||
- Defines chirp repetition interval
|
||||
|
||||
---
|
||||
|
||||
## CW / Continuous LFM Implementation Details
|
||||
|
||||
- CW mode bypasses FSM output
|
||||
- A dedicated counter generates periodic reset pulses
|
||||
- Reset timing is based on `pulse_width_cycles`
|
||||
|
||||
Important:
|
||||
|
||||
- Reset pulse is exactly **1 clock cycle**
|
||||
- Ensures deterministic NCO restart
|
||||
- Decoupled from PRI/FSM timing
|
||||
|
||||
---
|
||||
|
||||
## Burst Trigger (PS Interaction)
|
||||
|
||||
- Controlled via TxPulseStart (memory-mapped register)
|
||||
- Rising edge triggers burst
|
||||
- PL runs autonomously afterward
|
||||
|
||||
---
|
||||
|
||||
## Key Characteristics
|
||||
|
||||
- Deterministic timing (128 MHz)
|
||||
- Efficient DDS (adder-based)
|
||||
- Complex output (I/Q)
|
||||
- Supports:
|
||||
- Pulsed radar mode
|
||||
- Continuous wave (CW)
|
||||
- Continuous LFM (periodic chirp)
|
||||
|
||||
---
|
||||
|
||||
## Design Notes
|
||||
|
||||
- FSM controls **timing (when to transmit)**
|
||||
- NCO controls **frequency evolution**
|
||||
- Continuous LFM implemented via **tx_active edge reuse**
|
||||
- Minimal hardware overhead (no additional NCO logic)
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Related Components
|
||||
|
||||
- [🏠 Project Home](../README.md)
|
||||
- [PL Rx Subsystem](pl_rx_subsystem.md)
|
||||
- [PS Subsystem](ps_subsystem.md)
|
||||
140
docs/ps_subsystem.md
Normal file
140
docs/ps_subsystem.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# 🧠 PS Subsystem (Control + Capture + Processing)
|
||||
|
||||
[🏠 Project Home](../README.md)
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The PS subsystem is responsible for:
|
||||
|
||||
- System initialization
|
||||
- Configuring PL subsystems
|
||||
- Triggering captures
|
||||
- Receiving data via DMA
|
||||
- Preparing data for processing and visualization
|
||||
|
||||
The current implementation acts as a **placeholder for post-processing**, focusing on reliable data acquisition and host interaction.
|
||||
|
||||
---
|
||||
|
||||
## Responsibilities
|
||||
|
||||
### Control & Initialization
|
||||
|
||||
- Configure PL parameters:
|
||||
- Tx waveform configuration
|
||||
- Capture parameters (nFrames, etc.)
|
||||
- Initialize DMA and memory buffers
|
||||
- Manage system startup
|
||||
|
||||
---
|
||||
|
||||
### Trigger & Capture
|
||||
|
||||
- Generates capture trigger (software-controlled)
|
||||
- Controls DPW acquisition timing
|
||||
- Each trigger initiates one DPW capture
|
||||
|
||||
---
|
||||
|
||||
### DMA Handling
|
||||
|
||||
- AXI4-Stream → DMA (S2MM)
|
||||
- Receives **128-bit stream** (4 samples per clock)
|
||||
- Stores data in PS DDR memory
|
||||
|
||||
Configuration:
|
||||
- Frame size: 512 samples
|
||||
- nFrames: configurable (validated up to 1024)
|
||||
|
||||
---
|
||||
|
||||
## Data Format
|
||||
|
||||
### Raw DMA Data
|
||||
|
||||
- Packed complex samples
|
||||
- 16-bit real + 16-bit imag per sample
|
||||
- 4 samples per 128-bit word
|
||||
|
||||
---
|
||||
|
||||
### Processing Representation
|
||||
|
||||
Data is unpacked and reshaped into:
|
||||
|
||||
```
|
||||
[FrameSize x nFrames x nTriggers]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Processing Pipeline (Current)
|
||||
|
||||
DMA
|
||||
→ Unpack samples (I/Q separation)
|
||||
→ Convert to complex representation
|
||||
→ Reshape into 3D structure
|
||||
→ Visualization / basic analysis
|
||||
|
||||
---
|
||||
|
||||
## Validation Support
|
||||
|
||||
Uses counter-based validation:
|
||||
|
||||
- Real part → sample counter
|
||||
- Imag part → frame index
|
||||
|
||||
Enables verification of:
|
||||
|
||||
- Data continuity
|
||||
- Frame alignment
|
||||
- Correct ordering from DMA
|
||||
|
||||
---
|
||||
|
||||
## Execution Model
|
||||
|
||||
- Triggered (event-based)
|
||||
- Burst capture (DPW)
|
||||
- Not continuous real-time streaming
|
||||
|
||||
---
|
||||
|
||||
## Performance Notes
|
||||
|
||||
- Designed for correctness and validation (not optimized)
|
||||
- Bottleneck: unpacking + data movement
|
||||
- Full-rate continuous processing not supported
|
||||
|
||||
---
|
||||
|
||||
## Role in System
|
||||
|
||||
The PS currently serves as:
|
||||
|
||||
- Control interface
|
||||
- Data acquisition manager
|
||||
- Pre-processing stage
|
||||
|
||||
Future implementations will replace the current processing with advanced algorithms (e.g., FrFT).
|
||||
|
||||
---
|
||||
|
||||
## Future Work
|
||||
|
||||
- FrFT-based processing
|
||||
- Timestamp integration
|
||||
- UDP streaming
|
||||
- Optimization (NEON / vectorization)
|
||||
- Metadata extraction (move complexity to PL)
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Related Components
|
||||
|
||||
- [🏠 Project Home](../README.md)
|
||||
- [PL Tx Subsystem](pl_tx_subsystem.md)
|
||||
- [PL Rx Subsystem](pl_rx_subsystem.md)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="aux" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="soc_rfsoc_prj_startup.m" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="soc_rfsoc_preload.m" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="post_processing" type="File"/>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="soc_rfsoc_startup.m" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="soc_rfsoc_postload.m" type="File"/>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<Info Ref="" Type="Relative"/>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<Info location="7ac7702b-30c0-47d0-8a3a-1562b67f2ab5" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="codegen_frft/codegen/mex/fracF_cg/interface" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="4a7e46c8-b608-4097-9e1f-6b08f40b724c" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="codegen_frft" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="e5067e19-daed-4732-909a-6dc210e105d6" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="block_pulsegen" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="6a9c972f-52d5-42e0-8c82-940b26905df7" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="codegen_frft/codegen" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="7593a6a4-6687-4364-8723-1bc8794d0177" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="codegen_frft/codegen/mex" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="732585ee-100e-439f-988e-c97de5008a4c" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="block_bypass" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="f7229047-4926-407b-902a-a25e790af1a9" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="a92ac691-f104-48a3-8517-c0b00eec410f" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="utilities/aux" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="ac65d1bc-e8fa-4056-83e4-eaba335b5aa3" type="Reference"/>
|
||||
@@ -1,2 +1,2 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="referencedmodels" Type="Relative"/>
|
||||
@@ -1,2 +1,2 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="15258b0d-3597-4917-9d8b-5ec7677aa528" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="block_capture" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="c26ab781-2c03-423c-8199-bc6903e4e4f7" type="Reference"/>
|
||||
@@ -1,2 +1,2 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="utilities" Type="Relative"/>
|
||||
@@ -1,2 +1,2 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="082474f0-d7d9-423c-bb63-dc039b2ad79a" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="docs" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="de23f5bc-2dc5-4828-b061-5d044a37a018" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="utilities/post_processing" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="5bfc0575-1eef-448a-a3a2-ced40deb5860" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info Ref="codegen_frft/codegen/mex/fracF_cg" Type="Relative"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="81080468-b05c-494e-b13d-b9983b9ef350" type="Reference"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info description="RFSoC Channelizer + PS Processing (R-ESM Prototype) This project is based on the RFSoC SoC Blockset reference design, adapted as a prototype for a Radar Electronic Support Measures (R-ESM) receiver. The system implements a high-throughput signal chain in the FPGA (PL) and performs frame-based processing in the processor (PS)."/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="Information" type="Extension"/>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info File="gm_soc_rfsoc_top_sw.slx" GroupUUID="default" Icon="" Name="Open Interface model" Type="Basic" Visible="1"/>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="881a1955-5626-41b7-9355-a04f7db84232" type="EntryPoint"/>
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info File="utilities/soc_rfsoc_startup.m" GroupUUID="default" Icon="" Name="soc_rfsoc_startup" Type="StartUp" Visible="0">
|
||||
<Info File="utilities/soc_rfsoc_prj_startup.m" GroupUUID="default" Icon="" Name="soc_rfsoc_startup" Type="StartUp" Visible="0">
|
||||
<Extension Name="StartUpPrev" Value="HEAD"/>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="TBm_pulsegen.slx" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="1" type="DIR_SIGNIFIER"/>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="1" type="DIR_SIGNIFIER"/>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="1" type="DIR_SIGNIFIER"/>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="TBm_capture.slx" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="1" type="DIR_SIGNIFIER"/>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="TBm_bypass.slx" type="File"/>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="checkTimeSamples.m" type="File"/>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="checkFreqSamples.m" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="1" type="DIR_SIGNIFIER"/>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info>
|
||||
<Category UUID="FileClassCategory">
|
||||
<Label UUID="design"/>
|
||||
</Category>
|
||||
</Info>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="checkCounterSamples.m" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="block_pulsegen" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info location="README.md" type="File"/>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Info/>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user