When I designed a full adder using Cadence, the user interface of setting stimulus isn't convenient. This tool provides an easy way to setup a stimulus file.
After uploading the stimulus file to a unix server, using following command to change the format:
tr -d "\r" < dosfile >unixfile
#include <vcl.h>
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
/*
vdd (vdd! 0) dc=5
va1 (a1 0) type=pulse val0=0 val1=0 delay=0 rise=2n fall=2n width=25n period=50n
*/
TStringList *ListT1,*ListT2,*ListT3,*ListT4,*ListT5,*ListT6;
TStringList *ListV1,*ListV2,*ListV3,*ListV4,*ListV5,*ListV6;
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_GenClick(TObject *Sender)
{
Memo_StimulusFile->Text = "";
AnsiString va = " v" + Edit_Input1->Text;
AnsiString vb = " v" + Edit_Input2->Text;
AnsiString vcin = " v" + Edit_Input3->Text;
AnsiString a = " (" + Edit_Input1->Text;
AnsiString b = " (" + Edit_Input2->Text;
AnsiString cin = " " + vcin+ "(" + Edit_Input3->Text + " 0)";
if(PageControl_Function->TabIndex == 0) //pulse
{
Memo_StimulusFile->Text = Memo_StimulusFile->Text + ("vdd (vdd! 0) dc=" + Edit_DC->Text + "\r\n" );
AnsiString para1,para2;
para2 = " " + Edit_DT->Text +
" " + Edit_RT->Text +
" " + Edit_FT->Text +
" " + Edit_PW->Text +
" "+ Edit_Period->Text + "\r\n";
for(int i=1;i<=16;i++)
{
if( i>=1 && i<=4 )
{
if( Edit_Bin_A1->Text.SubString(5-i,1) == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va+IntToStr(i) + a+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2);
else if( Edit_Bin_A1->Text.SubString(5-i,1) == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va+IntToStr(i) + a+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2);
}
if( i>=5 && i<=8 )
{
if( Edit_Bin_A2->Text.SubString(5-(i-4),1) == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va+IntToStr(i) + a+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2);
else if( Edit_Bin_A2->Text.SubString(5- (i-4),1) == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va+IntToStr(i) + a+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2);
}
if( i>=9 && i<=12 )
{
if( Edit_Bin_A3->Text.SubString(5-(i-8),1) == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va+IntToStr(i) + a+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2);
else if( Edit_Bin_A3->Text.SubString(5-(i-8),1) == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va+IntToStr(i) + a+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2);
}
if( i>=13 && i<=16 )
{
if( Edit_Bin_A4->Text.SubString(5-(i-12),1) == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va+IntToStr(i) + a+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2);
else if( Edit_Bin_A4->Text.SubString(5-(i-12),1) == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va+IntToStr(i) + a+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2);
}
}
for(int i=1;i<=16;i++)
{
if( i>=1 && i<=4 )
{
if( Edit_Bin_B1->Text.SubString(5-i,1) == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb+IntToStr(i) + b+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2);
else if( Edit_Bin_B1->Text.SubString(5-i,1) == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb+IntToStr(i) + b+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2);
}
if( i>=5 && i<=8 )
{
if( Edit_Bin_B2->Text.SubString(5-(i-4),1) == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb+IntToStr(i) + b+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2);
else if( Edit_Bin_B2->Text.SubString(5- (i-4),1) == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb+IntToStr(i) + b+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2);
}
if( i>=9 && i<=12 )
{
if( Edit_Bin_B3->Text.SubString(5-(i-8),1) == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb+IntToStr(i) + b+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2);
else if( Edit_Bin_B3->Text.SubString(5-(i-8),1) == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb+IntToStr(i) + b+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2);
}
if( i>=13 && i<=16 )
{
if( Edit_Bin_B4->Text.SubString(5-(i-12),1) == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb+IntToStr(i) + b+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2);
else if( Edit_Bin_B4->Text.SubString(5-(i-12),1) == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb+IntToStr(i) + b+IntToStr(i)+" 0) pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2);
}
}
if( Edit_Cin->Text == 0 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (cin + " pulse "+Edit_V1->Text+ " "+Edit_V1->Text + para2 + "\r\n" );
else if( Edit_Cin->Text == 1 )
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (cin + " pulse "+Edit_V1->Text+ " "+Edit_V2->Text + para2 + "\r\n" );
}
else if(PageControl_Function->TabIndex == 1) //pwl
{
Memo_StimulusFile->Text = Memo_StimulusFile->Text + ("vdd (vdd! 0) dc=" + Edit_PWL_DC->Text + "\r\n" );
AnsiString para1,para2;
para2 = Edit_PLW_T1->Text + " " + Edit_PLW_V1->Text + " " +
Edit_PLW_T2->Text + " " + Edit_PLW_V2->Text + " " +
Edit_PLW_T3->Text + " " + Edit_PLW_V3->Text + " " +
Edit_PLW_T4->Text + " " + Edit_PLW_V4->Text + " " +
Edit_PLW_T5->Text + " " + Edit_PLW_V5->Text + " " +
Edit_PLW_T6->Text + " " + Edit_PLW_V6->Text + "\r\n";
//vA1 A1 0 pwl 0n 0 50n 0 50.0001n 5 100n 5 100.0001n 0 250n 0
for(int i=1;i<=16;i++)
{
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (va + IntToStr(i) + a +IntToStr(i)+ " 0) pwl " +
ListT1->Strings[0] + " " + ListV1->Strings[0] + " " +
ListT2->Strings[0] + " " + ListV2->Strings[0] + " " +
ListT3->Strings[0] + " " + ListV3->Strings[0] + " " +
ListT4->Strings[0] + " " + ListV4->Strings[0] + " " +
ListT5->Strings[0] + " " + ListV5->Strings[0] + " " +
ListT6->Strings[0] + " " + ListV6->Strings[0] + "\r\n");
}
for(int i=1;i<=16;i++)
{
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (vb + IntToStr(i) + b +IntToStr(i)+ " 0) pwl " +
ListT1->Strings[1] + " " + ListV1->Strings[1] + " " +
ListT2->Strings[1] + " " + ListV2->Strings[1] + " " +
ListT3->Strings[1] + " " + ListV3->Strings[1] + " " +
ListT4->Strings[1] + " " + ListV4->Strings[1] + " " +
ListT5->Strings[1] + " " + ListV5->Strings[1] + " " +
ListT6->Strings[1] + " " + ListV6->Strings[1] + "\r\n");
}
Memo_StimulusFile->Text = Memo_StimulusFile->Text + (cin + " pwl " +
ListT1->Strings[2] + " " + ListV1->Strings[2] + " " +
ListT2->Strings[2] + " " + ListV2->Strings[2] + " " +
ListT3->Strings[2] + " " + ListV3->Strings[2] + " " +
ListT4->Strings[2] + " " + ListV4->Strings[2] + " " +
ListT5->Strings[2] + " " + ListV5->Strings[2] + " " +
ListT6->Strings[2] + " " + ListV6->Strings[2] + " " +
Edit_PLW_T7->Text + " " + Edit_PLW_V7->Text + " " +
Edit_PLW_T8->Text + " " + Edit_PLW_V8->Text + " " +
Edit_PLW_T9->Text + " " + Edit_PLW_V9->Text + " " +
Edit_PLW_T10->Text + " " + Edit_PLW_V10->Text + "\r\n");
}
}
//---------------------------------------------------------------------------

