ument as an object specifying the virtual software application architecture (VISA) address (e.g. Ke24xx instr = new Ke24xx (“GPIB0::15::INSTR”, false, true)). The two bool values, following the VISA are respectively the option which resets the equipment and the instrument handling to start a communication session. More information about the parameters requested in the method can be found on the instrument driver manual. When the object instrument is declared into the software, all the front-panel function can be called from the main class Ke24xx. The following lines represent the commands used to set the equipment in the voltage source mode:

Ke24xx instr = new Ke24xx(“GPIB0::15::INSTR”, false, true);

instr.reset();//reset the equipment

instr.ConfigureSourceMode(Ke24xxConstants.SourceVoltageFunction, Ke24xxConstants.SourceFixedMode, Ke24xxConstants.SourceDcShape, Ke24xxConstants.AutoRange);

In this mode, the equipment works as a voltage source and is ready to apply a voltage and measure a current in a specified current range or in “Auto Range” mode. The voltage (V, double) can be applied to the sample after enabling the digital output:


instr.ConfigureSourceLevel(Ke24xxConstants.SourceVoltageFunction, V, 0);

These functions can be included in a generic loop which increases the applied voltage in the selected range by a specific step and time. More source code examples can be found into the supplementary information (SI).

2.3. WORM and RRAMs Measurement Methods

As discussed in the introduction, the first characteristic to be investigated is the resistance-change transition to identify our device as a WORM or a RRAM (if the transition is reversible). So, the first measurement should be a staircase CV or a sweep between two defined voltages. The following Figure 2 shows an example of a resistance transition in a real WORM sample. In Figure 2(a) one can see the current vs voltage response of a virgin device, showing a shape characteristic of a capacitor. When the voltage is sweep between 1.0 and −1.0 V no sharp transitions are visible in the graph. This confirms that the device is stable under the applied bias, thus the reading voltage can be chosen into the selected range. To induce the resistance transition (writing process), we have extended the scanning range from −6.0 to 6.0 V, as shown in Figure 2(b).

(a) (b) (c)

Figure 2. Cyclic voltammetry of a typical WORM based on PMMA/CuS/AuBi blend. The scans were performed from 0.0 V up to the voltage limits defined for the experiment: ±1.0 V for the reading measurements (a and c) and ±6.0 for the writing operation (b). First, the virgin (VGN) device was characterized in the reading range showing a capacitive behavior (a). When the voltage sweep is extended (b) a sharp increase in the flowing current sets the device in its ON state, which results stable over the rest of the scan.

In the region between 3.0 and 4.8 V, the current shows a higher noise as well as a sharp increase due to the formation of the short-circuit which brings the device from it OFF state to the ON state. In binary terms this transition can be understood as the writing of the bit “1” replacing the bit “0”. Once the device is set to its ON state which shown a current ratio (ON/OFF) of about 103 considering the current of the virgin (VGN) device (Figure 2(c)). After the wiring operation, the device shows the typical CV response of a resistor without any capacitive effect. This can be due to the breaking of the insulating layer.

From CV characterization it is possible to identify the resistance switching behavior of the device under investigation. From this graph it is possible to identify the voltages in which such transition occurs. This is a key point of our characterization method. Notice that, for direct informatics applications, the switching operations are performed by pulsed voltages (square wave). For this reason, the next measurement module was designed to perform voltage pulses in a specific voltage range, to determine the switching voltage, the pulse duration and the minimum number of pulses to switch the device ON [18] [19] . Figure 3 represents a schematic view of the pulsed voltage measurement module (PVMM) proposed in this software. To perform this measurement, the user defines some fundamental parameters such as: the limit voltages (V1 and V2); the number of points in which the range will be split; the reading voltage (VR) in which the sample is read; the number of readings (NR), the number of pulses (N), pulses duration (T1) and the delay between each pulse (T2).

Figure 3. Flowchart representation of the pulse voltage measurement module. This function applies square voltage pulses to the sample. The pulse voltage is increased by a fixed value and is ranged into a specific voltage range. After the application of the pulses, the software read the current (C) value and check if it is higher than a fixed current value which identifies the ON state.

The voltage (intensity) of the square pulse is ranged between the values V1 and V2. Then, the software performs a current measurement and acquires this value storing it into a variable (C). This value is then compared with the expected current’s value of the ON state of the device (CON­). If the read value C is lower than CON the voltage is increased and a new cycle is started; else the loop is stopped and the last applied voltage is defined as the ON switching voltage. Also, this function allows optimizing the number of pulses and the duration. The core of this function, in a typical C# namespace, should consist in a loop (for) defining the number (i) of repeated iterations corresponding to the desired number of voltage points. In each cycle the software applies 0.0 V during a certain delay time, then applies the voltage during the pulse duration time and finally applies 0.0 V again. Notice that, if one needs to apply multiple pulses, the function must be structured as a loop (voltage points) of loops (multiple pulses). At the end of the pulses, the reading voltage is set, and the current is sampled, and its average value is plotted in a graph (current vs pulse voltage). The example code can be found in Appendix A. After the measurement of the current, the variable corresponding to the applied voltage is increased by a fixed value and the cycle is repeated. The results of a typical switching experiment are reported in Figure 4. In this example, the pulse intensity was investigated between 0 and 9 volts using two different pulse duration times: 30 and 1000 ms.

