Difference between revisions of "Arbitrary Waveform Generator"
(→Script-level support: mce_awg) |
|||
Line 1: | Line 1: | ||
For running simple parameter ramps on the MCE using internal commanding, see [[ Ramp Generator ]]. | For running simple parameter ramps on the MCE using internal commanding, see [[ Ramp Generator ]]. | ||
− | * The Arbitrary Waveform Generator permits users to configure a sequence of values which will be written at regular intervals to some MCE register. The AWG is an MCE firmware feature. | + | * The Arbitrary Waveform Generator (AWG) permits users to configure a sequence of values which will be written at regular intervals to some MCE register. The AWG is an MCE firmware feature. |
* A RAM block has been allocated in the Clock Card FPGA to store arbitrary waveform values. | * A RAM block has been allocated in the Clock Card FPGA to store arbitrary waveform values. | ||
* Commands have been implemented to read to and write from the RAM (awg_data, awg_addr). | * Commands have been implemented to read to and write from the RAM (awg_data, awg_addr). | ||
Line 56: | Line 56: | ||
mce_awg start | mce_awg start | ||
− | = MCE | + | = Low-Level MCE Parameters for AWG = |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | If you are writing your own script, the following MCE parameters need to be set: |
− | wb cc ramp_step_period 10 | + | * '''internal_cmd_mode''', '''awg_sequence_length''', '''awg_addr''', '''ramp_step_period''', '''ramp_param_id''', '''ramp_card_addr''',''' ramp_step_data_num''' |
+ | |||
+ | Refer to [http://www.phas.ubc.ca/~mce/mcedocs/software/SC2_ELE_S580_515_mce_command_description.pdf MCE Command Description] for details. | ||
+ | |||
+ | * Example: | ||
+ | wb cc ramp_step_period 10 | ||
wb cc ramp_param_id 153 //LED, for example | wb cc ramp_param_id 153 //LED, for example | ||
wb cc ramp_card_addr 2 //Clock Card, for example | wb cc ramp_card_addr 2 //Clock Card, for example | ||
Line 98: | Line 90: | ||
go cc ret_dat 1 | go cc ret_dat 1 | ||
− | + | *Note 1: The awg_addr register and awg_data are readable when internal-commanding is turned off. | |
− | * | + | *Note 2: You need to set awg_addr to 0 to read the awg_data sequence in full. |
− | |||
− | |||
− | |||
− | * | ||
− | |||
− | |||
− |
Revision as of 14:40, 10 May 2012
For running simple parameter ramps on the MCE using internal commanding, see Ramp Generator .
- The Arbitrary Waveform Generator (AWG) permits users to configure a sequence of values which will be written at regular intervals to some MCE register. The AWG is an MCE firmware feature.
- A RAM block has been allocated in the Clock Card FPGA to store arbitrary waveform values.
- Commands have been implemented to read to and write from the RAM (awg_data, awg_addr).
- A FSM has been implemented that can apply a set number of values (awg_sequence_length) from the RAM block to any internal register (ramp_card_addr, ramp_param_id, ramp_step_data_num) in the MCE at a certain rate (ramp_step_period).
Contents
Script-level support: mce_awg
The script mce_awg, in combination with mce_internal_ramp, may be used to control the AWG features of the MCE.
- mce_awg is used to load the AWG data into CC RAM, and to start and stop the AWG loop.
- mce_internal_ramp is used to set the timing parameters and the target register for the AWG loop.
Example
The following commands will load a triangle wave into a 400 sample buffer, and try to run it with 50 Hz updating (so an 8 Hz repeat frequency) on tes bias[0]:
mce_awg stop mce_internal_ramp setup --target tes bias --count=1 --range 0 0 1 --step-frequency=50. mce_awg setup --triangle 8000 100 --count 400 mce_awg go
Disabling the AWG loop
To disable the AWG, run either of
mce_awg stop mce_internal_ramp stop
Setting timing parameters and target register
The timing parameters and target register are set using mce_internal_ramp. See mce_internal_ramp, or run mce_internal_ramp -h for more details.
mce_internal_ramp --stage=sa_bias --count=8 --offset 8 --step-frequency 100 --range 0 0 1 setup
Note that the --range option is a dummy parameter here, as it is our intention to run an AWG loop, not an internal ramp.
Loading a waveform
The waveform may be taken from an ascii file, read from stdin, or generated automatically. Examples:
From a file:
mce_awg setup --filename my_weird_wave.txt
From stdin:
cat my_weird_wave.txt | mce_awg setup --stdin
(For multi-column ascii data, from either a file or stdin, pass --column=<int> to specify the source column. In both cases, blank lines and lines beginning with a # are ignored.)
A sine wave with a period of 400 steps, amplitude 1000 and offset 20000
mce_awg setup --sine 20000 1000 --count 400
A triangle wave with a period of 8192 (max, default), from 1500 to 2500 and back again:
mce_awg setup --triangle 2000 500
Starting the AWG loop
mce_awg start
Low-Level MCE Parameters for AWG
If you are writing your own script, the following MCE parameters need to be set:
- internal_cmd_mode, awg_sequence_length, awg_addr, ramp_step_period, ramp_param_id, ramp_card_addr, ramp_step_data_num
Refer to MCE Command Description for details.
- Example:
wb cc ramp_step_period 10 wb cc ramp_param_id 153 //LED, for example wb cc ramp_card_addr 2 //Clock Card, for example wb cc ramp_step_data_num 1 wb cc awg_sequence_length 8192 //Currently the maximum size of the AWG RAM block wb cc internal_cmd_mode 0 //Disable internal AWG commands BEFORE writing the data!!! wb cc awg_addr 0 //Set the AWG RAM address to zero before writing new values wb cc awg_data 1 2 1 2 ... //Write AWG values wb cc awg_data 1 2 1 2 ... //Write more AWG values, appended to the end of the first set of values ... wb cc awg_data 1 2 1 2 ... //Write the last few AWG values, which must number as many as specified by awg_sequence_length above wb cc awg_addr 0 //Set the AWG RAM address to zero before reading values rb cc awg_data 1 2 1 2 ... //Read AWG values rb cc awg_data 1 2 1 2 ... ... rb cc awg_data 1 2 1 2 ... wb cc awg_addr 0 //Set the AWG RAM address to zero before changing the internal command mode wb cc internal_cmd_mode 3 //Enable internal AWG commands AFTER writing the data!!! wb cc data_rate 10 wb cc ret_dat_s 1 1000 go cc ret_dat 1
- Note 1: The awg_addr register and awg_data are readable when internal-commanding is turned off.
- Note 2: You need to set awg_addr to 0 to read the awg_data sequence in full.