Hello,
I have been working on getting Siggen working under E310. I built RFNOC
image with siggen for E310. I have been able to use that image to generate
a signal from RFNOC_SIGGEN -> HOST, but when I try to rung RFNOC_SIGGEN ->
RFNOC_DUC -> RFNOC_RADIO I received an error. The error I received goes
away if I start with siggen enable = FALSE.
See below, the script was modified to enable siggen after 2 seconds, and
again it does not complain, but I get absolutely no output.
Following are script and original error that I receive.
Please advise,
John
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
##################################################
# GNU Radio Python Flow Graph
# Title: Rfnoc Sin Radio E310
# Generated: Thu Sep 21 14:12:08 2017
##################################################
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio import uhd
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
import ettus
class RFNoc_Sin_Radio_e310(gr.top_block):
def __init__(self):
gr.top_block.__init__(self, "Rfnoc Sin Radio E310")
##################################################
# Variables
##################################################
self.samp_rate = samp_rate = 2e6
self.device3 = variable_uhd_device3_0 =
ettus.device3(uhd.device_addr_t( ",".join(('type=e3x0',
"fpga=/home/root/rfnoc/usr/share
/uhd/images/usrp_e310_fpga_RFNOC_sg3.bit")) ))
self.up_rate = up_rate = 12e6
self.gain = gain = 0.5
self.freq = freq = samp_rate/10
self.enable = enable = False
self.ampl_q = ampl_q = 1
self.ampl_i = ampl_i = 1
##################################################
# Blocks
##################################################
self.uhd_rfnoc_streamer_siggen_0 = ettus.rfnoc_generic(
self.device3,
uhd.stream_args( # TX Stream Args
cpu_format="fc32", # TODO: This must be made an option
otw_format="sc16",
args="",
),
uhd.stream_args( # RX Stream Args
cpu_format="fc32", # TODO: This must be made an option
otw_format="sc16",
args="",
),
"SigGen", -1, -1,
)
self.uhd_rfnoc_streamer_siggen_0.set_arg("spp", 364)
self.uhd_rfnoc_streamer_siggen_0.set_arg("frequency",
((2*freq)/samp_rate))
self.uhd_rfnoc_streamer_siggen_0.set_arg("waveform", "SINE_WAVE")
self.uhd_rfnoc_streamer_siggen_0.set_arg("gain", gain)
self.uhd_rfnoc_streamer_siggen_0.set_arg("enable", enable)
self.uhd_rfnoc_streamer_siggen_0.set_arg("amplitude_i",
complex(ampl_i , ampl_q).real)
self.uhd_rfnoc_streamer_siggen_0.set_arg("amplitude_q",
complex(ampl_i , ampl_q).imag)
self.uhd_rfnoc_streamer_radio_0 = ettus.rfnoc_radio(
self.device3,
uhd.stream_args( # Tx Stream Args
cpu_format="fc32",
otw_format="sc16",
args='',
),
uhd.stream_args( # Rx Stream Args
cpu_format="fc32",
otw_format="sc16",
args="", # empty
),
0, -1
)
self.uhd_rfnoc_streamer_radio_0.set_rate(up_rate)
for i in xrange(1):
self.uhd_rfnoc_streamer_radio_0.set_tx_freq(1.0e9, i)
self.uhd_rfnoc_streamer_radio_0.set_tx_gain(20, i)
self.uhd_rfnoc_streamer_radio_0.set_tx_dc_offset(True, i)
self.uhd_rfnoc_streamer_radio_0.set_tx_antenna("TX/RX", 0)
self.uhd_rfnoc_streamer_fifo_0 = ettus.rfnoc_generic(
self.device3,
uhd.stream_args( # TX Stream Args
cpu_format="fc32",
otw_format="sc16",
args="gr_vlen={0},{1}".format(1, "" if 1 == 1 else
"spp={0}".format(1)),
),
uhd.stream_args( # RX Stream Args
cpu_format="fc32",
otw_format="sc16",
args="gr_vlen={0},{1}".format(1, "" if 1 == 1 else
"spp={0}".format(1)),
),
"FIFO", -1, -1,
)
self.uhd_rfnoc_streamer_duc_0 = ettus.rfnoc_generic(
self.device3,
uhd.stream_args( # TX Stream Args
cpu_format="fc32", # TODO: This must be made an option
otw_format="sc16",
args="input_rate={},output_rate={},fullscale={},freq={}".format(samp_rate,
up_rate, 1.0, 0.0),
),
uhd.stream_args( # RX Stream Args
cpu_format="fc32", # TODO: This must be made an option
otw_format="sc16",
args="",
),
"DUC", -1, -1,
)
##################################################
# Connections
##################################################
self.device3.connect(self.uhd_rfnoc_streamer_duc_0.get_block_id(),
0, self.uhd_rfnoc_streamer_fifo_0.get_block_id(), 0)
self.device3.connect(self.uhd_rfnoc_streamer_fifo_0.get_block_id(),
0, self.uhd_rfnoc_streamer_radio_0.get_block_id(), 0)
self.device3.connect(self.uhd_rfnoc_streamer_siggen_0.get_block_id(),
0, self.uhd_rfnoc_streamer_duc_0.get_block_id(), 0)
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.set_freq(self.samp_rate/10)
self.uhd_rfnoc_streamer_siggen_0.set_arg("frequency",
((2*self.freq)/self.samp_rate))
self.uhd_rfnoc_streamer_duc_0.set_arg("input_rate",
float(self.samp_rate))
def get_variable_uhd_device3_0(self):
return self.variable_uhd_device3_0
def set_variable_uhd_device3_0(self, variable_uhd_device3_0):
self.variable_uhd_device3_0 = variable_uhd_device3_0
def get_up_rate(self):
return self.up_rate
def set_up_rate(self, up_rate):
self.up_rate = up_rate
self.uhd_rfnoc_streamer_radio_0.set_rate(self.up_rate)
self.uhd_rfnoc_streamer_duc_0.set_arg("output_rate",
float(self.up_rate))
def get_gain(self):
return self.gain
def set_gain(self, gain):
self.gain = gain
self.uhd_rfnoc_streamer_siggen_0.set_arg("gain", self.gain)
def get_freq(self):
return self.freq
def set_freq(self, freq):
self.freq = freq
self.uhd_rfnoc_streamer_siggen_0.set_arg("frequency",
((2*self.freq)/self.samp_rate))
def get_enable(self):
return self.enable
def set_enable(self, enable):
self.enable = enable
self.uhd_rfnoc_streamer_siggen_0.set_arg("enable", self.enable)
def get_ampl_q(self):
return self.ampl_q
def set_ampl_q(self, ampl_q):
self.ampl_q = ampl_q
self.uhd_rfnoc_streamer_siggen_0.set_arg("amplitude_i",
complex(self.ampl_i , self.ampl_q).real)
self.uhd_rfnoc_streamer_siggen_0.set_arg("amplitude_q",
complex(self.ampl_i , self.ampl_q).imag)
def get_ampl_i(self):
return self.ampl_i
def set_ampl_i(self, ampl_i):
self.ampl_i = ampl_i
self.uhd_rfnoc_streamer_siggen_0.set_arg("amplitude_i",
complex(self.ampl_i , self.ampl_q).real)
self.uhd_rfnoc_streamer_siggen_0.set_arg("amplitude_q",
complex(self.ampl_i , self.ampl_q).imag)
def main(top_block_cls=RFNoc_Sin_Radio_e310, options=None):
tb = top_block_cls()
tb.start()
try:
raw_input('Press Enter to quit: ')
except EOFError:
pass
tb.stop()
tb.wait()
if __name__ == '__main__':
main()
ERROR IF START UP WITH SIGGEN ENABLED
[INFO] [UHDlinux; GNU C++ version 4.9.2; Boost_105700;
UHD_4.0.0.rfnoc-devel-369-g1908672f]
[INFO] [E300] Loading FPGA image: /home/root/rfnoc/usr/share/
uhd/images/usrp_e310_fpga_RFNOC_sg3.bit...
[INFO] [E300] FPGA image loaded
[INFO] [E300] Initializing core control (global registers)...
[INFO] [E300] Performing register loopback test...
[INFO] [E300] Register loopback test passed
[INFO] [RFNOC RADIO] Register loopback test passed
[INFO] [RFNOC RADIO] Register loopback test passed
[INFO] [AD936X] Performing CODEC loopback test...
[INFO] [AD936X] CODEC loopback test passed
[INFO] [AD936X] Performing CODEC loopback test...
[INFO] [AD936X] CODEC loopback test passed
[INFO] [CORES] Performing timer loopback test...
[INFO] [CORES] Timer loopback test passed
DEBUG: output item size: 8
DEBUG: output item size: 8
[INFO] [CORES] Performing timer loopback test...
[ERROR] [RFNOC] [CE_00_Port_10] Block ctrl bad VITA packet: ValueError: Bad
CHDR or packet fragment
[INFO] [RFNOC] 00000174
[INFO] [RFNOC] 02200000
[INFO] [RFNOC] 70D1C4E8
[INFO] [RFNOC] 7E02127D
Traceback (most recent call last):
File "./test_rfnoc_radio_tx.py", line 189, in <module>
main()
File "./test_rfnoc_radio_tx.py", line 176, in main
tb = top_block_cls()
File "./test_rfnoc_radio_tx.py", line 76, in __init__
self.uhd_rfnoc_streamer_radio_0.set_rate(up_rate)
File "/home/root/rfnoc/usr/lib/python2.7/site-packages/ettus/ettus_swig.py",
line 2548, in set_rate
return _ettus_swig.rfnoc_radio_sptr_set_rate(self, *args, **kwargs)
RuntimeError: EnvironmentError: IOError: 0/Radio_0 user_reg_read64()
failed: EnvironmentError: IOError: [0/Radio_0] sr_read64() failed:
EnvironmentError: IOError: Block ctrl (CE_00_Port_10) packet parse error -
EnvironmentError: IOError: Expected SID: 02:10>00:00 Received SID:
00:00>00:00
_______________________________________________
USRP-users mailing list
[email protected]
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com