In Figure 4(a), square dots represent the average current values (n = 10) measured after the application of 1 pulse with an intensity ranging from 0.0 to 9.0 V with a duration of 30 ms. As shown by the plot, these experimental condition does not induce the OFF to ON transition. In fact, in the whole voltage range, the current remains below CON. Notice that it should be useful to introduce a tolerance threshold instead of precisely define CON as a strict barrier between the OFF and the ON state (gray and green regions). In the successive measurement, the dwell time of the pulse was extended to 300 ms (Figure 4(b)) and, after 4.0 V, the device shown the irreversible switch transition maintaining the ON state at higher voltages.

3. Conclusion

We proposed a software structure based on .NET framework, C# language and freeware resources for the characterization of resistance switch devices. In this work we have shown the main functions of the original driver of keithley measurement instruments (Ke24xx) but the same concepts could be traduced to work with other equivalent equipment. Besides the illustration of the main software procedure we have proposed a measurement routine for the characterization of WORM devices including both current vs voltage curves and square voltage pulse characterization. Our initial results demonstrate that the use of expensive software suites for visual virtual instrument programming could not be compulsory for the realization of an efficient measurement program. A basic knowledge of C# and Visual Studio allows the user to directly perform a link


Figure 4. Square pulses measurements performed on WORM samples using the PVM module of the software. The current is sampled ten times after the application of the square pulse. Different dwell time was studied: 30 ms (a) and 300 ms (b). Notice that, when the dwell time is extended up to 300 ms the device is set in its ON state between 3.5 and 4.0 V.

between the software and the equipment using the original instrument driver as an external reference.


This work was supported by FAPESP (proc: 2013/07396-7); PNPD/CAPES, CAPES 024/2012 Pro-equipamentos; Department of Chemistry, University of Rome Sapienza and Project “TornoSubito 2017” supported by Lazio Region of Italy, with FSE (FondoSocialeEuropeo, ID code: 9266). In memory of Congiu Massimo (1966-2018).

Author Contributions

1) Dr. Mirko Congiu: Software development, debugging and testing on real WORMs samples.

2) Dr. Miguel Henrique Boratto and Dr. Paride Pica: Data analysis and sample preparation.

3) Dr. Prof. Carlos Frederico De Oliveira Graeff: Coordination of the research group activities, discussion of the obtained results.

All the authors contributed to the writing of the paper.

Appendix A

The following C# code belongs to the pulse voltage measurement module of the main program (Async Void). Notice that just the core functions are reported without mentioning other code lines such as the variables declaration. The core consists of a loop in which the software applies the square wave pulse(s) and performs a current measurement and increase the variable cVolt which represents the voltage to be applied in the next cycle. The initial value of cVolt will be equal to the lower limit of the selected voltage range and will be increased (cVolt += step) up to the upper limit of the voltage range. The variables onDelay and onDuration represents respectively the delay before the voltage application and the pulse duration while the variable millis represents the overall experiment time, which could be also substituted by a timer object (System.Timers.Timer). The measurement of the current is performed by performing 10 measurements to obtain an average value. For this reason, at the beginning of the cycle the variable “currents” is declared as 1D array. To perform the measurement, the Read() method can be called specifying which value is requested (Ke24xxConstants.ReadCurrent), an out integer (numread) to count the number of the acquisition (in case of multiple read) and a 1D array in which the data will be dumped (readBuffer). The data are plotted directly into a chart object (chart 1).

for(inti = 0; i<= numberOfVoltagePoints; i++)//loop of voltage points


double[] currents=newdouble[10];

//apply 0 volts

instr.ConfigureSourceLevel(Ke24xxConstants.SourceVoltageFunction, 0, 0);

