⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart_test.stp

📁 自己实用Verilog编写的UART程序
💻 STP
📖 第 1 页 / 共 4 页
字号:

PROCEDURE FR_INITIALIZE USES GV, DO_INITIALIZE;
ChkSec = 0;
ChkArray = 0;
CALL DO_INITIALIZE;
ENDPROC;

PROCEDURE AW_INITIALIZE USES GV, DO_INITIALIZE;
ArrayROnly = 0;
ChkFrom = 0;
ChkArray = 1;
CALL DO_INITIALIZE;
ENDPROC;

PROCEDURE AR_INITIALIZE USES GV, DO_INITIALIZE;
ArrayROnly = 1;
ChkFrom = 0;
ChkArray = 1;
CALL DO_INITIALIZE;
ENDPROC;

PROCEDURE W_INITIALIZE USES GV, DO_INITIALIZE;
ArrayROnly = 0;
ChkArray = 1;
CALL DO_INITIALIZE;
ENDPROC;

PROCEDURE R_INITIALIZE USES GV, DO_INITIALIZE;
ArrayROnly = 1;
ChkArray = 1;
CALL DO_INITIALIZE;
ENDPROC;

PROCEDURE INITIALIZE USES GV, DO_INITIALIZE;
ArrayROnly = 0;
FromROnly = 0;
ChkFrom = 1;
ChkArray = 1;
CALL DO_INITIALIZE;
ENDPROC;

PROCEDURE SW_INITIALIZE USES GV, DO_INITIALIZE;
ChkFrom = 0;
ChkArray = 0;
CALL DO_INITIALIZE;
ENDPROC;

PROCEDURE DO_OUTPUT_SECURITY USES GV;
PRINT "Security Setting :";
IF ULUFP THEN
    PRINT "FlashROM Write/Erase protected by pass key.";
IF ULUFJ THEN
    PRINT "FlashROM Read protected by pass key.";
IF ULAWE THEN
    PRINT "Array Write/Erase protected by pass key.";
IF ULARD THEN 
    PRINT "Array Verify protected by pass key.";
IF ULUFE THEN
    PRINT "Encrypted FlashROM Programming Enabled.";
IF ULARE THEN
    PRINT "Encrypted FPGA Array Programming Enabled.";
PRINT "=========================================";
 
ENDPROC;

PROCEDURE PROC_PROGRAM_UROW USES GV, BITSTREAM, DO_EXIT, POLL_PROGRAM;

    FOR FRomRowNumber=8 TO 1 STEP -1;
        IRSCAN 8, $9F;
        DRSCAN 3, BOOL(FRomRowNumber);

        IRSCAN 8, $9B;
        DRSTOP IDLE;
        DRSCAN 128, $FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
        DRSTOP DRPAUSE;
        WAIT 5 CYCLES;
        WAIT 10000 USEC;
    NEXT FRomRowNumber;

    IF IsEraseOnly THEN GOTO SKIP_CYC_INCREMENT;

    IF ACT_UROW_CYCLE_COUNT == 1023 THEN GOTO SKIP_CYC_INCREMENT;
        ACT_UROW_CYCLE_COUNT = ACT_UROW_CYCLE_COUNT + 1;
    SKIP_CYC_INCREMENT:

    IF IsEraseOnly THEN 
        UROW[] = $FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
    IF IsEraseOnly && !IsRestoreDesign THEN 
        GOTO SKIP_DESIGN_INFO;

    ' Compose UROW data

    Buff32[31..0] = BOOL(CHECKSUM);
    IF !IsRestoreDesign THEN 
      UROW[127..112] = Buff32[15..0];
    IF IsRestoreDesign THEN 
      UROW[127..112] = sUROW_CHECKSUM[15..0];
      
    IF !IsRestoreDesign THEN 
      UROW[101..32] = ACT_UROW_DESIGN_NAME[69..0];
    IF IsRestoreDesign THEN 
      UROW[101..32] = sUROW_DESIGN_NAME[69..0];

    SKIP_DESIGN_INFO:

    Buff32[31..0] = BOOL(ACT_UROW_CYCLE_COUNT);
    UROW[111..102] = Buff32[9..0];
    UROW[31..29] = ACT_UROW_PROG_METHOD[2..0];
    UROW[28..25] = ACT_UROW_ALGO_VERSION[3..0];
    UROW[16..10] = ACT_UROW_SW_VERSION[6..0];
    UROW[9..6] = ACT_UROW_PROGRAM_SW[3..0];

    IRSCAN 8, $A7;
    DRSTOP IDLE;
    DRSCAN 128, UROW[];
    DRSTOP DRPAUSE;
    WAIT 15 CYCLES;

    CALL POLL_PROGRAM;

    IF PASS == 1 THEN GOTO Program_OK3;

    STATUS = -24;
    PRINT "Failed to program UROW";
    CALL DO_EXIT;

    Program_OK3:

    ' readback and verify UROW
    IRSTOP IDLE;
    IRSCAN 8, $A8;
    IRSTOP IRPAUSE;
    WAIT 3 CYCLES;
    WAIT 264 USEC;
    DRSCAN 128, $00000000000000000000000000000000,COMPARE UROW[], UROW_MASK[], PASS;

    IF PASS THEN GOTO UROW_OK;
    STATUS = -24;
    PRINT "Failed to program UROW";
    CALL DO_EXIT;

    UROW_OK:

