📄 uart_test.stp
字号:
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 + -