for (inti = 0; i


awaitTask.Delay(onDelay); //delay before the pulse

millis += onDelay; //increase the time count variable instr.ConfigureSourceLevel(Ke24xxConstants.SourceVoltageFunction, cVolt, 0);


millis += onDuration;

//apply 0 volts againinstr.ConfigureSourceLevel(Ke24xxConstants.SourceVoltageFunction, 0, 0);


//reading, 10 measurements of current

for (inti = 0; i< 10; i++)


double[] readBuffer = newdouble[20];

instr.ConfigureSourceLevel(Ke24xxConstants.SourceVoltageFunction, readVolt, 0);


instr.Read(Ke24xxConstants.ReadCurrent, outnumread,readBuffer);

awaitTask.Delay(10); instr.ConfigureSourceLevel(Ke24xxConstants.SourceVoltageFunction, 0, 0);

chart1.Series[0].Points.AddXY(millis, readBuffer[0]);

chart1.Series[2].Points.AddXY(millis, cVolt);

currents[i] = readBuffer[0];//dump the value

millis += 100


//calculate the average value of the current

doubleaverage = (currents.Sum() / currents.Count());

//increase the voltage for the next pulse(s)

cVolt += step;


Figure A1. Screenshot of the software developed using the code functions presented in this work during a routine debugging operation in Visual Studio 2017. The graphical user interface (GUI) allows the user to input all of the necessary parameters for the experiment.

Cite this paper
Congiu, M. , Boratto, M. , Pica, P. and Graeff, C. (2018) Development of a Measurement Software for the Characterization of WORM Devices for Novel Memory Storage Applications. Journal of Computer and Communications, 6, 1-13. doi: 10.4236/jcc.2018.69001.

[1]   Tang, S., Tesler, F., Marlasca, F.G., Levy, P., Dobrosavljevic, V. and Rozenberg, M. (2016) Shock Waves and Commutation Speed of Memristors. Physical Review X, 6, Article ID: 011028.

[2]   Chua, L. (1971) Memristor—The Missing Circuit Element. IEEE Transactions on Circuit Theory, 18, 507-519.

[3]   Strukov, D.B., Snider, G.S., Stewart, D.R. and Williams, R.S. (2008) The Missing Memristor Found. Nature, 453, 80-83.

[4]   Waser, R. and Aono, M. (2007) Nanoionics-Based Resistive Switching Memories. Nature Materials, 6, 833-840.

[5]   Yang, Y., Choi, S. and Lu, W. (2013) Oxide Heterostructure Resistive Memory. Nano Letters, 13, 2908-2915.

[6]   Borghetti, J., Snider, G.S., Kuekes, P.J., Yang, J.J., Stewart, D.R. and Williams, R.S. (2010) “Memristive” Switches Enable “Stateful” Logic Operations via Material Implication. Nature, 464, 873-876.

[7]   Strukov, D.B. and Likharev, K.K. (2005) CMOL FPGA: A Reconfigurable Architecture for Hybrid Digital Circuits with Two-Terminal Nanodevices. Nanotechnology, 16, 888-900.

[8]   Ohno, T., Hasegawa, T., Tsuruoka, T., Terabe, K., Gimzewski, J.K. and Aono, M. (2011) Short-Term Plasticity and Long-Term Potentiation Mimicked in Single Inorganic Synapses. Nature Materials, 10, 591-595.

[9]   Pickett, M.D., Medeiros-Ribeiro, G. and Williams, R.S. (2013) A Scalable Neuristor Built with Mott Memristors. Nature Materials, 12, 114-117.

[10]   Driscoll, T., Quinn, J., Klein, S., et al. (2010) Memristive Adaptive Filters. Applied Physics Letters, 97, Article ID: 093502.

[11]   Moller, S., Perlov, C., Jackson, W., Taussig, C. and Forrest, S.R. (2003) A Polymer/Semiconductor Write-Once Read-Many-Times Memory. Nature, 426, 166-169.

[12]   Fang, J., Wang, Q., Yue, X., Wang, G. and Jiang, Z. (2015) A WORM Type Polymer Electrical Memory Based on Polyethersulfone with Carbazole Derivatives. High Performance Polymers, 28, 1183-1191.

[13]   Smith, S. and Forrest, S.R. (2004) A Low Switching Voltage Organic-on-Inorganic Heterojunction Memory Element Utilizing a Conductive Polymer Fuse on a Doped Silicon Substrate. Applied Physics Letters, 84, 5019.

[14]   Congiu, M., Albano, L.G.S., Nunes-Neto, O. and Graeff, C.F.O. (2016) Printable ReRAM Devices Based on the Non-Stoichiometric Junction CuS/Cu2−x S. Electronics Letters, 52, 1871.

[15]   Fontana, L., Bassetti, M., Battocchio, C., Venditti, I. and Fratoddi, I. (2017) Synthesis of Gold and Silver Nanoparticles Functionalized with Organic Dithiols. Colloids Colloids and Surfaces A: Physicochemical and Engineering Aspects, 532, 282-289.

[16]   Christie, J.H. and Lingane, P.J. (1965) Theory of Staircase Voltammetry. Journal of Electroanalytical Chemistry (1959), 10, 176-182.

[17]   Hai, B., Tolmachev, Y.V., Loparo, K.A., Zanelli, C. and Scherson, D. (2011) Cyclic versus Staircase Voltammetry in Electrocatalysis: Theoretical Aspects. Journal of The Electrochemical Society, 158, F15-F19.

[18]   Liu, C.Y., Shih, Y.R. and Huang, S.J. (2013) Unipolar Resistive Switching in a Transparent ITO/SiOx/ITO Sandwich Fabricated at Room Temperature. Solid State Communications, 159, 13-17.

[19]   Whitcher, T.J., Woon, K.L., Wong, W.S., et al. (2016) Interfacial Behavior of Resistive Switching in ITO-PVK-Al WORM Memory Devices. Journal of Physics D: Applied Physics, 49, Article ID: 075104.