From 42aeda6c3bd0a033bec62db5e878514d1870ddab Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sun, 7 Jan 2024 14:48:38 +0800 Subject: [PATCH] update --- README.md | 8 + ipcore/DebugCoreIst/.last_generated | 2 +- ipcore/DebugCoreIst/DebugCoreIst.idf | 1270 ++++++++++++++-------------- ipcore/DebugCoreIst/DebugCoreIst.v | 18 +- ipcore/DebugCoreIst/DebugCoreIst_tmpl.v | 3 +- ipcore/DebugCoreIst/DebugCoreIst_tmpl.vhdl | 6 +- ipcore/DebugCoreIst/generate.log | 2 +- ipcore/SPLL/.last_generated | 2 + ipcore/SPLL/SPLL.idf | 663 +++++++++++++++ ipcore/SPLL/SPLL.v | 299 +++++++ ipcore/SPLL/SPLL_tb.v | 254 ++++++ ipcore/SPLL/SPLL_tmpl.v | 15 + ipcore/SPLL/SPLL_tmpl.vhdl | 27 + ipcore/SPLL/generate.log | 17 + led_test.fdc | 18 + led_test.pds | 76 +- source/src/spi_reg_reader.v | 52 +- source/src/top.v | 58 +- source/src/zutils/zutils_register.v | 7 +- source/src/zutils/zutils_signal_filter.v | 33 + 20 files changed, 2113 insertions(+), 717 deletions(-) create mode 100644 ipcore/SPLL/.last_generated create mode 100644 ipcore/SPLL/SPLL.idf create mode 100644 ipcore/SPLL/SPLL.v create mode 100644 ipcore/SPLL/SPLL_tb.v create mode 100644 ipcore/SPLL/SPLL_tmpl.v create mode 100644 ipcore/SPLL/SPLL_tmpl.vhdl create mode 100644 ipcore/SPLL/generate.log create mode 100644 source/src/zutils/zutils_signal_filter.v diff --git a/README.md b/README.md index 60531db..719b432 100644 --- a/README.md +++ b/README.md @@ -14,4 +14,12 @@ define_attribute {p:sys_clk} {PAP_IO_STANDARD} {LVTTL33} +``` + +``` +SPI2_CS 48 R2_13_N V14 +SPI2_MOSI 50 R2_13_P U14 +SPI2_SCK 54 R2_2_N V13 +SPI2_MISO 56 R2_2_P U13 + ``` \ No newline at end of file diff --git a/ipcore/DebugCoreIst/.last_generated b/ipcore/DebugCoreIst/.last_generated index 189c154..b09bf16 100644 --- a/ipcore/DebugCoreIst/.last_generated +++ b/ipcore/DebugCoreIst/.last_generated @@ -1,2 +1,2 @@ -2024-01-06 22:31 +2024-01-07 14:18 rev_1 \ No newline at end of file diff --git a/ipcore/DebugCoreIst/DebugCoreIst.idf b/ipcore/DebugCoreIst/DebugCoreIst.idf index 7b5d55e..f370c1b 100644 --- a/ipcore/DebugCoreIst/DebugCoreIst.idf +++ b/ipcore/DebugCoreIst/DebugCoreIst.idf @@ -15,807 +15,807 @@ - TU8_CNT_MODE - 00 + c_Port1_EN + false - EN_WINDOWS + TRIG_MU_EN4 false - V14_RADIX - Bin + TRIG1_EXCLUDE + false - TRIG8_MATCH_UNIT - 1 + STOR_MU_EN11 + false - TRIG9_EXCLUDE + TRIG_MU_NEG11 false - VALUE9_1 - 0 + TRIG10_MATCH_UNIT + 1 - TRIG_MU_NEG8 + TRIG_MU_EN11 false - V7_2RADIX - Bin - - - VALUE2 - 0 + TU14_CNT_VALUE + 1 - INIT_M11_CONFIG - 0 + TU13_FUNCTION + 000 - V9_1RADIX - Bin + TRIG12_PORT_WIDTH + 8 - TRIG_MU_EN12 - false + INIT_M14_CONFIG + 0 - TRIG9_CNT_WIDTH + VALUE6 0 - TU4_CNT_MODE + TU14_CNT_MODE 00 - STOR_MU_EN11 + TRIG_MU_NEG15 false - VALUE6 - 0 + TRIG12_EXCLUDE + false - INIT_M13_CONFIG - 0 + TU11_FUNCTION + 000 - TRIG10_PORT_WIDTH - 8 + TRIG6_MATCH_UNIT + 1 - TRIG_MU_EN13 + STOR_MU_EN5 false - V12_RADIX - Bin - - - TRIG_SEQ_SEL11 - 0 + TU15_CNT_MODE + 00 - VALUE3_1 - 0 + STOR_MU_EN15 + false - TU14_FUNCTION - 000 + V13_RADIX + Bin - TRIG5_MATCH_UNIT + TRIG8_MATCH_UNIT 1 - c_Port7_EN - false + V8_RADIX + Bin - V1_1RADIX - Bin + DATA_DEPTH + 14 - STOR_MU_EN1 + STOR_MU_EN2 false - TU1_FUNCTION + TU14_FUNCTION 000 - V8_RADIX - Bin + INIT_M7_CONFIG + 0 - TRIG_SEQ_NEG15 - false + VALUE8_1 + 0 - VALUE13 + VALUE0_1 0 - VALUE13_1 + INIT_M3_CONFIG 0 - TU10_CNT_MODE - 00 + TRIG6_PORT_WIDTH + 8 - TRIG9_MATCH_TYPE - 1 + V0_RADIX + Bin - TU2_CNT_VALUE + TRIG_MU_NEG9 + false + + + TU11_CNT_VALUE 1 - V13_2RADIX - Bin + TRIG9_MATCH_UNIT + 1 - INIT_M7_CONFIG + VALUE8 0 - INIT_M0_CONFIG - 25'b0010010010010010010010010 + TRIG5_EXCLUDE + false - INIT_M3_CONFIG - 0 + TRIG_MU_NEG13 + false - TRIG13_EXCLUDE + TRIG_SEQ_NEG11 false - VALUE2_2 - 0 + TRIG3_MATCH_TYPE + 1 - TRIG_SEQ_NEG5 - false + TRIG12_CNT_WIDTH + 0 - STOR_MU_EN6 - false + VALUE1 + 0 - STOR_MU_NEG0 + TRIG_SEQ_NEG4 false - TU0_CNT_VALUE - 1 + VALUE13 + 0 - TU8_FUNCTION - 000 + TU7_CNT_VALUE + 1 - TRIG_SEQ_NEG8 - false + TU12_CNT_VALUE + 1 - V6_1RADIX + V10_RADIX Bin - VALUE12_1 - 0 + TU15_FUNCTION + 000 - V3_1RADIX - Bin + TRIG_SEQ_SEL0 + 0 - EN_STOR_QUAL + STOR_MU_NEG1 false - STORE_POSITION - 0 + TU4_CNT_VALUE + 1 - TRIG_MU_EN4 + STOR_MU_EN13 false - V15_RADIX - Bin + TRIG_MU_EN7 + false - STOR_MU_NEG13 - false + TRIG2_PORT_WIDTH + 8 - DATA_DEPTH - 14 + STOR_MU_EN8 + false - TRIG_SEQ_NEG12 + TRIG_MU_EN8 false - VALUE14 - 0 + c_Port12_EN + false - V4_RADIX + V8_2RADIX Bin - TRIG_MODE + VALUE11_1 0 - TRIG_MU_EN0 + STOR_MU_EN1 false - VALUE11_2 - 0 + INIT_TRIG_OUT + 3'b000 - TRIG2_MATCH_TYPE + TRIG7_MATCH_TYPE 1 - VALUE5_1 - 0 + ALL_DATA + 1 - INIT_M1_CONFIG - 25'b0010010010010010010010010 + TRIG7_MATCH_UNIT + 1 - TRIG_SEQ_NEG6 - false + V0_1RADIX + Bin - STOR_MU_NEG4 - false + TU1_CNT_MODE + 00 - INIT_M9_CONFIG - 0 + c_Port14_EN + false - STOR_MU_NEG9 + TRIG_MU_EN14 false - TRIG6_PORT_WIDTH - 8 + STOR_MU_NEG15 + false - V3_2RADIX - Bin + TRIG_SEQ_SEL5 + 0 - VALUE7_2 - 0 + STOR_MU_NEG6 + false - TRIG11_EXCLUDE + TRIG_MU_NEG0 false - STOR_MU_NEG10 + TRIG9_EXCLUDE false - V3_RADIX - Bin + TRIG3_EXCLUDE + false - TRIG4_MATCH_UNIT - 1 + TRIG0_EXCLUDE + false - V6_2RADIX + V9_2RADIX Bin - STORE_TYPE - 0 - - - TRIG10_EXCLUDE + INIT_ENABLE false - VALUE9 + TRIG0_CNT_WIDTH 0 - STOR_MU_EN13 + STOR_MU_NEG11 false - TRIG8_PORT_WIDTH + TRIG13_PORT_WIDTH 8 - TU15_CNT_MODE - 00 + TU9_CNT_VALUE + 1 - STOR_MU_NEG2 + TRIG_SEQ_NEG9 false - INIT_M2_CONFIG - 0 - - - TU13_CNT_VALUE - 1 + STOR_MU_EN6 + false - V9_RADIX - Bin + TRIG4_EXCLUDE + false - TRIG6_MATCH_TYPE - 1 + INIT_M8_CONFIG + 0 - TU5_FUNCTION - 000 + TRIG_SEQ_SEL6 + 0 - INIT_M10_CONFIG + VALUE11_2 0 - V13_RADIX - Bin + STOR_MU_NEG14 + false - VALUE15_1 - 0 + TU8_CNT_VALUE + 1 - STOR_MU_EN7 + TRIG_CONTIGUOUS false - V8_2RADIX + V15_1RADIX Bin - TRIG_MU_EN7 - false + TRIG5_MATCH_UNIT + 1 - TRIG_MU_NEG12 - false + TU8_FUNCTION + 000 - TRIG14_EXCLUDE - false + VALUE10_2 + 0 - STOR_MU_EN8 - false + VALUE6_1 + 0 - VALUE10 - 0 + V12_1RADIX + Bin - TRIG_SEQ_LEVEL - 1 + TU8_CNT_MODE + 00 - TRIG1_MATCH_UNIT - 1 + c_Port5_EN + false - INIT_STOR_QUAL - 5'b0 + TRIG7_PORT_WIDTH + 8 - c_Port2_EN - false + TU12_FUNCTION + 000 - VALUE14_1 + INIT_M10_CONFIG 0 - TRIG2_MATCH_UNIT - 1 + TU11_CNT_MODE + 00 - V2_2RADIX + V1_2RADIX Bin - TRIG_SEQ_SEL0 - 0 + STOR_MU_NEG12 + false - TRIG8_MATCH_TYPE - 1 + V13_1RADIX + Bin - INIT_M4_CONFIG + STORE_POSITION 0 - TRIG3_EXCLUDE - false + VALUE4 + 0 - TU1_CNT_MODE - 00 + VALUE3_1 + 0 - V15_1RADIX - Bin + TRIG8_MATCH_TYPE + 1 - TRIG_MU_NEG15 - false + TRIG_SEQ_SEL9 + 0 - TRIG4_MATCH_TYPE - 1 + INIT_M15_CONFIG + 0 - TRIG_SEQ_NEG0 - false + TRIG14_MATCH_TYPE + 1 - VALUE4 + TRIG_SEQ_SEL12 0 - V12_1RADIX - Bin + TRIG_MU_NEG10 + false - STOR_MU_EN2 + STOR_MU_NEG13 false - TRIG_MU_NEG11 + EN_TRIG_OUT false - TRIG12_CNT_WIDTH + TRIG_SEQ_SEL1 0 - TRIG_MU_NEG9 + TU2_CNT_VALUE + 1 + + + c_Port13_EN false - TRIG_SEQ_SEL14 - 0 + TRIG_MU_NEG12 + false - STOR_MU_NEG7 + TRIG_SEQ_NEG1 false - VALUE1 + VALUE12_1 0 - V7_RADIX - Bin + c_Port11_EN + false - TU3_CNT_VALUE - 1 + EN_STOR_QUAL + false - V10_1RADIX - Bin + VALUE13_2 + 0 - STOR_MU_EN4 - false + TU1_FUNCTION + 000 - TRIG_SEQ_SEL12 + VALUE5_1 0 - TRIG_MU_NEG2 + STOR_MU_EN3 false - TRIG8_CNT_WIDTH - 0 + TU15_CNT_VALUE + 1 - VALUE8_2 + VALUE3_2 0 - TRIG_CONTIGUOUS + TRIG_SEQ_NEG8 false - TU0_FUNCTION - 000 + TRIG12_MATCH_TYPE + 1 TRIG14_MATCH_UNIT 1 - TRIG8_EXCLUDE + STOR_MU_NEG5 false - c_Port9_EN + TRIG2_EXCLUDE false - VALUE7_1 + TRIG5_CNT_WIDTH 0 - V1_2RADIX + TRIG2_CNT_WIDTH + 0 + + + V11_2RADIX Bin - c_Port14_EN - false + V4_RADIX + Bin - MAX_SEQ_LEVEL - 1 + TRIG_SEQ_SEL8 + 0 - TU7_FUNCTION - 000 + c_Port6_EN + false - TRIG_MU_EN3 + TRIG_SEQ_NEG0 false - V4_1RADIX + V11_RADIX Bin - VALUE4_1 - 0 + TRIG_SEQ_NEG15 + false - VALUE3_2 - 0 + TU0_CNT_MODE + 00 - TRIG_SEQ_SEL1 - 0 + c_Port0_EN + true - VALUE6_1 - 0 + V8_1RADIX + Bin - VALUE8 - 0 + TRIG_SEQ_NEG10 + false - TRIG1_MATCH_TYPE + V9_1RADIX + Bin + + + TU5_CNT_MODE + 00 + + + DATA_WIDTH 1 - TRIG_MU_NEG5 + TRIG_MU_NEG2 false - c_Port8_EN + TRIG10_CNT_WIDTH + 0 + + + TRIG_MU_EN5 false - TRIG14_CNT_WIDTH + TRIG8_PORT_WIDTH + 8 + + + VALUE10 0 - TU11_FUNCTION + TRIG6_MATCH_TYPE + 1 + + + TU6_FUNCTION 000 - TRIG_MU_EN15 - false + V15_2RADIX + Bin - VALUE12_2 - 0 + TRIG1_PORT_WIDTH + 8 - TU3_FUNCTION - 000 + TU13_CNT_MODE + 00 - TRIG_MU_EN11 - false + TU3_CNT_MODE + 00 - VALUE0_2 - 0 + TU0_FUNCTION + 000 - TRIG13_CNT_WIDTH + TRIG_SEQ_SEL3 0 - STOR_MU_NEG12 - false + TU3_CNT_VALUE + 1 - STOR_MU_EN5 - false + TU7_FUNCTION + 000 - VALUE3 - 0 + V4_1RADIX + Bin - TRIG12_EXCLUDE - false + INIT_M13_CONFIG + 0 - TRIG3_CNT_WIDTH + TRIG9_CNT_WIDTH 0 - TRIG0_EXCLUDE + TRIG_MU_EN3 false - VALUE0 + STORE_TYPE 0 - TU14_CNT_MODE - 00 + TU2_FUNCTION + 000 - TRIG_MU_NEG13 + TRIG_MU_EN9 false - TRIG_SEQ_SEL10 + VALUE9_2 0 - INIT_TRIG_COND - 6'b000000 - - - TU0_CNT_MODE - 00 + INIT_M5_CONFIG + 0 - TU8_CNT_VALUE + TU10_CNT_VALUE 1 - TRIG14_MATCH_TYPE - 1 + TRIG8_EXCLUDE + false - TRIG7_MATCH_TYPE + TRIG10_MATCH_TYPE 1 - TRIG12_MATCH_TYPE - 1 + VALUE7 + 0 - V0_1RADIX - Bin + TRIG0_MATCH_TYPE + 1 - VALUE0_1 + VALUE13_1 0 - V7_1RADIX + V10_1RADIX Bin - STOR_MU_NEG1 - false - - - TRIG_SEQ_SEL2 + VALUE4_1 0 - STOR_MU_EN10 - false + TU5_CNT_VALUE + 1 - TRIG_SEQ_NEG7 - false + INIT_M6_CONFIG + 0 - V2_RADIX + V13_2RADIX Bin - c_Port4_EN - false - - - TRIG_SEQ_NEG1 - false + INIT_M0_CONFIG + 22'b0010010010010010010010 - TU4_FUNCTION - 000 + INIT_STOR_TYPE + 19'b0000000000000000000 - TRIG_MU_EN6 + TRIG11_EXCLUDE false - c_Port1_EN - true - - - TU6_CNT_MODE - 00 + VALUE15_1 + 0 - TRIG9_MATCH_UNIT + TRIG9_MATCH_TYPE 1 - V0_2RADIX + V2_RADIX Bin - EN_TRIG_OUT + STOR_MU_NEG10 false - TRIG1_EXCLUDE + TRIG13_EXCLUDE false - DATA_SAME_AS_TRIG - true + TRIG3_PORT_WIDTH + 8 - VALUE5 - 0 + STOR_MU_NEG4 + false - INIT_TRIG_OUT - 3'b000 + TRIG_MU_NEG7 + false - c_Port11_EN + STOR_MU_EN4 false - TRIG3_PORT_WIDTH - 8 + TRIG_SEQ_SEL14 + 0 - V15_2RADIX + V0_2RADIX Bin - STOR_NEG_WHOLE + TRIG_SEQ_NEG3 false @@ -823,391 +823,375 @@ Bin - TU12_CNT_VALUE - 1 + V1_RADIX + Bin - TRIG0_CNT_WIDTH + VALUE12_2 0 - TU6_FUNCTION - 000 - - - CLK_EDGE - 1 - - - TU15_CNT_VALUE - 1 - - - TRIG7_MATCH_UNIT - 1 - - - TRIG_MU_EN10 - false + V5_1RADIX + Bin - TRIG13_PORT_WIDTH - 8 + V3_1RADIX + Bin - TRIG_SEQ_NEG4 + TRIG_MU_EN13 false - TRIG_MU_NEG3 - false + TRIG14_CNT_WIDTH + 0 - TRIG10_MATCH_UNIT + TU1_CNT_VALUE 1 - TRIG5_EXCLUDE + TRIG_MU_EN1 false - V11_RADIX - Bin - - - INIT_M14_CONFIG - 0 + TU10_FUNCTION + 000 - TU2_CNT_MODE + TU12_CNT_MODE 00 - STOR_MU_NEG11 - false + V6_1RADIX + Bin - VALUE15_2 - 0 + TRIG2_MATCH_UNIT + 1 - VALUE4_2 + TRIG6_CNT_WIDTH 0 - TRIG7_EXCLUDE - false - - - TRIG15_MATCH_UNIT + TRIG11_MATCH_UNIT 1 - c_Port5_EN - false + TRIG_SEQ_SEL15 + 0 - TRIG_NEG_WHOLE + TRIG_MU_EN12 false - TRIG_MU_NEG1 - false + TU9_FUNCTION + 000 - TRIG11_CNT_WIDTH - 0 + V2_1RADIX + Bin - V14_1RADIX + V5_RADIX Bin - TRIG_MU_EN8 - false + TRIG15_MATCH_TYPE + 1 - TRIG_SEQ_SEL9 - 0 + TRIG11_MATCH_TYPE + 1 - STOR_MU_NEG3 + TRIG_MU_EN15 false - TRIG12_PORT_WIDTH - 8 - - - VALUE11 - 0 + c_Port15_EN + false - TU6_CNT_VALUE + TRIG_PORT_NUM 1 - V11_1RADIX + V3_2RADIX Bin - STOR_MU_NEG14 - false - - - TRIG_MU_NEG0 + TRIG6_EXCLUDE false - V1_RADIX + V14_1RADIX Bin - VALUE11_1 - 0 + INIT_STOR_QUAL + 2'b0 - TRIG_MU_EN1 + STOR_MU_EN9 false - VALUE9_2 + TU5_FUNCTION + 000 + + + TRIG1_CNT_WIDTH 0 - c_Port3_EN + VALUE12 + 0 + + + c_Port2_EN false - V4_2RADIX - Bin + TRIG15_CNT_WIDTH + 0 - TRIG15_PORT_WIDTH - 8 + V12_RADIX + Bin - TRIG2_PORT_WIDTH + TRIG9_PORT_WIDTH 8 - TRIG10_CNT_WIDTH - 0 + STORE_TYPE_DIV + 1 - STOR_MU_EN12 - false + TU9_CNT_MODE + 00 - TRIG_MU_NEG14 - false + V7_1RADIX + Bin - TRIG_SEQ_SEL3 + VALUE2 0 - STOR_MU_EN0 - false + V6_2RADIX + Bin - STOR_MU_EN3 + TRIG_MU_NEG3 false - TU2_FUNCTION - 000 + TRIG12_MATCH_UNIT + 1 - TRIG0_MATCH_TYPE - 1 + TRIG4_PORT_WIDTH + 8 - DATA_WIDTH - 1 + VALUE3 + 0 - INIT_ENABLE - false + VALUE9 + 0 - VALUE10_2 + V9_RADIX + Bin + + + INIT_M4_CONFIG 0 - INIT_M5_CONFIG + TRIG_SEQ_SEL13 0 - TU9_CNT_MODE + TRIG10_EXCLUDE + false + + + TU6_CNT_MODE 00 - TRIG_SEQ_SEL5 + VALUE2_2 0 - TU9_CNT_VALUE - 1 + TRIG_SEQ_SEL11 + 0 - TU7_CNT_MODE - 00 + TRIG_MU_NEG5 + false - TU4_CNT_VALUE + TRIG3_MATCH_UNIT 1 - TRIG5_PORT_WIDTH - 8 + STOR_MU_EN7 + false - c_Port0_EN - true + V1_1RADIX + Bin - c_Port12_EN + TRIG_SEQ_NEG2 false - TRIG_SEQ_SEL13 + TRIG3_CNT_WIDTH 0 - TRIG_SEQ_SEL15 - 0 + c_Port10_EN + false - c_Port13_EN - false + TU6_CNT_VALUE + 1 - STOR_MU_EN15 + TRIG_MU_EN10 false - VALUE14_2 + VALUE4_2 0 - STOR_MU_EN14 - false + MAX_SEQ_LEVEL + 1 - VALUE12 + VALUE14_1 0 - V10_2RADIX - Bin + TRIG_MU_NEG14 + false - VALUE1_2 + VALUE14 0 - TRIG0_MATCH_UNIT - 1 + VALUE2_1 + 0 - c_Port6_EN - false + VALUE14_2 + 0 - TRIG5_MATCH_TYPE - 1 + AREA_SPEED + 0 - TRIG13_MATCH_UNIT - 1 + TRIG_MU_EN2 + false - c_Port10_EN + TRIG_MU_NEG1 false - STORE_TYPE_DIV - 1 + DATA_SAME_AS_TRIG + true - TU11_CNT_VALUE + TRIG1_MATCH_TYPE 1 - VALUE2_1 - 0 + STOR_MU_EN0 + false - TRIG_MU_NEG4 + TRIG_NEG_WHOLE false - TRIG2_CNT_WIDTH - 0 + STOR_MU_EN12 + false - TRIG15_MATCH_TYPE - 1 + TU7_CNT_MODE + 00 - TU1_CNT_VALUE + TRIG13_MATCH_TYPE 1 - TU10_CNT_VALUE - 1 + V15_RADIX + Bin - STOR_MU_NEG15 - false + VALUE1_1 + 0 - TRIG0_PORT_WIDTH - 8 + STOR_MU_NEG2 + false - TRIG_SEQ_SEL4 - 0 + TRIG_SEQ_NEG7 + false - VALUE10_1 + TRIG_SEQ_SEL4 0 - AREA_SPEED - 0 + STOR_MU_EN10 + false - TRIG1_PORT_WIDTH - 8 + TRIG_MU_EN6 + false - VALUE7 + VALUE7_1 0 - V13_1RADIX + V10_2RADIX Bin - c_Port15_EN + TRIG_SEQ_NEG13 false - TRIG11_MATCH_UNIT - 1 + c_Port4_EN + false - TRIG6_CNT_WIDTH + TRIG7_CNT_WIDTH 0 - INIT_M12_CONFIG - 0 + TU4_CNT_MODE + 00 - TRIG7_CNT_WIDTH + TRIG_SEQ_SEL7 0 @@ -1215,35 +1199,55 @@ 8 - TRIG11_MATCH_TYPE - 1 + STOR_MU_EN14 + false + + + TRIG_MU_NEG8 + false + + + INIT_M11_CONFIG + 0 + + + TU10_CNT_MODE + 00 - TRIG2_EXCLUDE - false + VALUE0 + 0 - INIT_M8_CONFIG + TRIG_SEQ_SEL10 0 - TRIG_MU_EN9 - false + INIT_M9_CONFIG + 0 - TRIG15_CNT_WIDTH + TRIG13_CNT_WIDTH 0 - STOR_MU_NEG5 + TRIG5_MATCH_TYPE + 1 + + + c_Port9_EN false - V9_2RADIX + V2_2RADIX Bin - VALUE6_2 + TRIG_SEQ_NEG14 + false + + + VALUE15_2 0 @@ -1251,271 +1255,267 @@ Bin - V5_RADIX - Bin + c_Port7_EN + false - TRIG7_PORT_WIDTH - 8 + TRIG4_MATCH_UNIT + 1 - TRIG_SEQ_SEL7 + TRIG4_CNT_WIDTH 0 - TRIG6_EXCLUDE - false + TU0_CNT_VALUE + 1 - STOR_MU_NEG6 + EN_WINDOWS false - VALUE15 + VALUE5 0 - TU5_CNT_MODE - 00 - - - TRIG_SEQ_NEG14 - false + VALUE6_2 + 0 - TU10_FUNCTION - 000 + VALUE10_1 + 0 - TRIG4_EXCLUDE - false + V3_RADIX + Bin - TU9_FUNCTION + TU3_FUNCTION 000 - TRIG_MU_NEG6 - false - - - TRIG_SEQ_NEG10 - false + TRIG11_PORT_WIDTH + 8 - TRIG_MU_NEG7 + TRIG14_EXCLUDE false - TU13_FUNCTION - 000 + INIT_M12_CONFIG + 0 - TRIG13_MATCH_TYPE - 1 + VALUE7_2 + 0 - VALUE1_1 + VALUE15 0 - V0_RADIX - Bin + INIT_M1_CONFIG + 0 - INIT_M6_CONFIG - 0 + INIT_TRIG_COND + 3'b000 - STOR_MU_EN9 + STOR_MU_NEG8 false - TU7_CNT_VALUE - 1 + INIT_M2_CONFIG + 0 - VALUE5_2 - 0 + TRIG2_MATCH_TYPE + 1 - TRIG_SEQ_SEL8 - 0 + TRIG15_PORT_WIDTH + 8 - TRIG3_MATCH_TYPE + TRIG4_MATCH_TYPE 1 - V8_1RADIX - Bin + TRIG8_CNT_WIDTH + 0 - V2_1RADIX + V7_RADIX Bin - VALUE13_2 - 0 + TRIG7_EXCLUDE + false - TRIG3_MATCH_UNIT - 1 + TRIG_MU_EN0 + false - TRIG_SEQ_NEG11 + STOR_MU_NEG9 false - TU12_FUNCTION + TU4_FUNCTION 000 - TU11_CNT_MODE - 00 + VALUE9_1 + 0 - TRIG15_EXCLUDE - false + TRIG_SEQ_LEVEL + 1 - TU15_FUNCTION - 000 + TRIG5_PORT_WIDTH + 8 - TRIG_MU_NEG10 - false + VALUE1_2 + 0 - TU3_CNT_MODE - 00 + VALUE8_2 + 0 - TRIG_SEQ_NEG9 - false + TRIG_SEQ_SEL2 + 0 - INIT_M15_CONFIG + VALUE5_2 0 - INIT_STOR_TYPE - 19'b0000000000000000000 + TRIG0_PORT_WIDTH + 7 - V10_RADIX - Bin + STOR_NEG_WHOLE + false - TRIG10_MATCH_TYPE - 1 + TRIG_SEQ_NEG6 + false - V5_1RADIX + V4_2RADIX Bin - TRIG_MU_EN2 - false - - - TRIG9_PORT_WIDTH - 8 + TRIG0_MATCH_UNIT + 1 - VALUE8_1 - 0 + STOR_MU_NEG3 + false - TRIG4_PORT_WIDTH + TRIG10_PORT_WIDTH 8 - TU14_CNT_VALUE + TRIG13_MATCH_UNIT 1 - TRIG_SEQ_NEG3 - false - - - TRIG5_CNT_WIDTH + TRIG_MODE 0 - TU12_CNT_MODE - 00 + STOR_MU_NEG7 + false V5_2RADIX Bin - TRIG4_CNT_WIDTH + VALUE11 0 - ALL_DATA - 1 + TU2_CNT_MODE + 00 - TRIG_PORT_NUM - 2 + V14_RADIX + Bin - TRIG_SEQ_NEG13 + TRIG_MU_NEG4 false - TRIG_SEQ_SEL6 - 0 + V7_2RADIX + Bin - TRIG1_CNT_WIDTH + TRIG11_CNT_WIDTH 0 - TU5_CNT_VALUE + V11_1RADIX + Bin + + + TRIG_SEQ_NEG5 + false + + + TRIG15_MATCH_UNIT 1 - V14_2RADIX - Bin + CLK_EDGE + 1 - TRIG_MU_EN5 + c_Port8_EN false - TRIG12_MATCH_UNIT + TRIG1_MATCH_UNIT 1 - TRIG6_MATCH_UNIT - 1 + V14_2RADIX + Bin - STOR_MU_NEG8 + c_Port3_EN false - TRIG11_PORT_WIDTH - 8 + TRIG_MU_NEG6 + false - TRIG_SEQ_NEG2 + TRIG_SEQ_NEG12 false - V11_2RADIX - Bin + TU13_CNT_VALUE + 1 - TU13_CNT_MODE - 00 + VALUE0_2 + 0 - TRIG_MU_EN14 + TRIG15_EXCLUDE + false + + + STOR_MU_NEG0 false @@ -1581,15 +1581,7 @@ trig0_i input right - 7 - 0 - - - trig1_i - trig1_i - input - right - 7 + 6 0 diff --git a/ipcore/DebugCoreIst/DebugCoreIst.v b/ipcore/DebugCoreIst/DebugCoreIst.v index b345326..ac06322 100644 --- a/ipcore/DebugCoreIst/DebugCoreIst.v +++ b/ipcore/DebugCoreIst/DebugCoreIst.v @@ -17,8 +17,6 @@ module DebugCoreIst trig0_i, //the trigger data for path 0, from user logic. - trig1_i, //the trigger data for path 1, from user logic. - resetn_i //the hw reset from user logic, it would be used for powerup trig. ); @@ -26,7 +24,7 @@ localparam FLA_VERSION = 32'h9001F002; localparam AREA_SPEED = 0; //@IPC int 0,3 -localparam TRIG_PORT_NUM = 2; //@IPC int 1,16 +localparam TRIG_PORT_NUM = 1; //@IPC int 1,16 localparam MAX_SEQ_LEVEL = 1; //@IPC int 1,16 @@ -44,7 +42,7 @@ localparam DATA_SAME_AS_TRIG = 1; //@IPC bool localparam DATA_WIDTH = 1; //@IPC int 1,4096 -localparam TRIG0_PORT_WIDTH = 8; //@IPC int 1,256 +localparam TRIG0_PORT_WIDTH = 7; //@IPC int 1,256 localparam TRIG0_MATCH_UNIT = 1; //@IPC int 1,16 @@ -209,14 +207,14 @@ localparam TRIG15_EXCLUDE = 0; //@IPC bool localparam INIT_ENABLE = 0; //@IPC bool -localparam INIT_TRIG_COND = 6'b000000; //@IPC string @H trigger condition +localparam INIT_TRIG_COND = 3'b000; //@IPC string @H trigger condition // match unit config -localparam INIT_M0_CONFIG = 25'b0010010010010010010010010; //@IPC string @H +localparam INIT_M0_CONFIG = 22'b0010010010010010010010; //@IPC string @H -localparam INIT_M1_CONFIG = 25'b0010010010010010010010010; //@IPC string @H +localparam INIT_M1_CONFIG = 0; //@IPC string @H localparam INIT_M2_CONFIG = 0; //@IPC string @H @@ -680,7 +678,7 @@ localparam STORE_TYPE_DIV = 1; //@IPC int 1,131072 max 2^17 localparam STORE_POSITION = 0; //@IPC int 0,131072 max 2^17 -localparam INIT_STOR_QUAL = 5'b0; //@IPC string @H +localparam INIT_STOR_QUAL = 2'b0; //@IPC string @H localparam ALL_DATA = 1; //@IPC enum 1,0 @@ -752,7 +750,7 @@ localparam STOR_MU_NEG15 = 0; //@IPC bool localparam c_Port0_EN = 1; //@IPC bool -localparam c_Port1_EN = 1; //@IPC bool +localparam c_Port1_EN = 0; //@IPC bool localparam c_Port2_EN = 0; //@IPC bool @@ -797,8 +795,6 @@ localparam c_Port15_EN = 0; //@IPC bool input trig0_i; //the trigger data for path 0, from user logic. - input trig1_i; //the trigger data for path 1, from user logic. - input resetn_i; //the hw reset from user logic, it would be used for powerup trig. wire drck_in; diff --git a/ipcore/DebugCoreIst/DebugCoreIst_tmpl.v b/ipcore/DebugCoreIst/DebugCoreIst_tmpl.v index 5a296e2..47638c4 100644 --- a/ipcore/DebugCoreIst/DebugCoreIst_tmpl.v +++ b/ipcore/DebugCoreIst/DebugCoreIst_tmpl.v @@ -16,6 +16,5 @@ DebugCoreIst the_instance_name ( .drck_in(drck_in), // input .clk(clk), // input .resetn_i(resetn_i), // input - .trig0_i(trig0_i), // input [7:0] - .trig1_i(trig1_i) // input [7:0] + .trig0_i(trig0_i) // input [6:0] ); diff --git a/ipcore/DebugCoreIst/DebugCoreIst_tmpl.vhdl b/ipcore/DebugCoreIst/DebugCoreIst_tmpl.vhdl index 8092ad8..6c21100 100644 --- a/ipcore/DebugCoreIst/DebugCoreIst_tmpl.vhdl +++ b/ipcore/DebugCoreIst/DebugCoreIst_tmpl.vhdl @@ -17,8 +17,7 @@ COMPONENT DebugCoreIst drck_in : IN STD_LOGIC; clk : IN STD_LOGIC; resetn_i : IN STD_LOGIC; - trig0_i : IN STD_LOGIC_VECTOR(7 DOWNTO 0); - trig1_i : IN STD_LOGIC_VECTOR(7 DOWNTO 0) + trig0_i : IN STD_LOGIC_VECTOR(6 DOWNTO 0) ); END COMPONENT; @@ -34,6 +33,5 @@ the_instance_name : DebugCoreIst drck_in => drck_in, clk => clk, resetn_i => resetn_i, - trig0_i => trig0_i, - trig1_i => trig1_i + trig0_i => trig0_i ); diff --git a/ipcore/DebugCoreIst/generate.log b/ipcore/DebugCoreIst/generate.log index 53bbe53..a2660aa 100644 --- a/ipcore/DebugCoreIst/generate.log +++ b/ipcore/DebugCoreIst/generate.log @@ -1,6 +1,6 @@ IP Generator (Version 2021.1-SP7 build 86875) Check out license ... -Start generating at 2024-01-06 22:31 +Start generating at 2024-01-07 14:18 Instance: DebugCoreIst (D:\workspace\fpga_demo\led_test\ipcore\DebugCoreIst\DebugCoreIst.idf) IP: DebugCore (1.3) Part: Logos-PGL22G-MBG324--6 diff --git a/ipcore/SPLL/.last_generated b/ipcore/SPLL/.last_generated new file mode 100644 index 0000000..188a96e --- /dev/null +++ b/ipcore/SPLL/.last_generated @@ -0,0 +1,2 @@ +2024-01-07 14:25 +rev_1 \ No newline at end of file diff --git a/ipcore/SPLL/SPLL.idf b/ipcore/SPLL/SPLL.idf new file mode 100644 index 0000000..cd0dfb5 --- /dev/null +++ b/ipcore/SPLL/SPLL.idf @@ -0,0 +1,663 @@ + + +
+ Pango + 021001 + PLL + Logos PLL + 1.5 + SPLL + Logos + PGL22G + MBG324 + -6 + IP Compiler +
+ + + CLKOUT4_REQ_PHASE_basicPage + 0.0000 + 4 + + + CLKOUT3_REQ_FREQ_basicPage + 50.0000 + 4 + + + STATIC_PHASE4_advancedPage + 16 + + + DYNAMIC_RATIOI_EN_advancedPage + false + + + CLKOUT4_EN_basicPage + false + + + STATIC_DUTY0_advancedPage + 16 + + + STATIC_DUTY3_basicPage + 16 + + + CLKOUT0_GATE_EN_basicPage + false + + + CLKIN_SEL_EN_ENABLE_basicPage + false + + + CLKOUT0_EXT_EN_advancedPage + false + + + DYNAMIC_RATIO0_EN_advancedPage + false + + + DYNAMIC_CLKIN_EN_basicPage + false + + + DYNAMIC_RATIOM_EN_advancedPage + false + + + CLKOUT2_GATE_EN_advancedPage + false + + + CLKOUT0_REQ_DUTY_basicPage + 50.0000 + 4 + + + STATIC_RATIO0_basicPage + 24 + + + CLK_CAS4_EN_basicPage + false + + + CLKOUT4_REQ_FREQ_basicPage + 50.0000 + 4 + + + DYNAMIC_PHASE_EN_advancedPage + false + + + DYNAMIC_RATIO4_EN_advancedPage + false + + + DYNAMIC_PHASE1_EN_advancedPage + false + + + STATIC_RATIO2_basicPage + 120 + + + CLK_CAS2_EN_basicPage + false + + + CLKOUT2_REQ_DUTY_basicPage + 50.0000 + 4 + + + STATIC_RATIO3_advancedPage + 16 + + + DEVICE_PGL35 + false + + + STATIC_RATIO4_basicPage + 16 + + + FB_MODE_basicPage + 0 + + + CLKOUT4_GATE_EN_basicPage + false + + + STATIC_PHASE3_advancedPage + 16 + + + STATIC_PHASE4_basicPage + 16 + + + CLKOUT2_REQ_FREQ_basicPage + 5.0000 + 4 + + + CLKOUT1_REQ_DUTY_basicPage + 50.0000 + 4 + + + PLL_PWD_ENABLE_basicPage + false + + + DYNAMIC_DUTY1_EN_advancedPage + false + + + CLKOUT3_GATE_EN_basicPage + false + + + CLKOUT0_EN_advancedPage + true + + + STATIC_DUTY2_advancedPage + 16 + + + CLKOUT5_EN_advancedPage + false + + + CLK_CAS3_EN_basicPage + false + + + DYNAMIC_RATIO3_EN_advancedPage + false + + + CLKOUT3_GATE_EN_advancedPage + false + + + CLKSWITCH_FLAG_ENABLE_basicPage + false + + + STATIC_RATIO3_basicPage + 16 + + + DYNAMIC_DUTY0_EN_advancedPage + false + + + STATIC_PHASE1_basicPage + 16 + + + CLKOUT5_SEL_advancedPage + 0 + + + CLKOUT0_REQ_PHASE_basicPage + 0.0000 + 4 + + + CLK_CAS3_EN_advancedPage + false + + + CLKOUT0_EXT_EN_basicPage + false + + + CLKOUT4_GATE_EN_advancedPage + false + + + STATIC_DUTY1_basicPage + 60 + + + BANDWIDTH_advancedPage + OPTIMIZED + + + CLKOUT2_GATE_EN_basicPage + false + + + BANDWIDTH_basicPage + OPTIMIZED + + + CLKIN_SEL_ENABLE_advancedPage + false + + + CLKIN_FREQ_basicPage + 50.0000 + 4 + + + STATIC_RATIOF_basicPage + 24 + + + STATIC_DUTY2_basicPage + 120 + + + STATIC_RATIOM_advancedPage + 1 + + + CLKOUT3_EN_basicPage + false + + + MODE + false + + + FBMODE_basicPage + false + + + CLKOUT5_GATE_EN_advancedPage + false + + + CLKIN_SEL_EN_ENABLE_advancedPage + false + + + MODE_CFG + 0 + + + FEEDBACK_DELAY_VALUE_basicPage + 0.000 + 3 + + + RST_ENABLE_advancedPage + false + + + DYNAMIC_DUTY3_EN_advancedPage + false + + + STATIC_RATIOF_advancedPage + 16 + + + CLKOUT2_EN_basicPage + true + + + STATIC_DUTY4_basicPage + 16 + + + CLKSWITCH_FLAG_ENABLE_advancedPage + false + + + FEEDBACK_DELAY_ENABLE_advancedPage + false + + + CLKOUT3_REQ_DUTY_basicPage + 50.0000 + 4 + + + FBMODE_advancedPage + false + + + RST_ENABLE_basicPage + false + + + FEEDBACK_DELAY_VALUE_advancedPage + 0.000 + 3 + + + STATIC_DUTY0_basicPage + 24 + + + STATIC_RATIO0_advancedPage + 16 + + + DYNAMIC_RATIO2_EN_advancedPage + false + + + CLKOUT1_EN_advancedPage + false + + + DYNAMIC_DUTY2_EN_advancedPage + false + + + VCODIV2_ENABLE_advancedPage + false + + + DYNAMIC_PHASE4_EN_advancedPage + false + + + STATIC_PHASE0_basicPage + 16 + + + CLK_CAS1_EN_advancedPage + false + + + DYNAMIC_PHASE2_EN_advancedPage + false + + + CLKOUT1_REQ_FREQ_basicPage + 10.0000 + 4 + + + CLKIN_BYPASS_EN_advancedPage + false + + + DYNAMIC_RATIOF_EN_advancedPage + false + + + CLKOUT1_REQ_PHASE_basicPage + 0.0000 + 4 + + + CLKOUT4_EN_advancedPage + false + + + PFDEN_EN_advancedPage + false + + + STATIC_PHASE2_basicPage + 16 + + + DYNAMIC_CLKIN_EN_advancedPage + false + + + CLKOUT2_EN_advancedPage + false + + + STATIC_PHASE0_advancedPage + 16 + + + STATIC_RATIO1_advancedPage + 16 + + + RSTODIV_ENABLE_advancedPage + false + + + STATIC_DUTYF_basicPage + 24 + + + CLKOUT1_GATE_EN_basicPage + false + + + DYNAMIC_LOOP_EN_advancedPage + false + + + CLKOUT3_EN_advancedPage + false + + + CLKOUT3_REQ_PHASE_basicPage + 0.0000 + 4 + + + LOOP_MAPPING_EN_advancedPage + false + + + PLL_PWD_ENABLE_advancedPage + false + + + STATIC_DUTY4_advancedPage + 16 + + + CLKOUT1_GATE_EN_advancedPage + false + + + CLKOUT4_REQ_DUTY_basicPage + 50.0000 + 4 + + + STATIC_PHASE2_advancedPage + 16 + + + DYNAMIC_DUTY4_EN_advancedPage + false + + + FEEDBACK_DELAY_ENABLE_basicPage + false + + + DYNAMIC_RATIO1_EN_advancedPage + false + + + STATIC_RATIOI_advancedPage + 2 + + + CLKOUT0_EN_basicPage + true + + + CLKOUT2_REQ_PHASE_basicPage + 0.0000 + 4 + + + STATIC_DUTY1_advancedPage + 16 + + + FBDIV_SEL_basicPage + 0 + + + STATIC_RATIOM_basicPage + 1 + + + DEVICE_PGL22 + true + + + CLKOUT0_EXT_GATE_EN_advancedPage + false + + + SHOW_SETTING_EN_basicPage + false + + + CLK_CAS4_EN_advancedPage + false + + + STATIC_RATIOI_basicPage + 2 + + + FB_MODE_advancedPage + 0 + + + CLKIN_SEL_ENABLE_basicPage + false + + + CLKOUT0_EXT_GATE_EN_basicPage + false + + + STATIC_PHASE3_basicPage + 16 + + + STATIC_RATIO2_advancedPage + 16 + + + CLKOUT0_GATE_EN_advancedPage + false + + + CLKOUT1_EN_basicPage + true + + + CLKOUT0_REQ_FREQ_basicPage + 25.0000 + 4 + + + STATIC_DUTY3_advancedPage + 16 + + + CLK_CAS2_EN_advancedPage + false + + + FBDIV_SEL_advancedPage + 0 + + + CLKIN_FREQ_advancedPage + 50.0000 + 4 + + + STATIC_PHASE1_advancedPage + 16 + + + CLK_CAS1_EN_basicPage + false + + + STATIC_RATIO4_advancedPage + 16 + + + DYNAMIC_PHASE3_EN_advancedPage + false + + + CLKIN_BYPASS_EN_basicPage + false + + + STATIC_RATIO1_basicPage + 60 + + + DEVICE_PGL12 + false + + + DYNAMIC_PHASE0_EN_advancedPage + false + + + + + clkin1 + clkin1 + input + left + + + pll_lock + pll_lock + output + right + + + clkout0 + clkout0 + output + right + + + clkout1 + clkout1 + output + right + + + clkout2 + clkout2 + output + right + + + + + + + + + + + + + + + + +
diff --git a/ipcore/SPLL/SPLL.v b/ipcore/SPLL/SPLL.v new file mode 100644 index 0000000..c71a4d2 --- /dev/null +++ b/ipcore/SPLL/SPLL.v @@ -0,0 +1,299 @@ +// Created by IP Generator (Version 2021.1-SP7 build 86875) + + + +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2019 PANGO MICROSYSTEMS, INC +// ALL RIGHTS REVERVED. +// +// THE SOURCE CODE CONTAINED HEREIN IS PROPRIETARY TO PANGO MICROSYSTEMS, INC. +// IT SHALL NOT BE REPRODUCED OR DISCLOSED IN WHOLE OR IN PART OR USED BY +// PARTIES WITHOUT WRITTEN AUTHORIZATION FROM THE OWNER. +// +////////////////////////////////////////////////////////////////////////////// +// +// Library: +// Filename:SPLL.v +////////////////////////////////////////////////////////////////////////////// + +module SPLL ( + clkin1, + clkout0, + clkout1, + clkout2, + + pll_lock + ); + + localparam real CLKIN_FREQ = 50.0; + localparam integer STATIC_RATIOI = 2; + localparam integer STATIC_RATIO0 = 24; + localparam integer STATIC_RATIO1 = 60; + localparam integer STATIC_RATIO2 = 120; + localparam integer STATIC_RATIO3 = 16; + localparam integer STATIC_RATIO4 = 16; + localparam integer STATIC_RATIOF = 24; + localparam integer STATIC_DUTY0 = 24; + localparam integer STATIC_DUTY1 = 60; + localparam integer STATIC_DUTY2 = 120; + localparam integer STATIC_DUTY3 = 16; + localparam integer STATIC_DUTY4 = 16; + localparam integer STATIC_DUTYF = 24; + localparam integer STATIC_PHASE0 = 16; + localparam integer STATIC_PHASE1 = 16; + localparam integer STATIC_PHASE2 = 16; + localparam integer STATIC_PHASE3 = 16; + localparam integer STATIC_PHASE4 = 16; + localparam CLK_CAS1_EN = "FALSE"; + localparam CLK_CAS2_EN = "FALSE"; + localparam CLK_CAS3_EN = "FALSE"; + localparam CLK_CAS4_EN = "FALSE"; + localparam CLKIN_BYPASS_EN = "FALSE"; + localparam CLKOUT0_GATE_EN = "FALSE"; + localparam CLKOUT0_EXT_GATE_EN = "FALSE"; + localparam CLKOUT1_GATE_EN = "FALSE"; + localparam CLKOUT2_GATE_EN = "FALSE"; + localparam CLKOUT3_GATE_EN = "FALSE"; + localparam CLKOUT4_GATE_EN = "FALSE"; + localparam FBMODE = "FALSE"; + localparam integer FBDIV_SEL = 0; + localparam BANDWIDTH = "OPTIMIZED"; + localparam PFDEN_EN = "FALSE"; + localparam VCOCLK_DIV2 = 1'b0; + localparam DYNAMIC_RATIOI_EN = "FALSE"; + localparam DYNAMIC_RATIO0_EN = "FALSE"; + localparam DYNAMIC_RATIO1_EN = "FALSE"; + localparam DYNAMIC_RATIO2_EN = "FALSE"; + localparam DYNAMIC_RATIO3_EN = "FALSE"; + localparam DYNAMIC_RATIO4_EN = "FALSE"; + localparam DYNAMIC_RATIOF_EN = "FALSE"; + localparam DYNAMIC_DUTY0_EN = "FALSE"; + localparam DYNAMIC_DUTY1_EN = "FALSE"; + localparam DYNAMIC_DUTY2_EN = "FALSE"; + localparam DYNAMIC_DUTY3_EN = "FALSE"; + localparam DYNAMIC_DUTY4_EN = "FALSE"; + localparam DYNAMIC_DUTYF_EN = "FALSE"; + localparam PHASE_ADJUST0_EN = "TRUE"; + localparam PHASE_ADJUST1_EN = (CLK_CAS1_EN == "TRUE") ? "FALSE" : "TRUE"; + localparam PHASE_ADJUST2_EN = (CLK_CAS2_EN == "TRUE") ? "FALSE" : "TRUE"; + localparam PHASE_ADJUST3_EN = (CLK_CAS3_EN == "TRUE") ? "FALSE" : "TRUE"; + localparam PHASE_ADJUST4_EN = (CLK_CAS4_EN == "TRUE") ? "FALSE" : "TRUE"; + localparam DYNAMIC_PHASE0_EN = "FALSE"; + localparam DYNAMIC_PHASE1_EN = "FALSE"; + localparam DYNAMIC_PHASE2_EN = "FALSE"; + localparam DYNAMIC_PHASE3_EN = "FALSE"; + localparam DYNAMIC_PHASE4_EN = "FALSE"; + localparam DYNAMIC_PHASEF_EN = "FALSE"; + localparam integer STATIC_PHASEF = 16; + localparam CLK_CAS0_EN = "FALSE"; + localparam integer CLKOUT5_SEL = 0; + localparam CLKOUT5_GATE_EN = "FALSE"; + localparam INTERNAL_FB = (FBMODE == "FALSE") ? "ENABLE":"DISABLE"; + localparam EXTERNAL_FB = (FBMODE == "FALSE") ? "DISABLE": + (FBDIV_SEL == 0) ? "CLKOUT0": + (FBDIV_SEL == 1) ? "CLKOUT1": + (FBDIV_SEL == 2) ? "CLKOUT2": + (FBDIV_SEL == 3) ? "CLKOUT3": + (FBDIV_SEL == 4) ? "CLKOUT4":"DISABLE"; + localparam RSTODIV_ENABLE = "FALSE"; + localparam SIM_DEVICE = "PGL22G"; + + input clkin1; + output clkout0; + output clkout1; + output clkout2; + + output pll_lock; + + wire clkout0; + wire clkout0_2pad; + wire clkout1; + wire clkout2; + wire clkout3; + wire clkout4; + wire clkout5; + wire clkswitch_flag; + wire pll_lock; + wire clkin1; + wire clkin2; + wire clkfb; + wire clkin_sel; + wire clkin_sel_en; + wire pfden; + wire clkout0_gate; + wire clkout0_2pad_gate; + wire clkout1_gate; + wire clkout2_gate; + wire clkout3_gate; + wire clkout4_gate; + wire clkout5_gate; + wire [9:0] dyn_idiv; + wire [9:0] dyn_odiv0; + wire [9:0] dyn_odiv1; + wire [9:0] dyn_odiv2; + wire [9:0] dyn_odiv3; + wire [9:0] dyn_odiv4; + wire [9:0] dyn_fdiv; + wire [9:0] dyn_duty0; + wire [9:0] dyn_duty1; + wire [9:0] dyn_duty2; + wire [9:0] dyn_duty3; + wire [9:0] dyn_duty4; + wire [12:0] dyn_phase0; + wire [12:0] dyn_phase1; + wire [12:0] dyn_phase2; + wire [12:0] dyn_phase3; + wire [12:0] dyn_phase4; + wire pll_pwd; + wire pll_rst; + wire rstodiv; + wire icp_base; + wire [3:0] icp_sel; + wire [2:0] lpfres_sel; + wire cripple_sel; + wire [2:0] phase_sel; + wire phase_dir; + wire phase_step_n; + wire load_phase; + wire [6:0] dyn_mdiv; + + assign clkin2 = 1'b0; + assign clkin_sel = 1'b0; + assign clkin_sel_en = 1'b0; + + assign pll_pwd = 1'b0; + + assign pll_rst = 1'b0; + + assign rstodiv = 1'b0; + +GTP_PLL_E1 #( + .CLKIN_FREQ(CLKIN_FREQ), + .PFDEN_EN(PFDEN_EN), + .VCOCLK_DIV2(VCOCLK_DIV2), + .DYNAMIC_RATIOI_EN(DYNAMIC_RATIOI_EN), + + .DYNAMIC_RATIO0_EN(DYNAMIC_RATIO0_EN), + .DYNAMIC_RATIO1_EN(DYNAMIC_RATIO1_EN), + .DYNAMIC_RATIO2_EN(DYNAMIC_RATIO2_EN), + .DYNAMIC_RATIO3_EN(DYNAMIC_RATIO3_EN), + .DYNAMIC_RATIO4_EN(DYNAMIC_RATIO4_EN), + .DYNAMIC_RATIOF_EN(DYNAMIC_RATIOF_EN), + .STATIC_RATIOI(STATIC_RATIOI), + + .STATIC_RATIO0(STATIC_RATIO0), + .STATIC_RATIO1(STATIC_RATIO1), + .STATIC_RATIO2(STATIC_RATIO2), + .STATIC_RATIO3(STATIC_RATIO3), + .STATIC_RATIO4(STATIC_RATIO4), + .STATIC_RATIOF(STATIC_RATIOF), + .DYNAMIC_DUTY0_EN(DYNAMIC_DUTY0_EN), + .DYNAMIC_DUTY1_EN(DYNAMIC_DUTY1_EN), + .DYNAMIC_DUTY2_EN(DYNAMIC_DUTY2_EN), + .DYNAMIC_DUTY3_EN(DYNAMIC_DUTY3_EN), + .DYNAMIC_DUTY4_EN(DYNAMIC_DUTY4_EN), + .DYNAMIC_DUTYF_EN(DYNAMIC_DUTYF_EN), + .STATIC_DUTY0(STATIC_DUTY0), + .STATIC_DUTY1(STATIC_DUTY1), + .STATIC_DUTY2(STATIC_DUTY2), + .STATIC_DUTY3(STATIC_DUTY3), + .STATIC_DUTY4(STATIC_DUTY4), + .STATIC_DUTYF(STATIC_DUTYF), + .PHASE_ADJUST0_EN(PHASE_ADJUST0_EN), + .PHASE_ADJUST1_EN(PHASE_ADJUST1_EN), + .PHASE_ADJUST2_EN(PHASE_ADJUST2_EN), + .PHASE_ADJUST3_EN(PHASE_ADJUST3_EN), + .PHASE_ADJUST4_EN(PHASE_ADJUST4_EN), + .DYNAMIC_PHASE0_EN(DYNAMIC_PHASE0_EN), + .DYNAMIC_PHASE1_EN(DYNAMIC_PHASE1_EN), + .DYNAMIC_PHASE2_EN(DYNAMIC_PHASE2_EN), + .DYNAMIC_PHASE3_EN(DYNAMIC_PHASE3_EN), + .DYNAMIC_PHASE4_EN(DYNAMIC_PHASE4_EN), + .DYNAMIC_PHASEF_EN(DYNAMIC_PHASEF_EN), + .STATIC_PHASE0(STATIC_PHASE0[2:0]), + .STATIC_PHASE1(STATIC_PHASE1[2:0]), + .STATIC_PHASE2(STATIC_PHASE2[2:0]), + .STATIC_PHASE3(STATIC_PHASE3[2:0]), + .STATIC_PHASE4(STATIC_PHASE4[2:0]), + .STATIC_PHASEF(STATIC_PHASEF[2:0]), + .STATIC_CPHASE0(STATIC_PHASE0[12:3]), + .STATIC_CPHASE1(STATIC_PHASE1[12:3]), + .STATIC_CPHASE2(STATIC_PHASE2[12:3]), + .STATIC_CPHASE3(STATIC_PHASE3[12:3]), + .STATIC_CPHASE4(STATIC_PHASE4[12:3]), + .STATIC_CPHASEF(STATIC_PHASEF[12:3]), + .CLK_CAS0_EN(CLK_CAS0_EN), + .CLK_CAS1_EN(CLK_CAS1_EN), + .CLK_CAS2_EN(CLK_CAS2_EN), + .CLK_CAS3_EN(CLK_CAS3_EN), + .CLK_CAS4_EN(CLK_CAS4_EN), + .CLKOUT5_SEL(CLKOUT5_SEL), + .CLKIN_BYPASS_EN(CLKIN_BYPASS_EN), + .CLKOUT0_SYN_EN(CLKOUT0_GATE_EN), + .CLKOUT0_EXT_SYN_EN(CLKOUT0_EXT_GATE_EN), + .CLKOUT1_SYN_EN(CLKOUT1_GATE_EN), + .CLKOUT2_SYN_EN(CLKOUT2_GATE_EN), + .CLKOUT3_SYN_EN(CLKOUT3_GATE_EN), + .CLKOUT4_SYN_EN(CLKOUT4_GATE_EN), + .CLKOUT5_SYN_EN(CLKOUT5_GATE_EN), + .INTERNAL_FB(INTERNAL_FB), + .EXTERNAL_FB(EXTERNAL_FB), + .RSTODIV_PHASE_EN(RSTODIV_ENABLE), + .SIM_DEVICE(SIM_DEVICE), + .BANDWIDTH(BANDWIDTH) + ) u_pll_e1 ( + .CLKOUT0(clkout0), + .CLKOUT0_EXT(clkout0_2pad), + .CLKOUT1(clkout1), + .CLKOUT2(clkout2), + .CLKOUT3(clkout3), + .CLKOUT4(clkout4), + .CLKOUT5(clkout5), + .CLKSWITCH_FLAG(clkswitch_flag), + .LOCK(pll_lock), + .CLKIN1(clkin1), + .CLKIN2(clkin2), + .CLKFB(clkfb), + .CLKIN_SEL(clkin_sel), + .CLKIN_SEL_EN(clkin_sel_en), + .PFDEN(pfden), + + .RATIOI(dyn_idiv), + .RATIO0(dyn_odiv0), + .RATIO1(dyn_odiv1), + .RATIO2(dyn_odiv2), + .RATIO3(dyn_odiv3), + .RATIO4(dyn_odiv4), + .RATIOF(dyn_fdiv), + .DUTY0(dyn_duty0), + .DUTY1(dyn_duty1), + .DUTY2(dyn_duty2), + .DUTY3(dyn_duty3), + .DUTY4(dyn_duty4), + .DUTYF(), + .PHASE0(dyn_phase0[2:0]), + .PHASE1(dyn_phase1[2:0]), + .PHASE2(dyn_phase2[2:0]), + .PHASE3(dyn_phase3[2:0]), + .PHASE4(dyn_phase4[2:0]), + .PHASEF(), + .CPHASE0(dyn_phase0[12:3]), + .CPHASE1(dyn_phase1[12:3]), + .CPHASE2(dyn_phase2[12:3]), + .CPHASE3(dyn_phase3[12:3]), + .CPHASE4(dyn_phase4[12:3]), + .CPHASEF(), + .CLKOUT0_SYN(clkout0_gate), + .CLKOUT0_EXT_SYN(clkout0_2pad_gate), + .CLKOUT1_SYN(clkout1_gate), + .CLKOUT2_SYN(clkout2_gate), + .CLKOUT3_SYN(clkout3_gate), + .CLKOUT4_SYN(clkout4_gate), + .CLKOUT5_SYN(clkout5_gate), + .PLL_PWD(pll_pwd), + .RST(pll_rst), + .RSTODIV_PHASE(rstodiv) + ); + +endmodule diff --git a/ipcore/SPLL/SPLL_tb.v b/ipcore/SPLL/SPLL_tb.v new file mode 100644 index 0000000..60dd5fe --- /dev/null +++ b/ipcore/SPLL/SPLL_tb.v @@ -0,0 +1,254 @@ +// Created by IP Generator (Version 2021.1-SP7 build 86875) + + + +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2019 PANGO MICROSYSTEMS, INC +// ALL RIGHTS REVERVED. +// +// THE SOURCE CODE CONTAINED HEREIN IS PROPRIETARY TO PANGO MICROSYSTEMS, INC. +// IT SHALL NOT BE REPRODUCED OR DISCLOSED IN WHOLE OR IN PART OR USED BY +// PARTIES WITHOUT WRITTEN AUTHORIZATION FROM THE OWNER. +// +////////////////////////////////////////////////////////////////////////////// +// +// Library: +// Filename:SPLL.v +////////////////////////////////////////////////////////////////////////////// +`timescale 1 ns/1 ps + +module SPLL_tb (); + +localparam CLKIN_FREQ = 50.0; +localparam integer FBDIV_SEL = 0; +localparam FBMODE = "FALSE"; + + +// Generate testbench reset and clock +reg pll_rst; +reg rstodiv; +reg pll_pwd; +reg clkin1; +reg clkin2; +reg clkin_dsel; +reg clkin_dsel_en; +reg pfden; +reg clkout0_gate; +reg clkout0_2pad_gate; +reg clkout1_gate; +reg clkout2_gate; +reg clkout3_gate; +reg clkout4_gate; +reg clkout5_gate; +reg [9:0] dyn_idiv; +reg [9:0] dyn_odiv0; +reg [9:0] dyn_odiv1; +reg [9:0] dyn_odiv2; +reg [9:0] dyn_odiv3; +reg [9:0] dyn_odiv4; +reg [9:0] dyn_fdiv; +reg [9:0] dyn_duty0; +reg [9:0] dyn_duty1; +reg [9:0] dyn_duty2; +reg [9:0] dyn_duty3; +reg [9:0] dyn_duty4; +reg [12:0] dyn_phase0; +reg [12:0] dyn_phase1; +reg [12:0] dyn_phase2; +reg [12:0] dyn_phase3; +reg [12:0] dyn_phase4; +reg err_chk; +reg [2:0] results_cnt; + +reg rst_n; +reg clk_tb; + +wire clkout0; +wire clkout1; +wire clkout2; +wire clkout3; +wire clkout4; +wire clkfb = (FBMODE == "FALSE") ? clkin1 : + (FBDIV_SEL == 0 ) ? clkout0 : + (FBDIV_SEL == 1 ) ? clkout1 : + (FBDIV_SEL == 2 ) ? clkout2 : + (FBDIV_SEL == 3 ) ? clkout3 : + (FBDIV_SEL == 4 ) ? clkout4 : clkin1; + + +initial +begin + rst_n = 0; + #20 + rst_n = 1; +end + +initial +begin + clk_tb = 0; + forever #1 clk_tb = ~clk_tb; +end + +parameter CLOCK_PERIOD1 = (500.0/CLKIN_FREQ); +//parameter CLOCK_PERIOD2 = (500.0/CLKIN_FREQ); + +initial +begin + clkin1 = 0; + forever #(CLOCK_PERIOD1) clkin1 = ~clkin1; +end + + +initial +begin + pll_pwd = 0; + pll_rst = 0; + rstodiv = 0; + clkin_dsel = 0; + clkin_dsel_en = 0; + pfden = 0; + clkout0_gate = 0; + clkout0_2pad_gate = 0; + clkout1_gate = 0; + clkout2_gate = 0; + clkout3_gate = 0; + clkout4_gate = 0; + clkout5_gate = 0; + dyn_idiv = 10'd2; + dyn_fdiv = 10'd32; + dyn_odiv0 = 10'd100; + dyn_odiv1 = 10'd100; + dyn_odiv2 = 10'd100; + dyn_odiv3 = 10'd100; + dyn_odiv4 = 10'd100; + dyn_duty0 = 10'd100; + dyn_duty1 = 10'd100; + dyn_duty2 = 10'd100; + dyn_duty3 = 10'd100; + dyn_duty4 = 10'd100; + dyn_phase0 = 13'd16; + dyn_phase1 = 13'd16; + dyn_phase2 = 13'd16; + dyn_phase3 = 13'd16; + dyn_phase4 = 13'd16; + + #10 + pll_pwd = 1; + #20 + pll_pwd = 0; + + pll_rst = 0; + #10 + pll_rst = 1; + #20 + pll_rst = 0; + + #1000000 + dyn_odiv0 = 10'd200; + dyn_odiv1 = 10'd200; + dyn_odiv2 = 10'd200; + dyn_odiv3 = 10'd200; + dyn_odiv4 = 10'd200; + dyn_duty0 = 10'd200; + dyn_duty1 = 10'd200; + dyn_duty2 = 10'd200; + dyn_duty3 = 10'd200; + dyn_duty4 = 10'd200; + #3000000 + $finish; +end + +initial +begin + $display("Simulation Starts.") ; + $display("Simulation is done.") ; + if (|results_cnt) + $display("Simulation Failed due to Error Found.") ; + else + $display("Simulation Success.") ; +end + + +GTP_GRS GRS_INST( + .GRS_N(1'b1) + ); + +SPLL U_SPLL ( +.clkout0(clkout0), + .clkout1(clkout1), + .clkout2(clkout2), + + .clkin1(clkin1), + + .pll_lock(pll_lock) + ); + + +//******************Results Cheching************************ + +reg [2:0] pll_lock_shift; +wire pll_lock_pulse = ~pll_lock_shift[2] & pll_lock_shift[1]; +always @( posedge clk_tb or negedge rst_n ) +begin + if (!rst_n) + begin + pll_lock_shift <= 3'd0; + end + else + begin + pll_lock_shift[0] <= pll_lock; + pll_lock_shift[2:1] <= pll_lock_shift[1:0]; + end +end + +reg [1:0] pll_lock_pulse_cnt; +always @( posedge clk_tb or negedge rst_n ) +begin + if (!rst_n) + begin + pll_lock_pulse_cnt <= 2'd0; + end + else + begin + if (pll_lock_pulse) + pll_lock_pulse_cnt <= pll_lock_pulse_cnt + 1; + else ; + end +end + + +always @( posedge clk_tb or negedge rst_n ) +begin + if (!rst_n) + begin + err_chk <= 1'b0; + end + else + begin + if ((!pll_lock) && (^pll_lock_pulse_cnt)) + err_chk <= 1'b1; + else if (pll_lock_pulse_cnt[1]) + err_chk <= 1'b1; + else + err_chk <= 1'b0; + end +end +always @(posedge clk_tb or negedge rst_n) +begin + if (!rst_n) + results_cnt <= 3'b000 ; + else if (&results_cnt) + results_cnt <= 3'b100 ; + else if (err_chk) + results_cnt <= results_cnt + 3'd1 ; +end + + +integer result_fid; +initial begin + result_fid = $fopen ("sim_results.log","a"); + $fmonitor(result_fid,"err_chk=%b", err_chk); +end + +endmodule diff --git a/ipcore/SPLL/SPLL_tmpl.v b/ipcore/SPLL/SPLL_tmpl.v new file mode 100644 index 0000000..0d0a436 --- /dev/null +++ b/ipcore/SPLL/SPLL_tmpl.v @@ -0,0 +1,15 @@ +// Created by IP Generator (Version 2021.1-SP7 build 86875) +// Instantiation Template +// +// Insert the following codes into your Verilog file. +// * Change the_instance_name to your own instance name. +// * Change the signal names in the port associations + + +SPLL the_instance_name ( + .clkin1(clkin1), // input + .pll_lock(pll_lock), // output + .clkout0(clkout0), // output + .clkout1(clkout1), // output + .clkout2(clkout2) // output +); diff --git a/ipcore/SPLL/SPLL_tmpl.vhdl b/ipcore/SPLL/SPLL_tmpl.vhdl new file mode 100644 index 0000000..c75c06f --- /dev/null +++ b/ipcore/SPLL/SPLL_tmpl.vhdl @@ -0,0 +1,27 @@ +-- Created by IP Generator (Version 2021.1-SP7 build 86875) +-- Instantiation Template +-- +-- Insert the following codes into your VHDL file. +-- * Change the_instance_name to your own instance name. +-- * Change the net names in the port map. + + +COMPONENT SPLL + PORT ( + clkin1 : IN STD_LOGIC; + pll_lock : OUT STD_LOGIC; + clkout0 : OUT STD_LOGIC; + clkout1 : OUT STD_LOGIC; + clkout2 : OUT STD_LOGIC + ); +END COMPONENT; + + +the_instance_name : SPLL + PORT MAP ( + clkin1 => clkin1, + pll_lock => pll_lock, + clkout0 => clkout0, + clkout1 => clkout1, + clkout2 => clkout2 + ); diff --git a/ipcore/SPLL/generate.log b/ipcore/SPLL/generate.log new file mode 100644 index 0000000..b19aeb5 --- /dev/null +++ b/ipcore/SPLL/generate.log @@ -0,0 +1,17 @@ +IP Generator (Version 2021.1-SP7 build 86875) +Check out license ... +Start generating at 2024-01-07 14:25 +Instance: SPLL (D:\workspace\fpga_demo\led_test\ipcore\SPLL\SPLL.idf) +IP: PLL (1.5) +Part: Logos-PGL22G-MBG324--6 +Create directory 'rtl' ... +Copy 'ipml_pll_wrapper_v1_4.v.xml' ... +Compile file 'ipml_pll_wrapper_v1_4.v.xml' to 'SPLL.v' ... +Found top module 'SPLL' in file 'SPLL.v'. +Copy 'ipml_pll_wrapper_v1_4_tb.v.xml' ... +Compile file 'ipml_pll_wrapper_v1_4_tb.v.xml' to 'SPLL_tb.v' ... +Create template file 'SPLL_tmpl.v' ... +Create template file 'SPLL_tmpl.vhdl' ... +There is 1 source file to synthesize. +Synthesis is disabled. +Done: 0 error(s), 0 warning(s) diff --git a/led_test.fdc b/led_test.fdc index acac9ec..c292cfa 100644 --- a/led_test.fdc +++ b/led_test.fdc @@ -12,3 +12,21 @@ define_attribute {p:core_board_debug_led} {PAP_IO_VCCIO} {3.3} define_attribute {p:core_board_debug_led} {PAP_IO_STANDARD} {LVCMOS33} define_attribute {p:core_board_debug_led} {PAP_IO_DRIVE} {4} define_attribute {p:core_board_debug_led} {PAP_IO_SLEW} {SLOW} +define_attribute {p:spi1_tx_pin} {PAP_IO_DIRECTION} {OUTPUT} +define_attribute {p:spi1_tx_pin} {PAP_IO_LOC} {U13} +define_attribute {p:spi1_tx_pin} {PAP_IO_VCCIO} {3.3} +define_attribute {p:spi1_tx_pin} {PAP_IO_STANDARD} {LVCMOS33} +define_attribute {p:spi1_tx_pin} {PAP_IO_DRIVE} {4} +define_attribute {p:spi1_tx_pin} {PAP_IO_SLEW} {SLOW} +define_attribute {p:spi1_clk_pin} {PAP_IO_DIRECTION} {INPUT} +define_attribute {p:spi1_clk_pin} {PAP_IO_LOC} {V13} +define_attribute {p:spi1_clk_pin} {PAP_IO_VCCIO} {3.3} +define_attribute {p:spi1_clk_pin} {PAP_IO_STANDARD} {LVTTL33} +define_attribute {p:spi1_cs_pin} {PAP_IO_DIRECTION} {INPUT} +define_attribute {p:spi1_cs_pin} {PAP_IO_LOC} {V14} +define_attribute {p:spi1_cs_pin} {PAP_IO_VCCIO} {3.3} +define_attribute {p:spi1_cs_pin} {PAP_IO_STANDARD} {LVTTL33} +define_attribute {p:spi1_rx_pin} {PAP_IO_DIRECTION} {INPUT} +define_attribute {p:spi1_rx_pin} {PAP_IO_LOC} {U14} +define_attribute {p:spi1_rx_pin} {PAP_IO_VCCIO} {3.3} +define_attribute {p:spi1_rx_pin} {PAP_IO_STANDARD} {LVTTL33} diff --git a/led_test.pds b/led_test.pds index 53a3d69..f26d896 100644 --- a/led_test.pds +++ b/led_test.pds @@ -1,5 +1,5 @@ (_flow fab_demo "2021.1-SP7" - (_comment "Generated by Fabric Compiler (version on 2021.1-SP7) at Sun Jan 7 13:39:07 2024") + (_comment "Generated by Fabric Compiler (version on 2021.1-SP7) at Sun Jan 7 14:48:21 2024") (_version "1.0.5") (_status "initial") (_project @@ -27,7 +27,7 @@ ) (_file "source/src/top.v" + "Top:" (_format verilog) - (_timespec "2024-01-07T13:39:05") + (_timespec "2024-01-07T14:48:21") ) (_file "source/src/uart_tx.v" (_format verilog) @@ -47,7 +47,7 @@ ) (_file "source/src/spi_reg_reader.v" (_format verilog) - (_timespec "2023-12-15T22:06:08") + (_timespec "2024-01-07T13:55:23") ) (_file "source/src/src_ttl_parser.v" (_format verilog) @@ -71,7 +71,7 @@ ) (_file "source/src/zutils/zutils_register.v" (_format verilog) - (_timespec "2023-12-31T16:33:39") + (_timespec "2024-01-07T13:59:36") ) (_file "source/src/zutils/zutils_multiplexer_4t1.v" (_format verilog) @@ -81,6 +81,10 @@ (_format verilog) (_timespec "2024-01-06T19:12:28") ) + (_file "source/src/zutils/zutils_signal_filter.v" + (_format verilog) + (_timespec "2024-01-07T13:48:54") + ) ) ) (_widget wgt_my_ips_src @@ -95,7 +99,7 @@ ) ) (_ip "ipcore/DebugCoreIst/DebugCoreIst.idf" - (_timespec "2024-01-06T22:31:25") + (_timespec "2024-01-07T14:18:11") (_ip_source_item "ipcore/DebugCoreIst/rtl/ips_dbc_cfg_reg_file_v1_0.v" (_timespec "2021-12-07T10:55:24") ) @@ -130,7 +134,13 @@ (_timespec "2021-12-07T10:55:24") ) (_ip_source_item "ipcore/DebugCoreIst/DebugCoreIst.v" - (_timespec "2024-01-06T22:31:25") + (_timespec "2024-01-07T14:18:11") + ) + ) + (_ip "ipcore/SPLL/SPLL.idf" + (_timespec "2024-01-07T14:25:26") + (_ip_source_item "ipcore/SPLL/SPLL.v" + (_timespec "2024-01-07T14:25:26") ) ) ) @@ -139,7 +149,7 @@ (_input (_file "led_test.fdc" (_format fdc) - (_timespec "2024-01-06T19:22:21") + (_timespec "2024-01-07T14:16:20") ) ) ) @@ -182,17 +192,17 @@ (_db_output (_file "compile/Top_comp.adf" (_format adif) - (_timespec "2024-01-06T22:31:35") + (_timespec "2024-01-07T14:45:41") ) ) (_output (_file "compile/Top.cmr" (_format verilog) - (_timespec "2024-01-06T22:31:34") + (_timespec "2024-01-07T14:45:40") ) (_file "compile/cmr.db" (_format text) - (_timespec "2024-01-06T22:31:35") + (_timespec "2024-01-07T14:45:41") ) ) ) @@ -208,21 +218,21 @@ (_db_output (_file "synthesize/Top_syn.adf" (_format adif) - (_timespec "2024-01-06T22:31:39") + (_timespec "2024-01-07T14:45:44") ) ) (_output (_file "synthesize/Top_syn.vm" (_format structural_verilog) - (_timespec "2024-01-06T22:31:39") + (_timespec "2024-01-07T14:45:44") ) (_file "synthesize/Top.snr" (_format text) - (_timespec "2024-01-06T22:31:39") + (_timespec "2024-01-07T14:45:44") ) (_file "synthesize/snr.db" (_format text) - (_timespec "2024-01-06T22:31:39") + (_timespec "2024-01-07T14:45:44") ) ) ) @@ -243,21 +253,21 @@ (_db_output (_file "device_map/Top_map.adf" (_format adif) - (_timespec "2024-01-06T22:31:41") + (_timespec "2024-01-07T14:45:47") ) ) (_output (_file "device_map/Top_dmr.prt" (_format text) - (_timespec "2024-01-06T22:31:41") + (_timespec "2024-01-07T14:45:47") ) (_file "device_map/Top.dmr" (_format text) - (_timespec "2024-01-06T22:31:41") + (_timespec "2024-01-07T14:45:47") ) (_file "device_map/dmr.db" (_format text) - (_timespec "2024-01-06T22:31:41") + (_timespec "2024-01-07T14:45:47") ) ) ) @@ -266,7 +276,7 @@ (_input (_file "device_map/led_test.pcf" (_format pcf) - (_timespec "2024-01-06T22:31:41") + (_timespec "2024-01-07T14:45:47") ) ) ) @@ -280,33 +290,33 @@ (_db_output (_file "place_route/Top_pnr.adf" (_format adif) - (_timespec "2024-01-06T22:31:50") + (_timespec "2024-01-07T14:45:55") ) ) (_output (_file "place_route/Top.prr" (_format text) - (_timespec "2024-01-06T22:31:50") + (_timespec "2024-01-07T14:45:55") ) (_file "place_route/Top_prr.prt" (_format text) - (_timespec "2024-01-06T22:31:50") + (_timespec "2024-01-07T14:45:55") ) (_file "place_route/clock_utilization.txt" (_format text) - (_timespec "2024-01-06T22:31:50") + (_timespec "2024-01-07T14:45:55") ) (_file "place_route/Top_plc.adf" (_format adif) - (_timespec "2024-01-06T22:31:48") + (_timespec "2024-01-07T14:45:53") ) (_file "place_route/Top_pnr.netlist" (_format text) - (_timespec "2024-01-06T22:31:50") + (_timespec "2024-01-07T14:45:55") ) (_file "place_route/prr.db" (_format text) - (_timespec "2024-01-06T22:31:50") + (_timespec "2024-01-07T14:45:55") ) ) ) @@ -322,17 +332,17 @@ (_db_output (_file "report_timing/Top_rtp.adf" (_format adif) - (_timespec "2024-01-06T22:31:54") + (_timespec "2024-01-07T14:45:59") ) ) (_output (_file "report_timing/Top.rtr" (_format text) - (_timespec "2024-01-06T22:31:54") + (_timespec "2024-01-07T14:45:59") ) (_file "report_timing/rtr.db" (_format text) - (_timespec "2024-01-06T22:31:54") + (_timespec "2024-01-07T14:45:59") ) ) ) @@ -356,19 +366,19 @@ (_output (_file "generate_bitstream/Top.sbit" (_format text) - (_timespec "2024-01-06T22:31:58") + (_timespec "2024-01-07T14:46:04") ) (_file "generate_bitstream/Top.smsk" (_format text) - (_timespec "2024-01-06T22:31:58") + (_timespec "2024-01-07T14:46:04") ) (_file "generate_bitstream/Top.bgr" (_format text) - (_timespec "2024-01-06T22:31:58") + (_timespec "2024-01-07T14:46:04") ) (_file "generate_bitstream/bgr.db" (_format text) - (_timespec "2024-01-06T22:31:59") + (_timespec "2024-01-07T14:46:05") ) ) ) diff --git a/source/src/spi_reg_reader.v b/source/src/spi_reg_reader.v index c4f92fa..bb2a907 100644 --- a/source/src/spi_reg_reader.v +++ b/source/src/spi_reg_reader.v @@ -8,9 +8,9 @@ module spi_reg_reader ( output reg wr_en, input wire [31:0] rd_data, //received serial data // - input wire spi_cs_pin, - input wire spi_clk_pin, - input wire spi_rx_pin, + input wire spi_cs_pin, // + input wire spi_clk_pin, // + input wire spi_rx_pin, // output reg spi_tx_pin ); @@ -22,6 +22,30 @@ module spi_reg_reader ( parameter STATE_WRITE_REG = 5; parameter ADDRESS_WIDTH_BYTE_NUM = 2; + zutils_signal_filter #(.FILTER_COUNT(2)) cs_filter ( + .clk(clk), + .rst_n(rst_n), + .in(spi_cs_pin), + .out(spi_cs_pin_after_filter) + ); + + zutils_signal_filter #(.FILTER_COUNT(2)) clk_filter ( + .clk(clk), + .rst_n(rst_n), + .in(spi_clk_pin), + .out(spi_clk_pin_after_filter) + ); + + zutils_signal_filter #(.FILTER_COUNT(2)) spi_rx_filter ( + .clk(clk), + .rst_n(rst_n), + .in(spi_rx_pin), + .out(spi_rx_pin_after_filter) + ); + + + + // // 捕获SPI_CS的下降沿 和 SPI_CLK的上升沿 @@ -32,15 +56,15 @@ module spi_reg_reader ( reg spi_cs_last_state = 0; reg spi_clk_last_state = 0; - assign spi_clk_posedge_tri = spi_clk_pin & ~spi_clk_last_state; - assign spi_clk_negedge_tri = ~spi_clk_pin & spi_clk_last_state; + assign spi_clk_posedge_tri = spi_clk_pin_after_filter & ~spi_clk_last_state; + assign spi_clk_negedge_tri = ~spi_clk_pin_after_filter & spi_clk_last_state; always @(posedge clk or negedge rst_n) begin if (!rst_n) begin spi_cs_last_state <= 1; spi_clk_last_state <= 1; end else begin - spi_cs_last_state <= spi_cs_pin; - spi_clk_last_state <= spi_clk_pin; + spi_cs_last_state <= spi_cs_pin_after_filter; + spi_clk_last_state <= spi_clk_pin_after_filter; end end @@ -76,7 +100,7 @@ module spi_reg_reader ( bit_cnt <= 0; first_edge <= 1; end else begin - if (spi_cs_pin) begin + if (spi_cs_pin_after_filter) begin bit_cnt <= 0; first_edge <= 1; end else begin @@ -105,7 +129,7 @@ module spi_reg_reader ( if (!rst_n) begin spi_byte_cnt <= 0; end else begin - if (spi_cs_pin) begin + if (spi_cs_pin_after_filter) begin spi_byte_cnt <= 0; end else begin if (spi_clk_negedge_tri && bit_cnt == 7) begin @@ -135,13 +159,13 @@ module spi_reg_reader ( spi_rx_1byte_data <= 0; spi_rx_1byte_data_valid <= 0; end else begin - if (spi_cs_pin) begin + if (spi_cs_pin_after_filter) begin spi_rx_1byte_data <= 0; spi_rx_1byte_data_valid <= 0; end else begin if (spi_clk_posedge_tri) begin - spi_rx_1byte_data[bit_cnt] <= spi_rx_pin; + spi_rx_1byte_data[bit_cnt] <= spi_rx_pin_after_filter; end if (spi_clk_negedge_tri && bit_cnt == 7) spi_rx_1byte_data_valid <= 1; @@ -173,7 +197,7 @@ module spi_reg_reader ( spi_rx_data_cache[7] <= 0; end else begin - if (spi_cs_pin) begin + if (spi_cs_pin_after_filter) begin // 失能状态 rx_byte_count <= 0; spi_rx_data_cache[0] <= 0; @@ -268,10 +292,10 @@ module spi_reg_reader ( wr_en <= 0; has_trigger_wr_en <= 0; end else begin - if (spi_cs_pin) begin + if (spi_cs_pin_after_filter) begin wr_en <= 0; has_trigger_wr_en <= 0; - end else if (!spi_cs_pin && // + end else if (!spi_cs_pin_after_filter && // !has_trigger_wr_en && // spi_byte_cnt == ADDRESS_WIDTH_BYTE_NUM + 4 && // spi_rx_data_cache[ADDRESS_WIDTH_BYTE_NUM-1][7]) begin diff --git a/source/src/top.v b/source/src/top.v index c3d6d24..1826af3 100644 --- a/source/src/top.v +++ b/source/src/top.v @@ -7,17 +7,55 @@ module Top ( input wire spi1_cs_pin, input wire spi1_clk_pin, input wire spi1_rx_pin, - output reg spi1_tx_pin, + output wire spi1_tx_pin, //SPI 串行总线2 input wire spi2_cs_pin, input wire spi2_clk_pin, input wire spi2_rx_pin, - output reg spi2_tx_pin, + output wire spi2_tx_pin, output wire core_board_debug_led ); + SPLL spll ( + .clkin1(sys_clk), // input + .pll_lock(pll_lock), // output + .clkout0(sys_clk_25m), // output + .clkout1(sys_clk_10m), // output + .clkout2(sys_clk_5m) // output + ); + + + /******************************************************************************* + * 调试器 * + *******************************************************************************/ + // wire [6:0] trig0_i; + // JtagHubIst jtag_hub_ist ( + // .resetn_i(rst_n), // input + // .drck_o (drck_o), // output + // .hub_tdi (hub_tdi), // output + // .capt_o (capt_o), // output + // .shift_o (shift_o), // output + // .conf_sel(conf_sel), // output [14:0] + // .id_o (id_o), // output [4:0] + // .hub_tdo (hub_tdo) // input [14:0] + // ); + + // DebugCoreIst debug_core_ist ( + // .hub_tdi (hub_tdi), // input + // .hub_tdo (hub_tdo[0]), // output + // .id_i (id_o), // input [4:0] + // .capt_i (capt_o), // input + // .shift_i (shift_o), // input + // .conf_sel(conf_sel[0]), // input + // .drck_in (drck_o), // input + // .clk (sys_clk), // input + // .resetn_i(rst_n), // input + // .trig0_i (trig0_i) + // ); + + /******************************************************************************* * DEBUG_LED * *******************************************************************************/ @@ -37,9 +75,7 @@ module Top ( wire [31:0] reg_reader_bus_wr_data; wire reg_reader_bus_wr_en; wire [31:0] reg_reader_bus_rd_data; - spi_reg_reader #( - .REG_START_ADD(16'h0000) - ) spi1_reg_reader_inst ( + spi_reg_reader spi1_reg_reader_inst ( .clk (sys_clk), .rst_n(rst_n), @@ -57,18 +93,22 @@ module Top ( /******************************************************************************* * TEST_SPI_REG * *******************************************************************************/ - zutils_register16 #( .REG_START_ADD(16'h0020) ) core_board_debug_led_reg ( - .clk (sys_clk), + .clk(sys_clk), .rst_n(rst_n), .addr(reg_reader_bus_addr), .wr_data(reg_reader_bus_wr_data), .wr_en(reg_reader_bus_wr_en), - .rd_data(reg_reader_bus_rd_data), - .reg0(core_board_debug_led) + .rd_data(reg_reader_bus_rd_data) ); + assign trig0_i[0] = sys_clk_5m; + assign trig0_i[1] = spi2_clk_pin; + assign trig0_i[2] = spi1_rx_pin; + assign trig0_i[3] = spi1_tx_pin; + assign trig0_i[4] = spi1_cs_pin; + endmodule diff --git a/source/src/zutils/zutils_register.v b/source/src/zutils/zutils_register.v index c73a467..e07ebd9 100644 --- a/source/src/zutils/zutils_register.v +++ b/source/src/zutils/zutils_register.v @@ -31,7 +31,7 @@ module zutils_register16 #( localparam ADD_NUM = 16; //寄存器数量 parameter REG_END_ADD = REG_START_ADD + ADD_NUM - 1; //寄存器结束地址 - reg [31:0] data[REG_START_ADD:REG_END_ADD]; + reg [31:0] data[0:ADD_NUM]; assign reg0 = data[0]; @@ -58,10 +58,11 @@ module zutils_register16 #( data[i] <= 0; end end else begin - if (wr_en && addr >= REG_START_ADD && addr <= REG_END_ADD) data[addr] <= wr_data; + if (wr_en && addr >= REG_START_ADD && addr <= REG_END_ADD) + data[addr-REG_START_ADD] <= wr_data; end end - assign rd_data = (addr >= REG_START_ADD && addr <= REG_END_ADD) ? data[addr] : 31'bz; + assign rd_data = (addr >= REG_START_ADD && addr <= REG_END_ADD) ? data[addr-REG_START_ADD] : 31'bz; endmodule diff --git a/source/src/zutils/zutils_signal_filter.v b/source/src/zutils/zutils_signal_filter.v new file mode 100644 index 0000000..8db98bf --- /dev/null +++ b/source/src/zutils/zutils_signal_filter.v @@ -0,0 +1,33 @@ +module zutils_signal_filter #( + parameter FILTER_COUNT = 5 +) ( + input clk, //clock input + input rst_n, //asynchronous reset input, low active + input wire in, + output reg out +); + reg [31:0] counter; + always @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + counter <= 0; + end else begin + if (out != in) begin + counter <= counter + 1; + end else begin + counter <= 0; + end + end + end + + always @(posedge clk or negedge rst_n) begin + if (!rst_n) begin + out <= in; + end else begin + if (counter == FILTER_COUNT) begin + out <= in; + end else begin + out <= out; + end + end + end +endmodule