ENDPROC;

PROCEDURE PROC_READ_UROW USES GV, BITSTREAM;
    ' read UROW
    IRSTOP IDLE;
    IRSCAN 8, $A8;
    IRSTOP IRPAUSE;
    WAIT 3 CYCLES;
    WAIT 264 USEC;
    DRSCAN 128, $00000000000000000000000000000000, CAPTURE UROW[];

    sUROW_CHECKSUM[15..0] = UROW[127..112];
    sUROW_CYCLE_COUNT = INT (UROW[111..102]);
    sUROW_DESIGN_NAME[69..0] = UROW[101..32];
    sUROW_PROG_METHOD[2..0] = UROW[31..29];
    sUROW_ALGO_VERSION[3..0] = UROW[28..25];
    sUROW_SW_VERSION[6..0] = UROW[16..10];
    sUROW_PROGRAM_SW[3..0] = UROW[9..6];

    ACT_UROW_CYCLE_COUNT = sUROW_CYCLE_COUNT;

ENDPROC;

' JESD71 (Aug 99) specification is ambiguous about ordering of integer
' array initializers.
' Until the specification is clarified, we will allow both orderings

PROCEDURE FIX_INT_ARRAYS USES GV;
IF hex[0]==48 THEN GOTO intok;
FOR i=0 TO 7;
  PUSH hex[i];
  hex[i]=hex[15-i];
  POP hex[15-i];
NEXT i;
intok:
ENDPROC;

PROCEDURE PROC_DISP_CHKSUM_DESIGN USES GV, FIX_INT_ARRAYS;

CALL FIX_INT_ARRAYS;
PRINT "CHECKSUM: ",     CHR$(hex[INT(sUROW_CHECKSUM[15..12])]),
            CHR$(hex[INT(sUROW_CHECKSUM[11..8])]),
            CHR$(hex[INT(sUROW_CHECKSUM[7..4])]),
            CHR$(hex[INT(sUROW_CHECKSUM[3..0])]); 

PRINT "Design Name: ",
            CHR$(INT(sUROW_DESIGN_NAME[63..69])),
            CHR$(INT(sUROW_DESIGN_NAME[56..62])),
            CHR$(INT(sUROW_DESIGN_NAME[49..55])),
            CHR$(INT(sUROW_DESIGN_NAME[42..48])),
            CHR$(INT(sUROW_DESIGN_NAME[35..41])),
            CHR$(INT(sUROW_DESIGN_NAME[28..34])),
            CHR$(INT(sUROW_DESIGN_NAME[21..27])),
            CHR$(INT(sUROW_DESIGN_NAME[14..20])),
            CHR$(INT(sUROW_DESIGN_NAME[7..13])),
            CHR$(INT(sUROW_DESIGN_NAME[0..6]));
ENDPROC;

PROCEDURE PROC_DISPLAY_UROW USES GV, PROC_DISP_CHKSUM_DESIGN;

PRINT "User information : ";
CALL PROC_DISP_CHKSUM_DESIGN;

IF FLAG_DISPLAY_CYC == 1 THEN PRINT "CYCLE COUNT: ",     sUROW_CYCLE_COUNT;

INTEGER tmpInt = INT(sUROW_PROG_METHOD[]);

INTEGER tmpInt3 = 0;
INTEGER tmpInt4 = 0;
INTEGER tmpInt5 = 0;
IF tmpInt == 0 THEN GOTO PRINT1532;
IF tmpInt == 1 THEN GOTO PRINT_STAPL;
IF tmpInt == 2 THEN GOTO PRINT_DIRECT_C;
PRINT "Programming Method: UNKNOWN";
GOTO PRINT_PROG_METHOD_DONE;

PRINT1532:
PRINT "Programming Method: IEEE1532";
GOTO PRINT_PROG_METHOD_DONE;

PRINT_STAPL:
PRINT "Programming Method: STAPL";
GOTO PRINT_PROG_METHOD_DONE;

PRINT_DIRECT_C:
PRINT "Programming Method: DirectC";

PRINT_PROG_METHOD_DONE:

PRINT "Algorithm Version: ", INT(sUROW_ALGO_VERSION[3..0]);

tmpInt = INT(sUROW_PROGRAM_SW[]);
IF tmpInt == 0 THEN GOTO PRINT_G3_PROG_1;
IF tmpInt == 1 THEN GOTO PRINT_G3_PROG_2;
IF tmpInt == 2 THEN GOTO PRINT_G3_PROG_3;

