Stimulus File Generator for Cadence

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

stim_1 stim_2

 

#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");
    }
}
//---------------------------------------------------------------------------

 

Leave a Reply