Jump to content

Specific Process Knowledge/Lithography/EBeamLithography/Dose Testing: Difference between revisions

Thope (talk | contribs)
Thope (talk | contribs)
No edit summary
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''Feedback to this page''': '''[mailto:labadviser@nanolab.dtu.dk?Subject=Feed%20back%20from%20page%20http://labadviser.nanolab.dtu.dk/index.php/Specific_Process_Knowledge/Lithography/EBeamLithography/Dose Testing click here]'''
Content and illustration by Thomas Pedersen, DTU Nanolab unless otherwise noted.
=Introduction=
=Introduction=
In E-beam lithography it is often necesarry to do a dose test in order to get the required result. In a dose test one will expose critical parts of a pattern with various doses and determine the best dose by SEM analysis of the final pattern. There are several ways to set up a dose test array on the JEOL system, in this section we will describe four different setups, each with their own benefits and drawbacks.
In E-beam lithography it is often necesarry to do a dose test in order to get the required result. In a dose test one will expose critical parts of a pattern with various doses and determine the best dose by SEM analysis of the final pattern. There are several ways to set up a dose test array on the JEOL system, in this section we will describe four different setups, each with their own benefits and drawbacks.
Line 147: Line 151:
|-  
|-  
| colspan="1" style="text-align: center;|
| colspan="1" style="text-align: center;|
Example frome ChipPlace definine a 10 x 2 element dose matrix with relative doses from 1 to 2, ready for export to V30. Image: Thomas Pedersen.
Example frome ChipPlace definine a 10 x 2 element dose matrix with relative doses from 1 to 2, ready for export to V30.  
|}
|}


=Scripted expansion of a PEC modulation table=
=Scripted expansion of a PEC modulation table=
The last method is basically the same as the second method above but with support for PEC modulation. This is achieved by expanding the dose modulation table into a set of tables, one for each dose of the dose test. Each modulation table is a scaled version of the initial modulation table, scaled simply by the dose test scaling between each dose. The scaling is done through a Matlab script which can be found here. Since Labadviser does not allow upload of .m files, simply copy the script from below and save as a .m file.
The last method is basically the same as the second method above but with support for PEC modulation. This is achieved by expanding the dose modulation table into a set of tables, one for each dose of the dose test. Each modulation table is a scaled version of the initial modulation table, scaled simply by the dose test scaling between each dose. The scaling is done through a Matlab script which can be found below. Since Labadviser does not allow upload of .m files, simply copy the script from below and save as a .m file.
 
Benefits:
*Supports PEC modulation
*Faster execution since it is a single SDF sequence
*Works with large V30 files
 
Drawbacks:
*A bit tricky for first time use
 


{| class = "collapsible" width=65% style = "border-radius: 10px; border: 1px solid #CE002D;"
{| class = "collapsible" width=65% style = "border-radius: 10px; border: 1px solid #CE002D;"
Line 158: Line 171:
|
|
<pre>
<pre>
clearvars
%Modulation table modding for dose test of PEC'ed V30's, see Labadviser for further information
%Modulation table modding for dose test of PEC'ed V30's, see Labadviser for further information
%https://labadviser.nanolab.dtu.dk/index.php?title=Specific_Process_Knowledge/Lithography/EBeamLithography/Dose_Testing
%https://labadviser.nanolab.dtu.dk/index.php?title=Specific_Process_Knowledge/Lithography/EBeamLithography/Dose_Testing
%THOPE 2023-11-06
%THOPE 2023-11-13
clearvars


%Input variables for modulation table
%Input variables for modulation table
inputJDI = 'C:\Users\thope\Desktop\MODMOD\acmossingle.jdi';
inputJDI = 'C:\Users\thope\Desktop\thope231113\withcross.jdi';
outputJDI = 'acmosexpanded.jdi';
outputJDI = 'C:\Users\thope\Desktop\thope231113\thope231113.jdi';
m = 9; %number of doses
m = 9; %number of doses
modulation = 10; %modulation between instances in percent, must be positive
modulation = 5; %modulation between instances in percent, must be positive
 
%shot time calculation
Base = 220; %Base dose, only for indication, not used for modulation
I = 2e-9; %beam current
pitch = 12; %steps of 0.25 nm
dp = pitch*0.25*1e-9; %beam step in m
 
%Base dose calculation
Doses = (0:1:m-1);
Doses = (Doses*modulation/100+1)*Base;


%Read file
%Read file
Line 192: Line 215:
     [class(i),D(1,i)] = readMOD(A,k1(i),k2(i));
     [class(i),D(1,i)] = readMOD(A,k1(i),k2(i));
end
end


%Calculate tables
%Calculate tables
D(1,:) = 1 + D(1,:)./100 ; %convert from MOD to percent
D(1,:) = 1 + D(1,:)./100 ; %convert from MOD to percent
for i = 2:n
for i = 2:m
     D(i,:) = D(1,:)*(1+modulation*(i-1)/100);
     D(i,:) = D(1,:)*(1+modulation*(i-1)/100);
end
end
D = round(D,3); %round to 1 decimal
D = round(D,3); %round to 1 decimal
for i = 1:n
for i = 1:m
     D(i,:) = 100*(D(i,:)-1); %convert to MOD from percent
     D(i,:) = 100*(D(i,:)-1); %convert to MOD from percent
end
end


%Write modulated tables to file
%Write modulated tables to file
Line 223: Line 248:
end
end
fclose(fileID);
fclose(fileID);
%Modulation table range
range = zeros(m,2);
for i = 1:m
    range(i,1) = D(i,1); %minimum dose
    range(i,2) = D(i,end); %maximum dose
end
range = (range/100+1)*Base;
%Frequency range
F = zeros(m,2);
for i = 1:m
    F(i,1) = I./(range(i,1)*dp^2); %minimum dose
    F(i,2) = I./(range(i,2)*dp^2); %maximum dose
end
F = F/1e4;
%Display output
disp(newline)
disp('Modulation table | Base dose [µC/cm2] | Modulation range [µC/cm2] | Frequency range [MHz]')
for i = 1:m
    disp(['MOD' num2str(i) ' | ' num2str(Doses(i)) ' | ' num2str(range(i,1),'%.0f')...
        ' - ' num2str(range(i,2),'%.0f') ' | ' num2str(F(i,1),'%.0f') ' - ' num2str(F(i,2),'%.0f')])
end


function [a,b] = readMOD(str,k1,k2)
function [a,b] = readMOD(str,k1,k2)
Line 240: Line 289:


The output is a single JDI file containing all modulation tables named '''MODx''', where x is a running number from 1 to '''m'''. The array and reference to each modulation table can then be set up in the JDF file as seen below. It is convenient to use the include command '''@''' to reference the JDI file itself rather than copy-paste the tables into the JDF.
The output is a single JDI file containing all modulation tables named '''MODx''', where x is a running number from 1 to '''m'''. The array and reference to each modulation table can then be set up in the JDF file as seen below. It is convenient to use the include command '''@''' to reference the JDI file itself rather than copy-paste the tables into the JDF.


{| class = "collapsible" width=65% style = "border-radius: 10px; border: 1px solid #CE002D;"
{| class = "collapsible" width=65% style = "border-radius: 10px; border: 1px solid #CE002D;"
Line 268: Line 318:
|-
|-
|}
|}


{| class = "collapsible" width=65% style = "border-radius: 10px; border: 1px solid #CE002D;"
{| class = "collapsible" width=65% style = "border-radius: 10px; border: 1px solid #CE002D;"