dvbs2_encoder.hdl HDL Worker
HDL worker wrapping the Open Research Institute dvb_fpga DVB-S2 encoder
core as an OpenCPI component.
Detail
Worker Properties
regsType:
ulongArray dimensions:
['4884']
Access:
Parameter:
FalseWritable:
TrueInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
ocpi_buffer_size_outputType:
ushortAccess:
Parameter:
FalseWritable:
FalseInitial:
TrueVolatile:
FalseRead back:
False
Default value:
0
ocpi_blocked_outputType:
ulongAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
ocpi_max_latency_outputType:
ushortAccess:
Parameter:
TrueWritable:
FalseInitial:
FalseVolatile:
FalseRead back:
False
Default value:
None
ocpi_latency_outputType:
ushortAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
ocpi_messages_outputType:
ulongAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
ocpi_bytes_outputType:
ulongAccess:
Parameter:
FalseWritable:
FalseInitial:
FalseVolatile:
TrueRead back:
False
Default value:
None
Worker Ports
inputProtocol:
ulong_timed_sampleOptional:
False
outputProtocol:
complex_short_timed_sampleOptional:
False
Inputs:
Outputs:
Architecture
The worker is implemented in three layers:
dvbs2_encoder.hdl (
dvbs2_encoder.vhd) — the OpenCPI HDL worker. Bridges the OpenCPI WSI data ports and WCI control/property bus to thedvb_fpgaprimitive interface.dvb_fpga primitive (
hdl/primitives/dvb_fpga/encoder.vhd) — a thin VHDL wrapper entity that re-exposes the signals of the underlying Vivado block design with clean port names.design_1 — a Xilinx Vivado block design containing the Open Research Institute
dvb_fpgaIP core (https://github.com/OpenResearchInstitute/dvb_fpga) and supporting Xilinx IP blocks (FIR compiler, etc.). Platform-specific variants exist:zynq_core— targets Zynq-7000 devices (ZC706, PlutoSDR, LibreSDR).zynq_ultra_core— targets Zynq UltraScale+ devices (ZCU102).
Signal flow
OpenCPI WSI input AXI-Stream slave dvb_fpga encoder
(ulong_timed_sample) --> s_axis_tdata/tvalid/ --> (ORI dvb_fpga IP)
tkeep/tlast/tready |
v
OpenCPI WSI output AXI-Stream master Complex IQ out
(complex_short_timed <-- m_axis_tdata/tvalid/ <--
_sample) tready
OpenCPI WCI / raw props AXI-Lite slave
(regs property) --> s_axi_lite_* --> dvb_fpga register map
The axi.lite32.raw2axi_lite32 converter translates raw OpenCPI property
reads and writes into AXI-Lite transactions, giving software direct access to
the encoder’s full register map via the regs array property.
Input framing
The worker expects each input message to contain exactly one BB frame in the
format produced by the downlink_aci application:
[0xB8][MODCOD][BB frame bytes...][padding to 8-byte alignment]
s_axis_tlast is driven by the eom (end-of-message) signal from the
OpenCPI input port, marking the boundary between BB frames to the encoder
core.
Backpressure
The worker asserts input_out.take only when both the encoder’s
s_axis_tready and the output port’s ready are asserted, implementing
correct AXI-Stream backpressure across the full pipeline.
Properties
Name |
Type |
Length |
Access |
Description |
|---|---|---|---|---|
|
|
4884 |
R/W |
Raw register bank providing direct AXI-Lite access to the |
Worker XML
<!-- This file defines the dvbs2_encoder.hdl HDL application worker. -->
<HdlWorker
Language='vhdl'
Libraries='dvb_fpga axi'
Version='2'
Spec='dvbs2_encoder'
firstrawproperty='regs'>
<property name='regs' type='ulong' arraylength='4884' writable='1' volatile='1' description='bank of registers to configure dvbs2 encoder'/>
<!-- Enter any augmentation of spec properties using <specproperty> elements here -->
<!-- Enter any worker-specific properties using <property> elements here -->
<StreamInterface Name="input" DataWidth="32"/>
<StreamInterface Name="output" DataWidth="32" InsertEOM="true"/>
</HdlWorker>
Utilization
Utilization reporting is not currently implemented.