IF tmpInt == 3 THEN GOTO PRINT_BP_SCULPTOR_1;
IF tmpInt == 4 THEN GOTO PRINT_BP_SCULPTOR_2;

IF tmpInt == 5 THEN GOTO PRINT_DIRECT_C_PROG;
IF tmpInt == 6 THEN GOTO PRINT_ACTEL_JAM;

PRINT "Programmer: UNKNOWN";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_G3_PROG_1:
PRINT "Programmer: FlashPro";
GOTO PRINT_FLASHPRO_VER;

PRINT_G3_PROG_2:
PRINT "Programmer: FlashPro Lite";
GOTO PRINT_FLASHPRO_VER;

PRINT_G3_PROG_3:
PRINT "Programmer: FlashPro3";
GOTO PRINT_FLASHPRO_VER;

PRINT_FLASHPRO_VER:
tmpInt = INT(sUROW_SW_VERSION[]);
IF tmpInt == 127 THEN GOTO PRINT_UNKNOWN_SW_VERSION;
IF tmpInt == 0 THEN GOTO PRINT_FLASHPRO_33;
IF tmpInt == 1 THEN GOTO PRINT_FLASHPRO_34;
IF tmpInt == 2 THEN GOTO PRINT_FLASHPRO_40;
IF tmpInt == 3 THEN GOTO PRINT_FLASHPRO_41;
IF tmpInt == 4 THEN GOTO PRINT_FLASHPRO_42;
IF tmpInt == 5 THEN GOTO PRINT_FLASHPRO_50;
IF tmpInt == 6 THEN GOTO PRINT_FLASHPRO_51;
IF tmpInt == 7 THEN GOTO PRINT_FLASHPRO_60;

PRINT "Software: FlashPro version greater than v6.0.";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_UNKNOWN_SW_VERSION:
PRINT "Software: FlashPro vX.X";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_FLASHPRO_60:
PRINT "Software: FlashPro v6.0";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_FLASHPRO_51:
PRINT "Software: FlashPro v5.1";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_FLASHPRO_50:
PRINT "Software: FlashPro v5.0";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_FLASHPRO_42:
PRINT "Software: FlashPro v4.2";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_FLASHPRO_41:
PRINT "Software: FlashPro v4.1";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_FLASHPRO_40:
PRINT "Software: FlashPro v4.0";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_FLASHPRO_34:
PRINT "Software: FlashPro v3.4";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_FLASHPRO_33:
PRINT "Software: FlashPro v3.3";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_BP_SCULPTOR_1:
PRINT "Programmer: SiliconSculptor II";
tmpInt = INT(sUROW_SW_VERSION[]);
IF tmpInt == 127 THEN GOTO PRINT_UNKNOWN_SW_VERSION;

tmpInt3 = INT(sUROW_SW_VERSION[6..5]) + SCULPTOR_MAJOR_BASE;
tmpInt4 = INT(sUROW_SW_VERSION[4..1]) + SCULPTOR_MINOR_BASE;
tmpInt5 = 0;
IF sUROW_SW_VERSION[0] THEN 
    tmpInt5 = 1;

PRINT "Software: Sculptor Win v", tmpInt3, ".", tmpInt4, ".", tmpInt5;
GOTO PRINT_PROGRAMMER_DONE;

PRINT_BP_SCULPTOR_2:
PRINT "Programmer: BP Programmer";
tmpInt = INT(sUROW_SW_VERSION[]);
IF tmpInt == 127 THEN GOTO PRINT_UNKNOWN_SW_VERSION;

tmpInt3 = INT(sUROW_SW_VERSION[6..5]) + SCULPTOR_MAJOR_BASE;
tmpInt4 = INT(sUROW_SW_VERSION[4..1]) + SCULPTOR_MINOR_BASE;
tmpInt5 = 0;
IF sUROW_SW_VERSION[0] THEN 
    tmpInt5 = 1;

PRINT "Software: BP Win v", tmpInt3, ".", tmpInt4, ".", tmpInt5;

GOTO PRINT_PROGRAMMER_DONE;

PRINT_DIRECT_C_PROG:
PRINT "Programmer: DirectC";
GOTO PRINT_PROGRAMMER_DONE;

PRINT_ACTEL_JAM:
PRINT "Programmer: Actel JAM Player.";

PRINT_PROGRAMMER_DONE:
PRINT "=========================================";

ENDPROC;

PROCEDURE PROC_READ_IDCODE USES GV;
IRSCAN 8,$0F;
DRSCAN 32, $00000000,CAPTURE ID[];
EXPORT "IDCODE",ID[];
ENDPROC;

PROCEDURE DO_READ_IDCODE USES PROC_READ_IDCODE;
WAIT RESET, 5 CYCLES;
CALL PROC_READ_IDCODE;
EXIT 0;
ENDPROC;

PROCEDURE DO_QUERY_SECURITY USES DO_READ_SECURITY, DO_OUTPUT_SECURITY;
CALL DO_READ_SECURITY;
CALL DO_OUTPUT_SECURITY;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -