diff options
| -rw-r--r-- | host/include/uhd/rfnoc/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | host/include/uhd/rfnoc/blocks/fft.xml | 81 | ||||
| -rw-r--r-- | host/include/uhd/rfnoc/blocks/fosphor.xml | 82 | 
3 files changed, 123 insertions, 44 deletions
| diff --git a/host/include/uhd/rfnoc/CMakeLists.txt b/host/include/uhd/rfnoc/CMakeLists.txt index 6ed9fd3c3..44d0490f4 100644 --- a/host/include/uhd/rfnoc/CMakeLists.txt +++ b/host/include/uhd/rfnoc/CMakeLists.txt @@ -28,7 +28,11 @@ IF(ENABLE_RFNOC)          # Block controllers          ddc_block_ctrl.hpp          duc_block_ctrl.hpp +        fir_block_ctrl.hpp +        null_block_ctrl.hpp          radio_ctrl.hpp +        siggen_block_ctrl.hpp +        window_block_ctrl.hpp          DESTINATION ${INCLUDE_DIR}/uhd/rfnoc          COMPONENT headers      ) diff --git a/host/include/uhd/rfnoc/blocks/fft.xml b/host/include/uhd/rfnoc/blocks/fft.xml index 7dd2eff46..af51d0ddb 100644 --- a/host/include/uhd/rfnoc/blocks/fft.xml +++ b/host/include/uhd/rfnoc/blocks/fft.xml @@ -21,6 +21,18 @@        <name>MAGNITUDE_OUT</name>        <address>133</address>      </setreg> +    <setreg> +      <name>FFT_DIRECTION</name> +      <address>134</address> +    </setreg> +    <setreg> +      <name>FFT_SCALING</name> +      <address>135</address> +    </setreg> +    <setreg> +      <name>FFT_SHIFT_CONFIG</name> +      <address>136</address> +    </setreg>      <readback>        <name>RB_FFT_RESET</name>        <address>0</address> @@ -29,26 +41,62 @@        <name>RB_MAGNITUDE_OUT</name>        <address>1</address>      </readback> +    <readback> +      <name>RB_FFT_SIZE_LOG2</name> +      <address>2</address> +    </readback> +    <readback> +      <name>RB_FFT_DIRECTION</name> +      <address>3</address> +    </readback> +    <readback> +      <name>RB_FFT_SCALING</name> +      <address>4</address> +    </readback> +    <readback> +      <name>RB_FFT_SHIFT_CONFIG</name> +      <address>5</address> +    </readback>    </registers>    <!-- Args -->    <args>      <arg> -        <!--This controls only the fft shift part, so remember to also set the ctrl_word-->        <name>spp</name>        <type>int</type>        <value>256</value>        <check>GE($spp, 16) AND LE($spp, 4096) AND IS_PWR_OF_2($spp)</check>        <check_message>FFT size must be in [16, 4096] and a power of two.</check_message> -      <action>SR_WRITE("FFT_SIZE_LOG2", LOG2($spp)) AND SR_WRITE("AXIS_CONFIG_BUS", ADD(873472, LOG2($spp)))</action> +      <action>SR_WRITE("FFT_SIZE_LOG2", LOG2($spp))</action> +    </arg> +    <arg> +      <name>shift</name> +      <type>string</type> +      <value>normal</value> +      <check>EQUAL($shift, "normal") OR EQUAL($shift, "reverse") OR EQUAL($shift, "natural")</check> +      <check_message>FFT direction must be either "normal", "reverse", or "natural".</check_message> +      <action> +          IF(EQUAL($shift, "normal"),  SR_WRITE("FFT_SHIFT_CONFIG", 0)) OR +          IF(EQUAL($shift, "reverse"), SR_WRITE("FFT_SHIFT_CONFIG", 1)) OR +          IF(EQUAL($shift, "natural"), SR_WRITE("FFT_SHIFT_CONFIG", 2)) +      </action>      </arg>      <arg> -      <name>ctrl_word</name> +      <name>direction</name> +      <type>string</type> +      <value>forward</value> +      <check>EQUAL($direction, "forward") OR EQUAL($direction, "reverse")</check> +      <check_message>FFT direction must be either "forward" or "reverse".</check_message> +      <action> +          IF(EQUAL($direction, "forward"),  SR_WRITE("FFT_DIRECTION", 1)) OR +          IF(EQUAL($direction, "reverse"), SR_WRITE("FFT_DIRECTION", 0)) +      </action> +    </arg> +    <arg> +      <name>scaling</name>        <type>int</type> -      <value>873472</value> -      <!--<check>EQUAL($otype, "sc16")</check>--> -      <!--<check_message>Output data type must be sc16.</check_message>--> -      <!--TODO: Check against mag-out value (requires GET() function) --> -      <action>SR_WRITE("AXIS_CONFIG_BUS", ADD($ctrl_word, LOG2($spp)))</action> +      <!--scaling per radix-4 butterfly--> +      <value>1706</value> +      <action>SR_WRITE("FFT_SCALING", $scaling)</action>      </arg>      <arg>        <name>otype</name> @@ -96,21 +144,4 @@        <pkt_size>%vlen</pkt_size>      </source>    </ports> -  <!--<components>--> -    <!--<component>--> -      <!--<key revision="1">nocshell</key>--> -    <!--</component>--> -    <!--<component srbase="0">--> -      <!--[>Will look for a component with this key:<]--> -      <!--<key revision="1">componentname</key>--> -    <!--</component>--> -  <!--</components>--> -  <!--<connection>--> -    <!--<source port="0">nocshell</source>--> -    <!--<sink port="0">componentname</sink>--> -  <!--</connection>--> -  <!--<connection>--> -    <!--<source port="0">componentname</source>--> -    <!--<sink port="0">nocshell</sink>--> -  <!--</connection>-->  </nocblock> diff --git a/host/include/uhd/rfnoc/blocks/fosphor.xml b/host/include/uhd/rfnoc/blocks/fosphor.xml index 762b7c1bd..b1db73192 100644 --- a/host/include/uhd/rfnoc/blocks/fosphor.xml +++ b/host/include/uhd/rfnoc/blocks/fosphor.xml @@ -9,40 +9,52 @@    <!-- Registers -->    <registers>      <setreg> +      <name>ENABLE</name> +      <address>160</address> +    </setreg> +    <setreg> +      <name>CLEAR</name> +      <address>161</address> +    </setreg> +    <setreg> +      <name>RANDOM</name> +      <address>162</address> +    </setreg> +    <setreg>        <name>DECIM</name> -      <address>129</address> +      <address>168</address>      </setreg>      <setreg>        <name>OFFSET</name> -      <address>130</address> +      <address>170</address>      </setreg>      <setreg>        <name>SCALE</name> -      <address>131</address> +      <address>171</address>      </setreg>      <setreg>        <name>TRISE</name> -      <address>132</address> +      <address>172</address>      </setreg>      <setreg>        <name>TDECAY</name> -      <address>133</address> +      <address>173</address>      </setreg>      <setreg>        <name>ALPHA</name> -      <address>134</address> +      <address>174</address>      </setreg>      <setreg>        <name>EPSILON</name> -      <address>135</address> +      <address>175</address>      </setreg>      <setreg> -      <name>RANDOM</name> -      <address>136</address> +      <name>WF_CTRL</name> +      <address>176</address>      </setreg>      <setreg> -      <name>CLEAR</name> -      <address>137</address> +      <name>WF_DECIM</name> +      <address>177</address>      </setreg>    </registers>    <!-- Args --> @@ -53,6 +65,27 @@        <value>1024</value>      </arg>      <arg> +      <name>enable</name> +      <type>int</type> +      <value>3</value> +      <check>GE($enable, 0) AND LE($enable, 3)</check> +      <check_message>"fosphor enable value must be within [0, 3]"</check_message> +      <action>SR_WRITE("ENABLE", $enable)</action> +    </arg> +    <arg> +      <name>clear</name> +      <type>int</type> +      <action>IF(NOT(EQUAL($clear, 0)), SR_WRITE("CLEAR", $clear))</action> +    </arg> +    <arg> +      <name>random</name> +      <type>int</type> +      <value>3</value> +      <check>GE($random, 0) AND LE($random, 3)</check> +      <check_message>"fosphor random mode value must be within [0, 3]"</check_message> +      <action>SR_WRITE("RANDOM", $random)</action> +    </arg> +    <arg>        <name>decim</name>        <type>int</type>        <value>2</value> @@ -109,17 +142,20 @@        <action>SR_WRITE("EPSILON", $epsilon)</action>      </arg>      <arg> -      <name>random</name> +      <name>wf_ctrl</name>        <type>int</type> -      <value>1</value> -      <check>GE($random, 0) AND LE($random, 3)</check> -      <check_message>"fosphor random value must be within [0, 65535]"</check_message> -      <action>SR_WRITE("RANDOM", $random)</action> +      <value>0</value> +      <check>GE($wf_ctrl, 0) AND LE($enable, 255)</check> +      <check_message>"fosphor wf_ctrl value must be within [0, 255]"</check_message> +      <action>SR_WRITE("WF_CTRL", $wf_ctrl)</action>      </arg>      <arg> -      <name>clear</name> +      <name>wf_decim</name>        <type>int</type> -      <action>IF(NOT(EQUAL($clear, 0)), SR_WRITE("CLEAR", $clear))</action> +      <value>8</value> +      <check>GE($wf_decim, 2) AND LE($wf_decim, 256)</check> +      <check_message>fosphor wf_decim constant must be within [2, 256]</check_message> +      <action>SR_WRITE("WF_DECIM", ADD($wf_decim, -2))</action>      </arg>    </args>    <!--All the connections to the outside world are listed in 'ports':--> @@ -131,10 +167,18 @@        <pkt_size>%vlen</pkt_size>      </sink>      <source> -      <name>out</name> +      <name>out_hist</name> +      <type>u8</type> +      <vlen>$spp</vlen> +      <pkt_size>%vlen</pkt_size> +      <port>0</port> +    </source> +    <source> +      <name>out_wf</name>        <type>u8</type>        <vlen>$spp</vlen>        <pkt_size>%vlen</pkt_size> +      <port>1</port>      </source>    </ports>    <!--<components>--> | 
