Anatoliy Chigirinskiy 1 年間 前
コミット
2194eebc4a
96 ファイル変更34061 行追加0 行削除
  1. 125 0
      script/recreate.tcl
  2. 123 0
      src/constr/RF_FPGA.cst
  3. 143 0
      src/constr/RF_FPGA.rao
  4. 21 0
      src/constr/RF_FPGA.sdc
  5. 24 0
      src/src/ClkGen/ClkGen.ipc
  6. 33 0
      src/src/ClkGen/ClkGen.mod
  7. 18 0
      src/src/ClkGen/ClkGen_tmp.v
  8. 24 0
      src/src/ClkGen/gowin_rpll/gClkGen.ipc
  9. 33 0
      src/src/ClkGen/gowin_rpll/gClkGen.mod
  10. 20 0
      src/src/ClkGen/gowin_rpll/gClkGen_tmp.v
  11. 113 0
      src/src/ClkGenGowin/ClkGenGowin.v
  12. 114 0
      src/src/ControlUnit/ControlUnit.v
  13. 80 0
      src/src/I2C/I2CSM.v
  14. 489 0
      src/src/I2C/temp_i2c_master_ver2.v
  15. 246 0
      src/src/NCO/CordicNco.v
  16. 74 0
      src/src/NCO/CordicRotation.v
  17. 184 0
      src/src/QuadSPI/QuadSPIs.v
  18. 49 0
      src/src/RAM/RAM.v
  19. 255 0
      src/src/SPI/SPIm.v
  20. 256 0
      src/src/SPI/SPImDDS.v
  21. 95 0
      src/src/SPI/SPIs.v
  22. 515 0
      src/src/Sim/SPIm_tb.v
  23. 288 0
      src/src/Sim/tb_RF_FPGA.v
  24. 1373 0
      src/src/Top/RFTop.v
  25. 30 0
      src/src/fifo_top/DDSFifo/fifo_top/FifoDDS.ipc
  26. 1996 0
      src/src/fifo_top/DDSFifo/fifo_top/FifoDDS.v
  27. 4576 0
      src/src/fifo_top/DDSFifo/fifo_top/FifoDDS.vo
  28. 27 0
      src/src/fifo_top/DDSFifo/fifo_top/FifoDDS_tmp.v
  29. 22 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FIFO.prj
  30. 46 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS.log
  31. 1996 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS.vg
  32. 1789 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS_syn.rpt.html
  33. 44 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS_syn_resource.html
  34. 2 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS_syn_rsc.xml
  35. 27 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS_tmp.v
  36. 8 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/fifo_define.v
  37. 6 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/fifo_parameter.v
  38. 1 0
      src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/project.ini
  39. 420 0
      src/src/fifo_top/FifoCtrl.v
  40. 30 0
      src/src/fifo_top/FifoRxRF.ipc
  41. 1016 0
      src/src/fifo_top/FifoRxRF.v
  42. 2368 0
      src/src/fifo_top/FifoRxRF.vo
  43. 27 0
      src/src/fifo_top/FifoRxRF_tmp.v
  44. 30 0
      src/src/fifo_top/MAX2870FIFO/FifoMax2870.ipc
  45. 1121 0
      src/src/fifo_top/MAX2870FIFO/FifoMax2870.vo
  46. 25 0
      src/src/fifo_top/MAX2870FIFO/FifoMax2870_tmp.v
  47. 30 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870.ipc
  48. 1380 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870.v
  49. 3142 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870.vo
  50. 25 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870_tmp.v
  51. 22 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FIFO.prj
  52. 46 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870.log
  53. 1380 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870.vg
  54. 1789 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870_syn.rpt.html
  55. 44 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870_syn_resource.html
  56. 2 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870_syn_rsc.xml
  57. 25 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870_tmp.v
  58. 6 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/fifo_define.v
  59. 6 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/fifo_parameter.v
  60. 1 0
      src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/project.ini
  61. 22 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/FIFO.prj
  62. 46 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870.log
  63. 420 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870.vg
  64. 1709 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870_syn.rpt.html
  65. 44 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870_syn_resource.html
  66. 2 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870_syn_rsc.xml
  67. 25 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870_tmp.v
  68. 6 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/fifo_define.v
  69. 6 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/fifo_parameter.v
  70. 1 0
      src/src/fifo_top/MAX2870FIFO/temp/FIFO/project.ini
  71. 22 0
      src/src/fifo_top/temp/FIFO/FIFO.prj
  72. 46 0
      src/src/fifo_top/temp/FIFO/FifoRxRF.log
  73. 1016 0
      src/src/fifo_top/temp/FIFO/FifoRxRF.vg
  74. 1789 0
      src/src/fifo_top/temp/FIFO/FifoRxRF_syn.rpt.html
  75. 44 0
      src/src/fifo_top/temp/FIFO/FifoRxRF_syn_resource.html
  76. 2 0
      src/src/fifo_top/temp/FIFO/FifoRxRF_syn_rsc.xml
  77. 27 0
      src/src/fifo_top/temp/FIFO/FifoRxRF_tmp.v
  78. 8 0
      src/src/fifo_top/temp/FIFO/fifo_define.v
  79. 6 0
      src/src/fifo_top/temp/FIFO/fifo_parameter.v
  80. 1 0
      src/src/fifo_top/temp/FIFO/project.ini
  81. 24 0
      src/src/gClkGen/gClkGen.ipc
  82. 33 0
      src/src/gClkGen/gClkGen.mod
  83. 64 0
      src/src/gClkGen/gClkGen.v
  84. 19 0
      src/src/gClkGen/gClkGen_tmp.v
  85. 28 0
      src/src/gowin_rpll/ClkGen.ipc
  86. 35 0
      src/src/gowin_rpll/ClkGen.mod
  87. 19 0
      src/src/gowin_rpll/ClkGen_tmp.v
  88. 28 0
      src/src/gowin_rpll/gClkGen.ipc
  89. 35 0
      src/src/gowin_rpll/gClkGen.mod
  90. 64 0
      src/src/gowin_rpll/gClkGen.v
  91. 20 0
      src/src/gowin_rpll/gClkGen_tmp.v
  92. 28 0
      src/src/gowin_rpll/gowin_rpll/ClkGen.ipc
  93. 35 0
      src/src/gowin_rpll/gowin_rpll/ClkGen.mod
  94. 64 0
      src/src/gowin_rpll/gowin_rpll/ClkGen.v
  95. 19 0
      src/src/gowin_rpll/gowin_rpll/ClkGen_tmp.v
  96. 104 0
      src/src/initRst/InitRst.v

+ 125 - 0
script/recreate.tcl

@@ -0,0 +1,125 @@
+create_project -name RF_FPGA -dir C:/RF_FPGA_PROJ_Test -pn GW1N-LV9PG256C6/I5 -device_version C -force 
+
+
+add_file -type verilog "/RF_FPGA/src/src/ClkGenGowin/ClkGenGowin.v"
+add_file -type verilog "/RF_FPGA/src/src/ControlUnit/ControlUnit.v"
+add_file -type verilog "/RF_FPGA/src/src/NCO/CordicNco.v"
+add_file -type verilog "/RF_FPGA/src/src/I2C/I2CSM.v"
+add_file -type verilog "/RF_FPGA/src/src/I2C/temp_i2c_master_ver2.v"
+add_file -type verilog "/RF_FPGA/src/src/NCO/CordicRotation.v"
+add_file -type verilog "/RF_FPGA/src/src/QuadSPI/QuadSPIs.v"
+add_file -type verilog "/RF_FPGA/src/src/Top/RFTop.v"
+add_file -type verilog "/RF_FPGA/src/src/SPI/SPIm.v"
+add_file -type verilog "/RF_FPGA/src/src/SPI/SPImDDS.v"
+add_file -type verilog "/RF_FPGA/src/src/SPI/SPIs.v"
+add_file -type verilog "/RF_FPGA/src/src/fifo_top/FifoCtrl.v"
+add_file -type verilog "/RF_FPGA/src/src/fifo_top/DDSFifo/fifo_top/FifoDDS.v"
+add_file -type verilog "/RF_FPGA/src/src/fifo_top/FifoRxRF.v"
+add_file -type verilog "/RF_FPGA/src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870.v"
+add_file -type verilog "/RF_FPGA/src/src/gowin_rpll/gClkGen.v"
+add_file -type verilog "/RF_FPGA/src/src/gowin_rpll/gowin_rpll/ClkGen.v"
+add_file -type verilog "/RF_FPGA/src/src/initRst/InitRst.v"
+add_file -type cst "/RF_FPGA/src/constr/RF_FPGA.cst"
+add_file -type sdc "/RF_FPGA/src/constr/RF_FPGA.sdc"
+
+
+
+
+set_option -synthesis_tool gowinsynthesis
+set_option -output_base_name RF_FPGA
+set_option -top_module RFTop
+set_option -gen_verilog_sim_netlist 1
+
+set_option -print_all_synthesis_warning 0
+set_option -allow_duplicate_modules 0
+set_option -multi_file_compilation_unit 1
+set_option -auto_constraint_io 0
+set_option -default_enum_encoding default
+set_option -compiler_compatible 1
+set_option -disable_io_insertion 0
+set_option -fix_gated_and_generated_clocks 1
+set_option -frequency Auto
+set_option -looplimit 2000
+set_option -maxfan 10000
+set_option -pipe 1
+set_option -resolve_multiple_driver 0
+set_option -resource_sharing 1
+set_option -retiming 0
+set_option -run_prop_extract 1
+set_option -rw_check_on_ram 0
+set_option -supporttypedflt 0
+set_option -symbolic_fsm_compiler 1
+set_option -synthesis_onoff_pragma 0
+set_option -update_models_cp 0
+set_option -write_apr_constraint 1
+set_option -gen_sdf 0
+set_option -gen_io_cst 0
+set_option -vccaux 3.3
+set_option -gen_ibis 0
+set_option -gen_posp 0
+set_option -gen_text_timing_rpt 0
+set_option -gen_verilog_sim_netlist 1
+set_option -gen_vhdl_sim_netlist 0
+set_option -show_init_in_vo 0
+set_option -show_all_warn 0
+set_option -timing_driven 1
+set_option -ireg_in_iob 1
+set_option -oreg_in_iob 1
+set_option -ioreg_in_iob 1
+set_option -replicate_resources 0
+set_option -cst_warn_to_error 1
+set_option -rpt_auto_place_io_info 0
+set_option -correct_hold_violation 1
+set_option -place_option 0
+set_option -route_option 0
+set_option -clock_route_order 0
+set_option -route_maxfan 23
+set_option -use_jtag_as_gpio 0
+set_option -use_sspi_as_gpio 1
+set_option -use_mspi_as_gpio 0
+set_option -use_ready_as_gpio 0
+set_option -use_done_as_gpio 0
+set_option -use_reconfign_as_gpio 0
+set_option -use_mode_as_gpio 0
+set_option -use_i2c_as_gpio 0
+set_option -use_cpu_as_gpio 0
+set_option -power_on_reset_monitor 1
+set_option -bit_format bin
+set_option -bit_crc_check 1
+set_option -bit_compress 0
+set_option -bit_encrypt 0
+set_option -bit_encrypt_key 00000000000000000000000000000000
+set_option -bit_security 1
+set_option -bit_incl_bsram_init 1
+set_option -bg_programming off
+set_option -hotboot 0
+set_option -i2c_slave_addr 00
+set_option -secure_mode 0
+set_option -loading_rate default
+set_option -program_done_bypass 0
+set_option -wakeup_mode 0
+set_option -user_code default
+set_option -unused_pin default
+set_option -multi_boot 1
+set_option -multiboot_address_width 24
+set_option -multiboot_mode normal
+set_option -multiboot_spi_flash_address 00000000
+set_option -mspi_jump 0
+set_option -turn_off_bg 0
+set_option -vccx 3.3
+set_option -seu_handler 0
+set_option -seu_handler_checksum 0
+set_option -seu_handler_mode auto
+set_option -error_detection false
+set_option -error_detection_correction false
+set_option -stop_seu_handler false
+set_option -error_injection false
+set_option -ext_cclk false
+set_option -ext_cclk_div 
+
+
+
+
+
+
+

+ 123 - 0
src/constr/RF_FPGA.cst

@@ -0,0 +1,123 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved. 
+//File Title: Physical Constraints file
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Created Time: Wed 03 20 12:43:13 2024
+
+IO_LOC "GPIO_o[17]" D1;
+IO_PORT "GPIO_o[17]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[16]" R1;
+IO_PORT "GPIO_o[16]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[15]" L1;
+IO_PORT "GPIO_o[15]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[14]" K2;
+IO_PORT "GPIO_o[14]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[13]" K1;
+IO_PORT "GPIO_o[13]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[12]" L2;
+IO_PORT "GPIO_o[12]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[11]" A2;
+IO_PORT "GPIO_o[11]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[10]" A11;
+IO_PORT "GPIO_o[10]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[9]" A14;
+IO_PORT "GPIO_o[9]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[8]" A12;
+IO_PORT "GPIO_o[8]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[7]" A10;
+IO_PORT "GPIO_o[7]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[6]" A13;
+IO_PORT "GPIO_o[6]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[5]" R6;
+IO_PORT "GPIO_o[5]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[4]" T5;
+IO_PORT "GPIO_o[4]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[3]" T6;
+IO_PORT "GPIO_o[3]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[2]" J16;
+IO_PORT "GPIO_o[2]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[1]" H16;
+IO_PORT "GPIO_o[1]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "GPIO_o[0]" G16;
+IO_PORT "GPIO_o[0]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_PORT "Mosi0_o[7]" IO_TYPE=LVCMOS33;
+IO_LOC "Mosi0_o[6]" C1;
+IO_PORT "Mosi0_o[6]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Mosi0_o[5]" F16;
+IO_PORT "Mosi0_o[5]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Mosi0_o[4]" C7;
+IO_PORT "Mosi0_o[4]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Mosi0_o[3]" B3;
+IO_PORT "Mosi0_o[3]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Mosi0_o[2]" B5;
+IO_PORT "Mosi0_o[2]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Mosi0_o[1]" R3;
+IO_PORT "Mosi0_o[1]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Mosi0_o[0]" G1;
+IO_PORT "Mosi0_o[0]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_PORT "Sck_o[7]" IO_TYPE=LVCMOS33;
+IO_LOC "Sck_o[6]" C2;
+IO_PORT "Sck_o[6]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Sck_o[5]" E16;
+IO_PORT "Sck_o[5]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Sck_o[4]" B7;
+IO_PORT "Sck_o[4]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Sck_o[3]" A3;
+IO_PORT "Sck_o[3]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Sck_o[2]" A5;
+IO_PORT "Sck_o[2]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Sck_o[1]" T2;
+IO_PORT "Sck_o[1]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Sck_o[0]" G2;
+IO_PORT "Sck_o[0]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_PORT "Ss_o[7]" IO_TYPE=LVCMOS33;
+IO_LOC "Ss_o[6]" D2;
+IO_PORT "Ss_o[6]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Ss_o[5]" F15;
+IO_PORT "Ss_o[5]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Ss_o[4]" C8;
+IO_PORT "Ss_o[4]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Ss_o[3]" B4;
+IO_PORT "Ss_o[3]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Ss_o[2]" A4;
+IO_PORT "Ss_o[2]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Ss_o[1]" R4;
+IO_PORT "Ss_o[1]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Ss_o[0]" F1;
+IO_PORT "Ss_o[0]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_PORT "Clk50_o" IO_TYPE=LVCMOS33;
+IO_PORT "Clk100_o" IO_TYPE=LVCMOS33;
+IO_PORT "Clk600_o" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_PORT "Clk5_o" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_PORT "Clk20_o" IO_TYPE=LVCMOS33;
+IO_PORT "Clk30_o" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_PORT "Clk40_o" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_PORT "Clk75_o" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "I2CSck_o" K16;
+IO_PORT "I2CSck_o" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "I2CSda_io" L16;
+IO_PORT "I2CSda_io" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "Mosi1_io" T12;
+IO_PORT "Mosi1_io" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3;
+IO_LOC "MisoMax2870_i" B1;
+IO_PORT "MisoMax2870_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Miso2_i" T3;
+IO_PORT "Miso2_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Miso1_i" F2;
+IO_PORT "Miso1_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Ss_i" T9;
+IO_PORT "Ss_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Sck_i" T13;
+IO_PORT "Sck_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Mosi3_i" T15;
+IO_PORT "Mosi3_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Mosi2_i" T14;
+IO_PORT "Mosi2_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Mosi0_i" R12;
+IO_PORT "Mosi0_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Rst_i" R9;
+IO_PORT "Rst_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
+IO_LOC "Clk_i" H11;
+IO_PORT "Clk_i" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;

+ 143 - 0
src/constr/RF_FPGA.rao

@@ -0,0 +1,143 @@
+<?xml version="1" encoding="UTF-8"?>
+<GAO_CONFIG>
+    <Version>3.0</Version>
+    <Mode>Standard</Mode>
+    <AoCore index="0" sample_clock="clk100" trig_type="0" storage_depth="1024" window_num="1" capture_amount="1024" implementation="0" trigger_pos="0" module_name="RFTop" force_trigger_by_falling_edge="false" capture_init_data_enabled="false">
+        <SignalList>
+            <Signal capture_enable="true">Clk_i</Signal>
+            <Signal capture_enable="true">Mosi0_i</Signal>
+            <Signal capture_enable="true">Sck_i</Signal>
+            <Signal capture_enable="true">Ss_i</Signal>
+            <Signal capture_enable="true">Ss_o[0]</Signal>
+            <Signal capture_enable="true">Sck_o[0]</Signal>
+            <Signal capture_enable="true">Mosi0_o[0]</Signal>
+            <Bus capture_enable="true" name="configReg1[23:0]">
+                <Signal>configReg1[23]</Signal>
+                <Signal>configReg1[22]</Signal>
+                <Signal>configReg1[21]</Signal>
+                <Signal>configReg1[20]</Signal>
+                <Signal>configReg1[19]</Signal>
+                <Signal>configReg1[18]</Signal>
+                <Signal>configReg1[17]</Signal>
+                <Signal>configReg1[16]</Signal>
+                <Signal>configReg1[15]</Signal>
+                <Signal>configReg1[14]</Signal>
+                <Signal>configReg1[13]</Signal>
+                <Signal>configReg1[12]</Signal>
+                <Signal>configReg1[11]</Signal>
+                <Signal>configReg1[10]</Signal>
+                <Signal>configReg1[9]</Signal>
+                <Signal>configReg1[8]</Signal>
+                <Signal>configReg1[7]</Signal>
+                <Signal>configReg1[6]</Signal>
+                <Signal>configReg1[5]</Signal>
+                <Signal>configReg1[4]</Signal>
+                <Signal>configReg1[3]</Signal>
+                <Signal>configReg1[2]</Signal>
+                <Signal>configReg1[1]</Signal>
+                <Signal>configReg1[0]</Signal>
+            </Bus>
+            <Bus capture_enable="true" name="numOfConfigCmds[1:0]">
+                <Signal>numOfConfigCmds[1]</Signal>
+                <Signal>numOfConfigCmds[0]</Signal>
+            </Bus>
+            <Bus capture_enable="true" name="currState[3:0]">
+                <Signal>currState[3]</Signal>
+                <Signal>currState[2]</Signal>
+                <Signal>currState[1]</Signal>
+                <Signal>currState[0]</Signal>
+            </Bus>
+            <Bus capture_enable="true" name="nextState[3:0]">
+                <Signal>nextState[3]</Signal>
+                <Signal>nextState[2]</Signal>
+                <Signal>nextState[1]</Signal>
+                <Signal>nextState[0]</Signal>
+            </Bus>
+            <Signal capture_enable="true">RorQSPIFlag</Signal>
+            <Bus capture_enable="true" name="deviceID[4:0]">
+                <Signal>deviceID[4]</Signal>
+                <Signal>deviceID[3]</Signal>
+                <Signal>deviceID[2]</Signal>
+                <Signal>deviceID[1]</Signal>
+                <Signal>deviceID[0]</Signal>
+            </Bus>
+            <Bus capture_enable="true" name="dataToRxFifo[23:0]">
+                <Signal>dataToRxFifo[23]</Signal>
+                <Signal>dataToRxFifo[22]</Signal>
+                <Signal>dataToRxFifo[21]</Signal>
+                <Signal>dataToRxFifo[20]</Signal>
+                <Signal>dataToRxFifo[19]</Signal>
+                <Signal>dataToRxFifo[18]</Signal>
+                <Signal>dataToRxFifo[17]</Signal>
+                <Signal>dataToRxFifo[16]</Signal>
+                <Signal>dataToRxFifo[15]</Signal>
+                <Signal>dataToRxFifo[14]</Signal>
+                <Signal>dataToRxFifo[13]</Signal>
+                <Signal>dataToRxFifo[12]</Signal>
+                <Signal>dataToRxFifo[11]</Signal>
+                <Signal>dataToRxFifo[10]</Signal>
+                <Signal>dataToRxFifo[9]</Signal>
+                <Signal>dataToRxFifo[8]</Signal>
+                <Signal>dataToRxFifo[7]</Signal>
+                <Signal>dataToRxFifo[6]</Signal>
+                <Signal>dataToRxFifo[5]</Signal>
+                <Signal>dataToRxFifo[4]</Signal>
+                <Signal>dataToRxFifo[3]</Signal>
+                <Signal>dataToRxFifo[2]</Signal>
+                <Signal>dataToRxFifo[1]</Signal>
+                <Signal>dataToRxFifo[0]</Signal>
+            </Bus>
+            <Signal capture_enable="true">Rst_i</Signal>
+            <Signal capture_enable="true">rstInit</Signal>
+        </SignalList>
+        <Triggers>
+            <Trigger index="0">
+                <SignalList>
+                    <Signal>Ss_i</Signal>
+                </SignalList>
+            </Trigger>
+            <Trigger index="1">
+                <SignalList>
+                    <Signal>Rst_i</Signal>
+                </SignalList>
+            </Trigger>
+            <Trigger index="2"/>
+            <Trigger index="3"/>
+            <Trigger index="4"/>
+            <Trigger index="5"/>
+            <Trigger index="6"/>
+            <Trigger index="7"/>
+            <Trigger index="8"/>
+            <Trigger index="9"/>
+            <Trigger index="10"/>
+            <Trigger index="11"/>
+            <Trigger index="12"/>
+            <Trigger index="13"/>
+            <Trigger index="14"/>
+            <Trigger index="15"/>
+        </Triggers>
+        <MatchUnits>
+            <MatchUnit index="0" enabled="1" match_type="1" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="0" value1="0" trigger="0"/>
+            <MatchUnit index="1" enabled="1" match_type="1" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="1" value1="0" trigger="1"/>
+            <MatchUnit index="2" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="3" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="4" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="5" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="6" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="7" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="8" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="9" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="10" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="11" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="12" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="13" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="14" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+            <MatchUnit index="15" enabled="0" match_type="0" counter_enable="0" counter_width="2" counter="2" countinuous="0" func="0" value0="" value1=""/>
+        </MatchUnits>
+        <Expressions type="Static">
+            <Expression>M0</Expression>
+            <Expression>M1</Expression>
+        </Expressions>
+    </AoCore>
+    <GAO_ID>0010011100001101</GAO_ID>
+</GAO_CONFIG>

+ 21 - 0
src/constr/RF_FPGA.sdc

@@ -0,0 +1,21 @@
+//Copyright (C)2014-2024 GOWIN Semiconductor Corporation.
+//All rights reserved.
+//File Title: Timing Constraints file
+//Tool Version: V1.9.9.01 (64-bit) 
+//Created Time: 2024-03-18 14:44:39
+create_clock -name Clk_i -period 41.667 -waveform {0 20.834} [get_ports {Clk_i}]
+create_clock -name Sck_i -period 10 -waveform {0 5} [get_ports {Sck_i}]
+create_generated_clock -name clk30 -source [get_ports {Clk_i}] -master_clock Clk_i -divide_by 24 -multiply_by 30 [get_ports {Clk30_o}]
+create_generated_clock -name clk40 -source [get_ports {Clk_i}] -master_clock Clk_i -divide_by 24 -multiply_by 40 [get_ports {Clk40_o}]
+create_generated_clock -name clk50 -source [get_ports {Clk_i}] -master_clock Clk_i -divide_by 24 -multiply_by 50 [get_ports {Clk50_o}]
+create_generated_clock -name clk5 -source [get_ports {Clk_i}] -master_clock Clk_i -divide_by 24 -multiply_by 5 [get_ports {Clk5_o}]
+create_generated_clock -name clk360 -source [get_ports {Clk_i}] -master_clock Clk_i -divide_by 24 -multiply_by 360 [get_ports {Clk600_o}]
+create_generated_clock -name clk100 -source [get_ports {Clk_i}] -master_clock Clk_i -divide_by 24 -multiply_by 100 [get_ports {Clk100_o}]
+create_generated_clock -name clk20 -source [get_ports {Clk_i}] -master_clock Clk_i -divide_by 24 -multiply_by 20 [get_ports {Clk20_o}]
+create_generated_clock -name clk75 -source [get_ports {Clk_i}] -master_clock Clk_i -divide_by 24 -multiply_by 72 [get_ports {Clk75_o}]
+set_clock_groups -asynchronous -group [get_clocks {Clk_i Sck_i}]
+report_timing -setup -from_clock [get_clocks {clk100}] -max_paths 100 -max_common_paths 1
+report_timing -setup -from_clock [get_clocks {clk360}] -max_paths 100 -max_common_paths 1
+report_timing -setup -from_clock [get_clocks {clk75}] -max_paths 100 -max_common_paths 1
+report_timing -setup -from_clock [get_clocks {clk50}] -max_paths 100 -max_common_paths 1
+report_timing -setup -from [get_ports {Rst_i}]

+ 24 - 0
src/src/ClkGen/ClkGen.ipc

@@ -0,0 +1,24 @@
+[General]
+ipc_version=4
+file=ClkGen
+module=ClkGen
+target_device=gw1n9c-046
+type=clock_rpll
+version=1.0
+
+[Config]
+CKLOUTD3=false
+CLKFB_SOURCE=0
+CLKIN_FREQ=24
+CLKOUTD=false
+CLKOUTP=false
+CLKOUT_BYPASS=false
+CLKOUT_DIVIDE_DYN=true
+CLKOUT_FREQ=360
+CLKOUT_TOLERANCE=0
+DYNAMIC=true
+LANG=0
+LOCK_EN=false
+MODE_GENERAL=true
+PLL_PWD=false
+RESET_PLL=false

+ 33 - 0
src/src/ClkGen/ClkGen.mod

@@ -0,0 +1,33 @@
+-series GW1N
+-device GW1N-9
+-device_version C
+-package PBGA256
+-part_number GW1N-LV9PG256C6/I5
+
+
+-mod_name ClkGen
+-file_name ClkGen
+-path C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/ClkGen/
+-type PLL
+-rPll true
+-file_type vlg
+-dev_type GW1N-9C
+-dyn_idiv_sel false
+-idiv_sel 1
+-dyn_fbdiv_sel false
+-fbdiv_sel 15
+-dyn_odiv_sel false
+-odiv_sel 2
+-dyn_da_en true
+-rst_sig false
+-rst_sig_p false
+-fclkin 24
+-clkfb_sel 0
+-en_lock false
+-clkout_bypass false
+-clkout_ft_dir 1
+-en_clkoutp false
+-clkoutp_bypass false
+-en_clkoutd false
+-clkoutd_bypass false
+-en_clkoutd3 false

+ 18 - 0
src/src/ClkGen/ClkGen_tmp.v

@@ -0,0 +1,18 @@
+//Copyright (C)2014-2023 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//GOWIN Version: V1.9.9 Beta
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Thu Dec 21 10:35:59 2023
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+    ClkGen your_instance_name(
+        .clkout(clkout_o), //output clkout
+        .clkin(clkin_i) //input clkin
+    );
+
+//--------Copy end-------------------

+ 24 - 0
src/src/ClkGen/gowin_rpll/gClkGen.ipc

@@ -0,0 +1,24 @@
+[General]
+ipc_version=4
+file=gClkGen
+module=gClkGen
+target_device=gw1n9c-046
+type=clock_rpll
+version=1.0
+
+[Config]
+CKLOUTD3=false
+CLKFB_SOURCE=1
+CLKIN_FREQ=24
+CLKOUTD=false
+CLKOUTP=false
+CLKOUT_BYPASS=false
+CLKOUT_DIVIDE_DYN=true
+CLKOUT_FREQ=100
+CLKOUT_TOLERANCE=0
+DYNAMIC=true
+LANG=0
+LOCK_EN=true
+MODE_GENERAL=true
+PLL_PWD=false
+RESET_PLL=false

+ 33 - 0
src/src/ClkGen/gowin_rpll/gClkGen.mod

@@ -0,0 +1,33 @@
+-series GW1N
+-device GW1N-9
+-device_version C
+-package PBGA256
+-part_number GW1N-LV9PG256C6/I5
+
+
+-mod_name gClkGen
+-file_name gClkGen
+-path C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/ClkGen/gowin_rpll/
+-type PLL
+-rPll true
+-file_type vlg
+-dev_type GW1N-9C
+-dyn_idiv_sel false
+-idiv_sel 6
+-dyn_fbdiv_sel false
+-fbdiv_sel 25
+-dyn_odiv_sel false
+-odiv_sel 4
+-dyn_da_en true
+-rst_sig false
+-rst_sig_p false
+-fclkin 24
+-clkfb_sel 1
+-en_lock true
+-clkout_bypass false
+-clkout_ft_dir 1
+-en_clkoutp false
+-clkoutp_bypass false
+-en_clkoutd false
+-clkoutd_bypass false
+-en_clkoutd3 false

+ 20 - 0
src/src/ClkGen/gowin_rpll/gClkGen_tmp.v

@@ -0,0 +1,20 @@
+//Copyright (C)2014-2023 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//GOWIN Version: V1.9.9 Beta
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Mon Dec 25 15:26:15 2023
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+    gClkGen your_instance_name(
+        .clkout(clkout_o), //output clkout
+        .lock(lock_o), //output lock
+        .clkin(clkin_i), //input clkin
+        .clkfb(clkfb_i) //input clkfb
+    );
+
+//--------Copy end-------------------

+ 113 - 0
src/src/ClkGenGowin/ClkGenGowin.v

@@ -0,0 +1,113 @@
+module ClkGenGowin (
+  input Clk_i,
+  input Rst_i,
+  output Clk75_o,
+  output Clk50_o,
+  output Clk40_o,
+  output Clk30_o,
+  output Clk5_o
+);
+
+
+localparam Div75MHz = 5;
+localparam Div50MHz = 7;
+localparam Div40MHz = 9;
+localparam Div30MHz = 12;
+localparam Div5MHz = 72;
+
+
+
+reg [16:0] cnt75;
+reg [16:0] cnt50;
+reg [16:0] cnt40;
+reg [16:0] cnt30;
+reg [16:0] cnt5;
+
+reg clk;
+wire clk_o;
+
+
+always @(posedge Clk_i or posedge Rst_i) begin 
+    if (Rst_i) begin 
+        cnt75 <= 0;
+    end
+    else begin 
+        if (cnt75 >= Div75MHz-1) begin 
+            cnt75 <= 0;
+        end
+        else begin 
+            cnt75 <= cnt75 + 1;
+        end
+    end
+end
+
+always @(posedge Clk_i or posedge Rst_i) begin 
+    if (Rst_i) begin 
+        cnt50 <= 0;
+    end
+    else begin 
+        if (cnt50 >= Div50MHz-1) begin 
+            cnt50 <= 0;
+        end
+        else begin 
+            cnt50 <= cnt50 + 1;
+        end
+    end
+end
+
+always @(posedge Clk_i or posedge Rst_i) begin 
+    if (Rst_i) begin 
+        cnt40 <= 0;
+    end
+    else begin 
+        if (cnt40 >= Div40MHz-1) begin 
+            cnt40 <= 0;
+        end
+        else begin 
+            cnt40 <= cnt40 + 1;
+        end
+    end
+end
+
+always @(posedge Clk_i or posedge Rst_i) begin 
+    if (Rst_i) begin 
+        cnt30 <= 0;
+    end
+    else begin 
+        if (cnt30 >= Div30MHz-1) begin 
+            cnt30 <= 0;
+        end
+        else begin 
+            cnt30 <= cnt30 + 1;
+        end
+    end
+end
+
+always @(posedge Clk_i or posedge Rst_i) begin 
+    if (Rst_i) begin 
+        cnt5 <= 0;
+    end
+    else begin 
+        if (cnt5 >= Div5MHz-1) begin 
+            cnt5 <= 0;
+        end
+        else begin 
+            cnt5 <= cnt5 + 1;
+        end
+    end
+end
+
+assign Clk75_o = (cnt75 < Div75MHz/2) ? 1 : 0;
+assign Clk50_o = (cnt50 < Div50MHz/2) ? 1 : 0;
+assign Clk40_o = (cnt40 < Div40MHz/2) ? 1 : 0;
+assign Clk30_o = (cnt30 < Div30MHz/2) ? 1 : 0;
+assign Clk5_o = (cnt5 < Div5MHz/2) ? 1 : 0;
+
+
+
+
+
+
+
+
+endmodule

+ 114 - 0
src/src/ControlUnit/ControlUnit.v

@@ -0,0 +1,114 @@
+module ControlUnit #(
+    parameter Stages = 2,
+    parameter Width = 5,
+    parameter FifoNum = 8
+
+)(
+    input FastClk_i,
+    input [FifoNum-1:0] SlowClk_i,
+    input [Width-1:0] CurrState_i,
+    input Rst_i,
+
+
+
+    output [FifoNum-1:0] LaunchSpiSync_o,
+    output [4:0] CurrStateSync1_o,
+    output [4:0] CurrStateSync2_o,
+    output [4:0] CurrStateSync3_o,
+    output [4:0] CurrStateSync4_o,
+    output [4:0] CurrStateSync5_o
+
+
+
+);
+
+wire [0:2] currStateSync [FifoNum-1:0];
+
+// launch registers 
+reg [Width-1:0] currStateReg;
+
+
+
+
+
+//capture registers
+
+reg [Stages*Width-1:0] currStateReg5Mhz_c;
+reg [Stages*Width-1:0] currStateReg30Mhz_c;
+reg [Stages*Width-1:0] currStateReg40Mhz_c;
+reg [Stages*Width-1:0] currStateReg50Mhz_c;
+reg [Stages*Width-1:0] currStateReg70Mhz_c;
+
+
+
+assign currStateSync[0] = currStateReg5Mhz_c[Stages*Width-1:(Stages-1)*Width];
+assign currStateSync[1] = currStateReg30Mhz_c[Stages*Width-1:(Stages-1)*Width];
+assign currStateSync[2] = currStateReg40Mhz_c[Stages*Width-1:(Stages-1)*Width];
+assign currStateSync[3] = currStateReg50Mhz_c[Stages*Width-1:(Stages-1)*Width];
+assign currStateSync[4] = currStateReg70Mhz_c[Stages*Width-1:(Stages-1)*Width];
+
+assign CurrStateSync1_o = currStateReg5Mhz_c[Stages*Width-1:(Stages-1)*Width];
+assign CurrStateSync2_o = currStateReg30Mhz_c[Stages*Width-1:(Stages-1)*Width];
+assign CurrStateSync3_o = currStateReg40Mhz_c[Stages*Width-1:(Stages-1)*Width];
+assign CurrStateSync4_o = currStateReg50Mhz_c[Stages*Width-1:(Stages-1)*Width];
+assign CurrStateSync5_o = currStateReg70Mhz_c[Stages*Width-1:(Stages-1)*Width];
+
+
+
+assign LaunchSpiSync_o[0] = (!Rst_i) ? 1'b1 : 1'b0;
+assign LaunchSpiSync_o[1] = (!Rst_i) ? 1'b1 : 1'b0;
+assign LaunchSpiSync_o[2] = (!Rst_i) ? 1'b1 : 1'b0;
+assign LaunchSpiSync_o[3] = (!Rst_i) ? 1'b1 : 1'b0;
+assign LaunchSpiSync_o[4] = (!Rst_i) ? 1'b1 : 1'b0;
+assign LaunchSpiSync_o[5] = (!Rst_i) ? 1'b1 : 1'b0;
+assign LaunchSpiSync_o[6] = (!Rst_i) ? 1'b1 : 1'b0;
+
+
+
+always @(posedge FastClk_i) begin 
+    currStateReg <= CurrState_i;
+end
+
+
+always @(posedge SlowClk_i[0]) begin 
+    currStateReg5Mhz_c <= {currStateReg5Mhz_c[(Stages-1)*Width-1:0], currStateReg};
+end
+
+always @(posedge SlowClk_i[1]) begin 
+    currStateReg30Mhz_c <= {currStateReg30Mhz_c[(Stages-1)*Width-1:0], currStateReg};
+end
+
+always @(posedge SlowClk_i[2]) begin 
+    currStateReg40Mhz_c <= {currStateReg40Mhz_c[(Stages-1)*Width-1:0], currStateReg};
+end
+
+always @(posedge SlowClk_i[3]) begin 
+    currStateReg50Mhz_c <= {currStateReg50Mhz_c[(Stages-1)*Width-1:0], currStateReg};
+end
+
+always @(posedge SlowClk_i[4]) begin 
+    currStateReg70Mhz_c <= {currStateReg70Mhz_c[(Stages-1)*Width-1:0], currStateReg};
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule

+ 80 - 0
src/src/I2C/I2CSM.v

@@ -0,0 +1,80 @@
+module I2CSM (
+	iclk,
+	irst_n,
+	fs_data_rdy,
+	fs_delay_filter,
+	sm_i2c_req,
+	sm_en_i2c_cnt
+	);
+
+
+parameter	IDLE 			= 0;
+parameter	LAUNCH_I2C		= 1; 
+parameter	WAIT_DATA_RDY	= 2; 
+parameter	WAIT_DELAY_CNT	= 3;
+	
+input	wire	iclk;
+input	wire	irst_n;
+input	wire	fs_data_rdy;
+input	wire	fs_delay_filter;
+output	reg		sm_i2c_req;
+output	reg		sm_en_i2c_cnt;
+
+reg	[1:0]	current_state;
+
+always @(posedge iclk or negedge irst_n) begin
+	if(~irst_n) begin
+		current_state <= IDLE;
+	end
+	else begin
+		case(current_state)
+			IDLE : begin
+				current_state <= LAUNCH_I2C;
+			end
+			LAUNCH_I2C : begin
+				current_state <= WAIT_DATA_RDY;
+			end
+			WAIT_DATA_RDY : begin
+				if(fs_data_rdy) begin
+					current_state <= WAIT_DELAY_CNT;
+				end
+				else begin
+					current_state <= WAIT_DATA_RDY;
+				end
+			end
+			WAIT_DELAY_CNT : begin
+				if(fs_delay_filter) begin
+					current_state <= IDLE;
+				end
+				else begin
+					current_state <= WAIT_DELAY_CNT;
+				end
+			end
+		endcase
+	end	
+end
+
+always @(current_state) begin
+	sm_i2c_req		= 1'b0;
+	sm_en_i2c_cnt	= 1'b0;
+	case(current_state)
+		IDLE : begin
+			sm_i2c_req		= 1'b0;
+			sm_en_i2c_cnt	= 1'b0;
+		end
+		LAUNCH_I2C : begin
+			sm_i2c_req 		= 1'b1;
+			sm_en_i2c_cnt	= 1'b0;
+		end
+		WAIT_DATA_RDY : begin
+			sm_i2c_req 		= 1'b0;
+			sm_en_i2c_cnt	= 1'b0;
+		end
+		WAIT_DELAY_CNT : begin
+			sm_i2c_req 	  = 1'b0;
+			sm_en_i2c_cnt = 1'b1;
+		end
+	endcase
+end
+
+endmodule 

+ 489 - 0
src/src/I2C/temp_i2c_master_ver2.v

@@ -0,0 +1,489 @@
+module temp_i2c_master_ver2(
+	i_clk,
+	i_rst_n,
+	i_addr,
+	i_ptr,
+	i_req,
+	o_data,
+	o_data_valid,
+	SCK,
+	SDA
+	);
+parameter	CLK_DIV = 100;
+
+parameter	CLK_DIV_HALF = CLK_DIV/2;
+parameter	CLK_DIV_QUA  = CLK_DIV/4;
+	
+parameter	IDLE 		= 4'd0;	
+parameter	START 		= 4'd1;
+parameter	WR_ADDR		= 4'd2;
+parameter	WR_ADDR_A 	= 4'd3;
+parameter	RD_MSB		= 4'd4;
+parameter	RD_MSB_A	= 4'd5;
+parameter	RD_LSB		= 4'd6;
+parameter	RD_LSB_A	= 4'd7;
+parameter	STOP		= 4'd8;
+parameter	DATA_VAL	= 4'd9;
+input	wire		i_clk;
+input	wire		i_rst_n;
+input	wire[2:0]	i_addr;
+input	wire[1:0]	i_ptr;
+input	wire		i_req;
+output	reg	[15:0]	o_data;
+output	reg			o_data_valid;
+output	wire		SCK;
+inout	wire		SDA;
+
+reg	[3:0]	present_state;
+reg	[3:0]	next_state;
+
+reg		sm_en_clk;
+reg		sm_start;
+reg		sm_transfer;
+reg		sm_rd_tr;
+reg		sm_stop;
+reg		sm_data_valid;
+reg		sm_no_ans;
+//in data buf
+reg	[2:0]	i_addr_reg;
+reg			i_req_reg;
+
+
+reg	[7:0]	data_clk_cnt;
+reg	[7:0]	sck_clk_cnt;
+reg	[7:0]	quad_clk_cnt;
+
+reg			data_clk_reg;
+reg			sck_clk_reg;
+reg			quad_clk_reg;
+
+reg			pos_data_clk;
+reg			pos_data_clk_pipe;
+reg			neg_data_clk;
+
+reg			pos_sck_clk;
+reg			neg_sck_clk;
+
+reg			pos_quad_clk;
+reg			neg_quad_clk;
+
+reg			data_clk_cnt_flag;
+reg			sck_clk_cnt_flag;
+reg			quad_clk_cnt_flag;
+
+reg			en_data_clk_cnt;
+reg			en_sck_clk_cnt;
+
+reg			sck_reg;
+reg			sm_stop_pos_data;
+reg	[7:0]	tx_data_sr;
+reg	[2:0]	tr_bit_cnt;
+reg		en_rd_tr;
+reg		tr_bit_cnt_flag;
+reg		stop_flag;
+reg		rd_data_en;
+reg		sm_en_clk_reg;
+reg		sck_clk_reg_out;
+assign	SCK = sck_clk_reg_out;
+assign	SDA = ~en_rd_tr ? sck_reg : 1'bz;
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		o_data_valid <= 1'b0;
+		sm_en_clk_reg <= 1'b0;
+		sck_clk_reg_out <= 1'b1;
+		en_sck_clk_cnt <= 1'b0;
+	end
+	else begin
+		o_data_valid  <= sm_data_valid;
+		sm_en_clk_reg <= sm_en_clk;
+		en_sck_clk_cnt <= sm_en_clk_reg;
+		sck_clk_reg_out <= sck_clk_reg;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		data_clk_reg 	<= 1'b0;
+		sck_clk_reg  	<= 1'b1;
+		quad_clk_reg 	<= 1'b0;	
+		en_data_clk_cnt <= 1'b0;
+		pos_quad_clk	<= 1'b0;
+		neg_quad_clk	<= 1'b0;
+	end
+	else if(!sm_en_clk_reg) begin
+		data_clk_reg 	<= 1'b0;
+		sck_clk_reg  	<= 1'b1;
+		quad_clk_reg 	<= 1'b0;	
+		en_data_clk_cnt <= 1'b0;		
+	end
+	else begin
+		pos_quad_clk <= ~quad_clk_reg & quad_clk_cnt_flag;
+		neg_quad_clk <=  quad_clk_reg & quad_clk_cnt_flag;
+		if(pos_quad_clk) begin
+			en_data_clk_cnt <= 1'b1;
+		end
+		if(data_clk_cnt_flag) begin
+			data_clk_reg <= ~data_clk_reg;
+		end
+		if(sck_clk_cnt_flag) begin
+			sck_clk_reg <= ~sck_clk_reg;
+		end
+		if(quad_clk_cnt_flag) begin
+			quad_clk_reg <= ~quad_clk_reg;
+		end
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		quad_clk_cnt <= 0;
+	end
+	else if (!sm_en_clk_reg || quad_clk_cnt_flag) begin
+		quad_clk_cnt <= 0;
+	end
+	else begin
+		quad_clk_cnt <= quad_clk_cnt + 1;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		sck_clk_cnt <= 0;
+	end
+	else if(!en_sck_clk_cnt || sck_clk_cnt_flag) begin
+		sck_clk_cnt <= 0;
+	end
+	else begin
+		sck_clk_cnt <= sck_clk_cnt + 1;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		data_clk_cnt <= 0;
+	end
+	else if(!sm_en_clk_reg || data_clk_cnt_flag) begin
+		data_clk_cnt <= 0;
+	end
+	else if(en_data_clk_cnt) begin
+		data_clk_cnt <= data_clk_cnt + 1;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		sm_stop_pos_data <= 1'b0;
+	end
+	else if(!sm_en_clk_reg) begin
+		sm_stop_pos_data <= 1'b0;
+	end
+	else if(sm_stop && pos_data_clk) begin
+		sm_stop_pos_data <= 1'b1;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		stop_flag <= 1'b0;
+	end
+	else if(!sm_en_clk_reg) begin
+		stop_flag <= 1'b0;
+	end
+	else if(pos_sck_clk & sm_stop_pos_data) begin
+		stop_flag <= 1'b1;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		sck_reg <= 1'b1;
+	end
+	else if(!sm_en_clk_reg || pos_data_clk_pipe && sm_no_ans) begin
+		sck_reg <= 1'b1;
+	end
+	else if((pos_quad_clk && sm_start) || (sm_stop && pos_data_clk_pipe)) begin
+		sck_reg <= 1'b0;
+	end
+	else if(pos_data_clk_pipe) begin
+		sck_reg <= tx_data_sr[7];
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		rd_data_en <= 1'b0;
+	end
+	else if(pos_data_clk_pipe) begin
+		rd_data_en <= sm_transfer & sm_rd_tr;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		o_data <= 16'b0;
+	end
+	else if(rd_data_en & pos_sck_clk) begin
+		o_data <= {o_data[14:0], SDA};
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		tr_bit_cnt_flag <= 1'b0;
+	end
+	else begin
+		tr_bit_cnt_flag <= &tr_bit_cnt;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		en_rd_tr <= 1'b0;
+	end
+	else if(sm_rd_tr && pos_data_clk_pipe) begin
+		en_rd_tr <= 1'b1;
+	end
+	else if(pos_data_clk_pipe) begin
+		en_rd_tr <= 1'b0;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		tr_bit_cnt <= 3'b0;
+	end
+	else if(!sm_transfer) begin
+		tr_bit_cnt <= 3'b0;
+	end
+	else if(pos_data_clk) begin
+		tr_bit_cnt <= tr_bit_cnt + 3'b1;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		tx_data_sr <= 8'b0;
+	end
+	else if(sm_start) begin
+		tx_data_sr[7:0] <= {4'b1001, i_addr_reg[2:0], 1'b1};
+	end
+	else if(pos_data_clk_pipe) begin
+		tx_data_sr <= tx_data_sr << 1;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		data_clk_cnt_flag 		<= 1'b0;
+		quad_clk_cnt_flag 		<= 1'b0;
+		pos_data_clk			<= 1'b0;
+		neg_data_clk			<= 1'b0;
+		pos_data_clk_pipe       <= 1'b0;
+	end
+	else begin
+		data_clk_cnt_flag 		<= (data_clk_cnt == CLK_DIV_HALF-2);
+		quad_clk_cnt_flag 		<= (quad_clk_cnt == CLK_DIV_QUA-2);
+		pos_data_clk 			<= data_clk_cnt_flag & ~data_clk_reg;
+		neg_data_clk 			<= data_clk_cnt_flag &  data_clk_reg;
+		pos_data_clk_pipe       <= pos_data_clk;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		sck_clk_cnt_flag 	<= 1'b0;
+		pos_sck_clk			<= 1'b0;
+	end
+	else begin
+		sck_clk_cnt_flag 	<= (sck_clk_cnt == CLK_DIV_HALF-2);
+		pos_sck_clk 		<=  sck_clk_cnt_flag & ~sck_clk_reg;
+	end
+end
+//
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		i_addr_reg <= 3'b0;
+	end
+	else if(i_req) begin
+		i_addr_reg <= i_addr;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		i_req_reg <= 1'b0;
+	end
+	else begin
+		i_req_reg <= i_req;
+	end
+end
+
+always @(posedge i_clk or negedge i_rst_n) begin
+	if(!i_rst_n) begin
+		present_state <= IDLE;
+	end
+	else begin
+		present_state <= next_state;
+	end
+end
+
+always @(present_state or i_req_reg or pos_data_clk or neg_data_clk or tr_bit_cnt_flag or stop_flag) begin
+	sm_en_clk 		= 1'b0;
+	sm_start		= 1'b0;
+	sm_transfer		= 1'b0;
+	sm_rd_tr		= 1'b0;
+	sm_stop     	= 1'b0;
+	sm_data_valid 	= 1'b0;
+	sm_no_ans		= 1'b0;
+	next_state 	= IDLE;
+	case(present_state)
+		IDLE : begin
+			sm_en_clk 		= 1'b0;
+			sm_start		= 1'b0;
+			sm_transfer 	= 1'b0;
+			sm_rd_tr		= 1'b0;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b0;
+			if(i_req_reg) begin
+				next_state = START;
+			end
+			else begin
+				next_state 	= present_state;
+			end
+		end
+		START : begin
+			sm_en_clk 		= 1'b1;
+			sm_start  		= 1'b1;
+			sm_transfer 	= 1'b0;
+			sm_rd_tr		= 1'b0;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b0;
+			if(pos_data_clk) begin
+				next_state = WR_ADDR;
+			end
+			else begin
+				next_state = START;
+			end
+		end
+		WR_ADDR : begin
+			sm_en_clk 		= 1'b1;
+			sm_start  		= 1'b0;
+			sm_transfer 	= 1'b1;
+			sm_rd_tr		= 1'b0;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b0;
+			if(tr_bit_cnt_flag && pos_data_clk) begin
+				next_state = WR_ADDR_A;
+			end
+			else begin 
+				next_state = WR_ADDR;
+			end
+		end
+		WR_ADDR_A : begin
+			sm_en_clk 		= 1'b1;
+			sm_start  		= 1'b0;
+			sm_transfer 	= 1'b0;
+			sm_rd_tr		= 1'b1;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b0;
+			if(pos_data_clk) begin
+				next_state = RD_MSB;
+			end
+			else begin
+				next_state = WR_ADDR_A;
+			end
+		end
+		RD_MSB : begin
+			sm_en_clk 		= 1'b1;
+			sm_start  		= 1'b0;
+			sm_transfer 	= 1'b1;
+			sm_rd_tr		= 1'b1;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b0;
+			if(pos_data_clk && tr_bit_cnt_flag) begin
+				next_state = RD_MSB_A;
+			end
+			else begin
+				next_state  = RD_MSB;
+			end	
+		end
+		RD_MSB_A : begin
+			sm_en_clk 		= 1'b1;
+			sm_start  		= 1'b0;
+			sm_transfer 	= 1'b0;
+			sm_rd_tr		= 1'b0;//1;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b0;
+			if(pos_data_clk) begin
+				next_state = RD_LSB;
+			end
+			else begin
+				next_state  = RD_MSB_A;
+			end	
+		end
+		RD_LSB : begin
+			sm_en_clk 		= 1'b1;
+			sm_start  		= 1'b0;
+			sm_transfer 	= 1'b1;
+			sm_rd_tr		= 1'b1;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b0;
+			if(pos_data_clk && tr_bit_cnt_flag) begin
+				next_state = RD_LSB_A;
+			end
+			else begin
+				next_state  = RD_LSB;
+			end	
+		end
+		RD_LSB_A : begin
+			sm_en_clk 		= 1'b1;
+			sm_start  		= 1'b0;
+			sm_transfer 	= 1'b0;
+			sm_rd_tr		= 1'b0;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b1;
+			if(pos_data_clk) begin
+				next_state = STOP;
+			end
+			else begin
+				next_state  = RD_LSB_A;
+			end			
+		end
+		STOP : begin
+			sm_en_clk 		= 1'b1;
+			sm_start  		= 1'b0;
+			sm_transfer 	= 1'b0;
+			sm_rd_tr		= 1'b0;
+			sm_stop     	= 1'b1;
+			sm_data_valid 	= 1'b0;
+			sm_no_ans		= 1'b0;
+			if(neg_data_clk) begin
+				next_state = DATA_VAL;
+			end
+			else begin
+				next_state  = STOP;
+			end		
+		end
+		DATA_VAL : begin
+			sm_en_clk 		= 1'b0;
+			sm_start  		= 1'b0;
+			sm_transfer 	= 1'b0;
+			sm_rd_tr		= 1'b0;
+			sm_stop     	= 1'b0;
+			sm_data_valid 	= 1'b1;
+			sm_no_ans		= 1'b0;
+			next_state  	= IDLE;
+		end
+	endcase
+end
+
+endmodule

+ 246 - 0
src/src/NCO/CordicNco.v

@@ -0,0 +1,246 @@
+/*
+    NCO module.
+    The module implements CORDIC algorithm
+*/
+
+module CordicNco 
+#(	parameter                   ODatWidth	= 18,
+	parameter                   PhIncWidth	= 32,
+	parameter                   IterNum		= 10,
+	parameter                   EnSinN		= 0,
+	parameter                   WinTypeW	= 0
+)
+(
+    input	Clk_i,
+    input	Rst_i,
+    input	Val_i,
+    input	[PhIncWidth-1:0]	PhaseInc_i,
+	input	[WinTypeW-1:0]	WinType_i,
+	input	WindVal_i,
+	output	[ODatWidth-1:0]	Wind_o,
+	output	[ODatWidth-1:0]	Sin_o,
+	output	[ODatWidth-1:0]	Cos_o,
+    output	reg	Val_o
+);
+
+//================================================================================
+//  FUNCTIONS
+//================================================================================
+    function integer log2;
+        input integer value;
+        begin
+            log2 = 0;
+            while (value > 1) begin
+                value   = value >> 1;
+                log2    = log2 + 1;
+            end
+        end
+    endfunction
+//================================================================================
+//  LOCALPARAMS
+//================================================================================
+	localparam  [PhIncWidth-1:0]	angle270	= 3<<(PhIncWidth-2);
+	localparam  [PhIncWidth-1:0]	angle180	= 1<<(PhIncWidth-1);
+	localparam  [PhIncWidth-1:0]	angle90		= 1<<(PhIncWidth-2);
+	
+	localparam [17:0] initValue = 18'd78498;
+//================================================================================
+//  REG/WIRE DECLARATIONS
+//================================================================================
+	
+    wire	[PhIncWidth-1:0]	precompAngle[ODatWidth-1:0];   
+    wire	[ODatWidth-1:0]		xPipe[IterNum:0];
+    wire	[ODatWidth-1:0]		yPipe[IterNum:0];
+    wire	[IterNum:0]			valPipe;
+    reg		[PhIncWidth-1:0]	phaseDiffPipe[IterNum-1:0];
+    reg		[2:0]				scwSignPipe[IterNum-1:0];
+
+    reg		[PhIncWidth-1:0]	phaseAcc;
+    reg     [PhIncWidth-1:0]	currPhase;
+    reg		[2:0]				scwSignPrev;
+    reg		[2:0]				scwSign;
+    reg		[2:0]				valSr;
+
+	reg		[ODatWidth-1:0]		sin_o;
+	reg		[ODatWidth-1:0]		cos_o;
+	reg		[ODatWidth-1:0]		wind_o;
+    genvar	g;
+    integer	i;
+	
+	reg		valR;
+//================================================================================
+//  ASSIGNMENTS
+//================================================================================
+    assign	xPipe[0]	=	(Val_i)	?	initValue:xPipe[0];
+    assign	yPipe[0]	=	(Val_i)	?	initValue:yPipe[0];
+    assign	valPipe[0]	=	valSr[2];
+	assign	Wind_o		=	(WindVal_i&&WinType_i==0)	?	wind_o:14'b0;
+
+	assign precompAngle[0] = 32'd536870912;
+	assign precompAngle[1] = 32'd316933406;
+	assign precompAngle[2] = 32'd167458907;
+	assign precompAngle[3] = 32'd85004756;
+	assign precompAngle[4] = 32'd42667331;
+	assign precompAngle[5] = 32'd21354465;
+	assign precompAngle[6] = 32'd10679838;
+	assign precompAngle[7] = 32'd5340245;
+	assign precompAngle[8] = 32'd2670163;
+	assign precompAngle[9] = 32'd1335087;
+	assign precompAngle[10] = 32'd667544;
+	assign precompAngle[11] = 32'd333772;
+	assign precompAngle[12] = 32'd166886;
+	assign precompAngle[13] = 32'd83443;
+	// assign precompAngle[14] = 32'd41722;
+	// assign precompAngle[15] = 32'd20861;
+	// assign precompAngle[16] = 32'd10430;
+	// assign precompAngle[17] = 32'd5215;
+	//assign precompAngle[18] = 32'd2608;
+
+	assign	Sin_o	=	WindVal_i	?	sin_o	:	14'h0;
+	assign	Cos_o	=	WindVal_i	?	cos_o	:	14'h0;
+//================================================================================
+//  CODING
+//================================================================================
+always @(posedge Clk_i) begin
+    if (Rst_i) begin
+        valR	<=	1'b0;
+    end else begin
+		valR	<=	Val_i;
+	end
+end
+
+//  Phase handle logic
+always @(posedge Clk_i) begin
+    if (Rst_i) begin
+        phaseAcc   <= {PhIncWidth{1'b0}};
+    end else if (Val_i) begin
+        phaseAcc   <= phaseAcc + PhaseInc_i;
+    end	else	begin
+		phaseAcc   <= {PhIncWidth{1'b0}};
+	end
+end
+
+always @(posedge Clk_i) begin
+    if (Rst_i) begin
+        currPhase   <= {PhIncWidth{1'b0}};
+        scwSign         <= 3'b0;
+    end else begin
+        if (phaseAcc > angle270) begin
+            currPhase   <= {PhIncWidth{1'b0}} - phaseAcc;
+            scwSign         <= 3'b010;
+        end else if (phaseAcc > angle180) begin
+            currPhase   <= phaseAcc - angle180;
+            scwSign         <= 3'b011;
+        end else if (phaseAcc > angle90) begin
+            currPhase   <= angle180 - phaseAcc;
+            scwSign         <= 3'b001;
+        end else begin
+            currPhase   <= phaseAcc;
+            scwSign         <= 3'b000;
+        end
+    end
+end
+
+//--------------------------------------------------------------------------------
+//  CORDIC pipe
+
+always @(posedge Clk_i) begin
+    if (Rst_i) begin
+        valSr <= 3'b0;
+    end else if	(Val_i)	begin
+        valSr <= {valSr[1:0], Val_i};
+    end	else	begin
+		valSr <= 3'b0;
+	end
+end
+
+always @(posedge Clk_i) begin
+    phaseDiffPipe[0]  <= currPhase - precompAngle[0];
+    scwSignPipe[0]     <= scwSign;
+    for(i=1; i<IterNum; i=i+1) begin
+        scwSignPipe[i] <= scwSignPipe[i-1];
+        if (phaseDiffPipe[i-1][PhIncWidth-1]) begin
+            phaseDiffPipe[i] <= phaseDiffPipe[i-1] + precompAngle[i];
+        end else begin
+            phaseDiffPipe[i] <= phaseDiffPipe[i-1] - precompAngle[i];
+        end
+    end
+end
+
+generate
+    for (g = 0; g < IterNum; g = g + 1) begin : cordic_pipe
+        cordic_rotation #(
+            .ODatWidth	(ODatWidth),
+            .Shift      (g+1)
+        ) cordic_rotation_inst (
+            .Clk_i      (Clk_i),
+            .Rst_i      (Rst_i),
+			.X_i        (xPipe[g]),
+			.Y_i        (yPipe[g]),
+			.Val_i      (valPipe[g]),
+			.Sign_i     (phaseDiffPipe[g][PhIncWidth-1]),
+			.X_o        (xPipe[g+1]),
+			.Y_o        (yPipe[g+1]),
+			.Val_o      (valPipe[g+1])
+		);
+    end
+endgenerate
+
+//--------------------------------------------------------------------------------
+//  Output logic
+
+generate 
+    if (EnSinN) begin
+        always @(posedge Clk_i) begin
+            if (Rst_i) begin
+                sin_o       <= {ODatWidth{1'b0}};
+            end else begin
+                if (scwSignPrev[1]) begin
+                    sin_o   <=  yPipe[IterNum];
+                end else begin
+                    sin_o   <= ~yPipe[IterNum] + {{(ODatWidth-1){1'b0}}, 1'b1};
+                end
+            end
+        end
+    end else begin
+        always @(posedge Clk_i) begin
+            if (Rst_i) begin
+                sin_o       <= {ODatWidth{1'b0}};
+            end else begin
+				if (scwSignPrev[1]) begin
+					sin_o   <= ~yPipe[IterNum] + {{(ODatWidth-1){1'b0}}, 1'b1};
+				end else begin
+					sin_o   <=  yPipe[IterNum];
+				end
+            end
+        end
+		always @(posedge Clk_i) begin
+            if (Rst_i) begin
+                wind_o       <= {ODatWidth{1'b0}};
+            end else begin
+				if (scwSignPrev[2]) begin
+					wind_o   <= ~yPipe[IterNum] + {{(ODatWidth-1){1'b0}}, 1'b1};
+				end else begin
+					wind_o   <=  yPipe[IterNum];
+				end
+            end
+        end
+    end
+endgenerate
+
+always @(posedge Clk_i) begin
+    if (Rst_i) begin
+        cos_o		<= {ODatWidth{1'b0}};
+        scwSignPrev	<= 3'b0;
+        Val_o		<= 1'b0;
+    end else begin
+        if (scwSignPrev[0]) begin
+            cos_o	<= ~xPipe[IterNum] + {{(ODatWidth-1){1'b0}}, 1'b1};
+        end else begin
+            cos_o	<= xPipe[IterNum];
+        end
+		scwSignPrev	<= scwSignPipe[IterNum-1];
+		Val_o		<= valPipe[0];
+    end	
+end
+endmodule

+ 74 - 0
src/src/NCO/CordicRotation.v

@@ -0,0 +1,74 @@
+`timescale 1ns / 1ps
+//////////////////////////////////////////////////////////////////////////////////
+// Company: 
+// Engineer: 
+// 
+// Create Date:    10:32:49 05/13/2020 
+// Design Name: 
+// Module Name:    cordic_rotation 
+// Project Name: 
+// Target Devices: 
+// Tool versions: 
+// Description: 
+//
+// Dependencies: 
+//
+// Revision: 
+// Revision 0.01 - File Created
+// Additional Comments: 
+//
+//////////////////////////////////////////////////////////////////////////////////
+module cordic_rotation 
+#(	parameter   ODatWidth	= 16,
+	parameter   Shift		= 1)
+(
+	input	Clk_i,
+	input	Rst_i,
+
+	input	signed  [ODatWidth-1:0]	X_i,
+	input	signed  [ODatWidth-1:0]	Y_i,
+	input	Val_i,
+	input	Sign_i,
+	output	reg	signed	[ODatWidth-1:0]	X_o,
+	output	reg	signed	[ODatWidth-1:0]	Y_o,
+	output	reg	Val_o
+);
+//================================================================================
+//  REG/WIRE DECLARATIONS
+//================================================================================
+    wire    [ODatWidth-1:0]    shiftedInX;
+    wire    [ODatWidth-1:0]    shiftedInY;
+//================================================================================
+//  ASSIGNMENTS
+//================================================================================
+    assign  shiftedInX    =   X_i >>> Shift;
+    assign  shiftedInY    =   Y_i >>> Shift;
+//================================================================================
+//  CODING
+//================================================================================
+always @(posedge Clk_i) begin
+    if (Rst_i) begin
+        Val_o	<= 1'b0;
+    end else if	(Val_i)	begin
+        Val_o	<= Val_i;
+    end	else	begin
+		Val_o	<=	1'b0;
+	end
+end
+
+always @(posedge Clk_i) begin
+    if (Rst_i) begin
+        X_o   <= {ODatWidth{1'b0}};
+        Y_o   <= {ODatWidth{1'b0}};
+    end else if (Val_i) begin
+        if (Sign_i) begin
+            X_o   <= X_i + shiftedInY;
+            Y_o   <= Y_i - shiftedInX; 
+        end else begin
+            X_o   <= X_i - shiftedInY;
+            Y_o   <= Y_i + shiftedInX;
+        end
+    end
+end
+
+endmodule

+ 184 - 0
src/src/QuadSPI/QuadSPIs.v

@@ -0,0 +1,184 @@
+module QuadSPIs (
+    input Clk_i,
+    input Rst_i,
+
+    input Sck_i,
+    input Ss_i,
+    input Mosi0_i,
+    input Mosi1_i,
+    input Mosi2_i,
+    input Mosi3_i,
+
+    output reg [17:0] Data_o,
+    output reg [7:0] Addr_o,
+    output [23:0] DataToRxFifo_o,
+    output reg RorQSPIFlag_o,
+    output reg Val_o
+);
+
+//================================================================================
+//	REG/WIRE
+//================================================================================
+
+reg ssReg;
+reg ssRegR; 
+reg SckReg; 
+reg [4:0] ssCnt;
+reg [5:0] addrReg;
+reg [5:0] shiftReg0;
+reg [5:0] shiftReg1;
+reg [5:0] shiftReg2;
+
+
+
+
+//===============================================================================
+//  ASSIGNMENTS
+
+
+assign DataToRxFifo_o = {Addr_o, Data_o};
+
+//================================================================================
+//	CODING
+//================================================================================
+
+always	@(posedge	Clk_i)	begin
+	ssReg	<=	Ss_i;
+	ssRegR	<=	ssReg;
+end
+
+
+
+always @(posedge Clk_i) begin 
+    if (Rst_i) begin 
+        Data_o <= 16'h0;
+    end
+    else begin
+        if (ssReg && !ssRegR) begin 
+            Data_o <= {shiftReg0, shiftReg1, shiftReg2};
+         end
+    end
+end
+
+
+
+
+always @(posedge Clk_i) begin 
+    if (Rst_i) begin 
+        Addr_o <= 6'h0;
+    end
+    else begin
+        if (ssReg && !ssRegR) begin 
+            Addr_o <= addrReg;
+        end
+    end
+end
+
+
+always @(posedge Sck_i or posedge Rst_i) begin 
+    if (Rst_i) begin 
+        shiftReg0 <= 6'h0;
+    end
+    else begin  
+        if (!Ss_i) begin 
+            shiftReg0 <= {shiftReg0[4:0], Mosi1_i};
+        end
+        else begin 
+            shiftReg0 <= 8'h0;
+        end
+    end
+end
+
+
+
+always @(posedge Sck_i or posedge Rst_i ) begin 
+    if (Rst_i) begin 
+        shiftReg1 <= 6'h0;
+    end
+    else begin  
+        if (!Ss_i) begin 
+            shiftReg1 <= {shiftReg1[4:0], Mosi2_i};
+        end
+        else begin 
+            shiftReg1 <= 8'h0;
+        end
+    end
+end
+
+
+always @(posedge Sck_i or posedge Rst_i ) begin 
+    if (Rst_i) begin 
+        shiftReg2 <= 6'h0;
+    end
+    else begin  
+        if (!Ss_i) begin 
+            shiftReg2 <= {shiftReg2[4:0], Mosi3_i};
+        end
+        else begin 
+            shiftReg2 <= 6'h0;
+        end
+    end
+end
+
+
+always @(posedge Sck_i or posedge Rst_i ) begin 
+    if (Rst_i) begin 
+        addrReg <= 6'h0;
+    end
+    else begin
+        if (!Ss_i) begin 
+            addrReg <={addrReg[4:0], Mosi0_i};
+        end
+        else begin 
+            addrReg <= 6'h0;
+        end
+    end
+end
+
+
+always @(posedge Clk_i) begin
+    if (ssReg && !ssRegR) begin 
+        Val_o <= 1'b1;
+    end
+    else begin 
+        Val_o <= 1'b0;
+    end
+end
+
+
+always @(posedge Sck_i or posedge Rst_i or posedge Ss_i) begin 
+    if (Rst_i) begin 
+        ssCnt <= 5'd0;
+    end
+    else begin 
+        if (Ss_i) begin 
+            ssCnt <= 5'd0;
+        end
+        else begin 
+            ssCnt <= ssCnt + 1'd1;
+        end
+    end
+end
+
+
+always @(posedge Sck_i) begin 
+    if (Rst_i) begin 
+        RorQSPIFlag_o <= 1'b0;
+    end
+    else begin 
+        if (addrReg[0] == 1 && ssCnt == 1 ) begin
+            RorQSPIFlag_o <= 1'b1;
+        end
+        else if (addrReg[0] != 1 && ssCnt == 1 ) begin 
+            RorQSPIFlag_o <= 1'b0;
+        end
+    end
+end
+
+
+
+
+
+
+
+endmodule

+ 49 - 0
src/src/RAM/RAM.v

@@ -0,0 +1,49 @@
+`include "mem_init.txt"
+module RAM #(
+    parameter mem_init_file = "mem_init.txt"
+
+
+) (
+    input [63:0] Data_i,
+    
+    input [9:0] Addr_i,
+
+    input Clk_i,
+    input Rst_i,
+    input WrEn_i,
+    input RdEn_i,
+
+    output [63:0] Data_o
+
+
+
+);
+
+reg [63:0] mem [1023:0];
+reg [63:0] dataReg;  
+
+
+
+assign Data_o = dataReg;
+
+
+
+always @(posedge Clk_i)
+    if (Rst_i) begin 
+        dataReg <= 64'h0;
+    end
+    else begin 
+        if (!RdEn_i) begin 
+            dataReg <= mem[Addr_i];
+        end
+    end
+
+always @(posedge Clk_i)
+    if (!WrEn_i) begin 
+        mem[Addr_i] <= Data_i;
+    end
+
+
+endmodule
+
+

+ 255 - 0
src/src/SPI/SPIm.v

@@ -0,0 +1,255 @@
+module SPIm (
+    input Clk_i,
+    input Rst_i,
+    input Start_i,
+    input EmptyFlag_i,
+    input [23:0] SpiData_i,
+
+
+    output  Mosi0_o,
+    output  Sck_o,
+    output  Ss_o,
+    output reg  Val_o
+);
+
+//
+// LOCALPARAMS
+
+localparam ssNum = 24; 
+//================================================================================
+//	REG/WIRE
+//================================================================================
+
+    reg startFlag;
+    reg startR;
+    reg lineBusy;
+    reg [31:0] trCnt;
+    reg valReg;
+    reg spiBusy;
+    reg valToRxFifo1;
+    reg [5:0] ssCnt;
+    reg Ss;
+    reg [23:0]spiDataR;
+    reg [23:0]spiDataReg;
+    reg oldDataFlag;
+    
+    reg ssR;
+    reg SSR;
+    reg [23:0] mosiReg0;
+    reg stopFlag;
+    
+    
+    
+    //================================================================================
+    //  ASSIGNMENTS
+    //================================================================================
+    
+    
+    assign Ss_o = Ss;
+    assign Mosi0_o = (!Ss_o && ssCnt <= ssNum) ?mosiReg0[23] : 1'b0;
+    assign Sck_o = (!Ss_o && ssCnt <= ssNum) ? ~Clk_i : 1'b0; 
+    
+    //================================================================================
+    //	CODING
+    //================================================================================
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            Val_o = 1'b0;
+        end
+        else begin 
+        if (Start_i && trCnt < 1  && Ss_o && SpiData_i == 0 ) begin  
+            Val_o = 1;
+        end
+        else if (Start_i) begin 
+            Val_o <= valReg;
+        end
+        else begin 
+            Val_o <= 1'b0;
+        end
+        end
+    end
+    
+
+    always @(*) begin 
+        if (Rst_i) begin 
+            lineBusy = 1'b0;
+        end
+        else begin 
+            if (Start_i && !Ss_o && SpiData_i != 0) begin 
+                lineBusy = 1'b1;
+            end
+            else begin 
+                lineBusy = 1'b0;
+            end
+        end
+    end
+
+    
+    
+    always @(posedge Clk_i) begin
+        if (valReg) begin  
+            spiDataR <= SpiData_i;
+        end
+    end
+    
+    always @(posedge Clk_i) begin 
+        spiDataReg <= SpiData_i;
+    end
+
+
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            oldDataFlag = 1'b0;
+        end
+        else begin 
+            if (spiDataR == SpiData_i && (SpiData_i != 0) || EmptyFlag_i) begin 
+                oldDataFlag = 1'b1;
+            end
+            else begin 
+                oldDataFlag = 1'b0;
+            end
+        end
+    end
+    
+    
+    always @(posedge Clk_i) begin 
+        startR <= Start_i;
+    end
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            valToRxFifo1 = 1'b0;
+        end
+        else begin 
+            if (Start_i && !startR) begin 
+                valToRxFifo1 = 1'b1;
+            end
+            else begin 
+                valToRxFifo1 = 1'b0;
+            end
+        end
+    end
+
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            stopFlag <= 1'b0;
+        end
+        else begin
+            if (Ss_o && !SSR) begin 
+                stopFlag <= 1'b1;
+            end
+            else begin
+                stopFlag <= 1'b0;
+            end
+        end
+    end
+
+
+   
+    
+    always @(posedge Clk_i) begin
+        SSR <= Ss;
+    end
+    
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            startFlag = 1'b0;
+        end
+        else begin 
+            if (Start_i && !stopFlag && !EmptyFlag_i  && !oldDataFlag   ) begin 
+                startFlag = 1'b1;
+            end
+            else begin 
+                startFlag = 1'b0;
+            end
+        end
+    end
+    
+    always @(*) begin
+        if (Rst_i) begin 
+            valReg = 1'b0;
+        end
+        else begin
+            if (Ss_o && !SSR) begin 
+                valReg = 1'b1;
+            end
+            else begin 
+                valReg = 1'b0;
+            end
+        end
+    end
+
+
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            trCnt <= 32'd0;
+        end
+        else begin 
+            if (Ss_o && !SSR) begin 
+                trCnt <= trCnt + 1;
+            end
+        end
+    end
+
+
+    
+   
+    
+    
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            ssCnt <= 1'b0;
+        end
+        else if (ssCnt <= ssNum  && startFlag  ) begin 
+            ssCnt <= ssCnt + 1'b1;
+        end
+        else begin
+            if (ssCnt == ssNum-1 || !startFlag) begin 
+                ssCnt <= 1'b0;
+            end
+        end
+    end
+    
+    
+    
+    
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            Ss <= 1'b1;
+        end
+        else begin 
+            if (ssCnt <= ssNum  && startFlag ) begin 
+                Ss <= 1'b0;
+            end
+            else begin 
+                Ss <= 1'b1;
+            end
+        end
+    end
+    
+    
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            mosiReg0 <= SpiData_i[23:0];
+        end
+        else begin 
+            if (!Ss && ( ssCnt < ssNum)) begin
+                mosiReg0 <= mosiReg0 << 1;
+            end
+            else begin 
+                mosiReg0 <= SpiData_i[23:0];
+            end
+        end
+    end
+
+    
+    
+    
+    
+    
+    
+    
+    endmodule

+ 256 - 0
src/src/SPI/SPImDDS.v

@@ -0,0 +1,256 @@
+module SPImDDS#(
+    parameter ssNum = 64
+)(
+    input Clk_i,
+    input Rst_i,
+    input Start_i,
+    input EmptyFlag_i,
+    input [ssNum-1:0] SpiData_i,
+
+
+    output  Mosi0_o,
+    output  Sck_o,
+    output  Ss_o,
+    output reg  Val_o
+);
+
+//
+// LOCALPARAMS
+
+// localparam ssNum = 64; 
+//================================================================================
+//	REG/WIRE
+//================================================================================
+
+    reg startFlag;
+    reg startR;
+    reg lineBusy;
+    reg [31:0] trCnt;
+    reg valReg;
+    reg spiBusy;
+    reg valToRxFifo1;
+    reg [6:0] ssCnt;
+    reg Ss;
+    reg [ssNum-1:0]spiDataR;
+    reg [ssNum-1:0]spiDataReg;
+    reg oldDataFlag;
+    
+    reg ssR;
+    reg SSR;
+    reg [ssNum-1:0] mosiReg0;
+    reg stopFlag;
+    
+    
+    
+    //================================================================================
+    //  ASSIGNMENTS
+    //================================================================================
+    
+    
+    assign Ss_o = Ss;
+    assign Mosi0_o = (!Ss_o && ssCnt <= ssNum) ?mosiReg0[ssNum-1] : 1'b0;
+    assign Sck_o = (!Ss_o && ssCnt <= ssNum) ? Clk_i : 1'b0; 
+    
+    //================================================================================
+    //	CODING
+    //================================================================================
+    
+     always @(*) begin 
+        if (Start_i) begin  
+            Val_o = valReg;
+        end
+        else begin 
+            Val_o = 1'b0;
+        end
+    end
+    
+
+    always @(*) begin 
+        if (Rst_i) begin 
+            lineBusy = 1'b0;
+        end
+        else begin 
+            if (Start_i && !Ss_o && SpiData_i != 0) begin 
+                lineBusy = 1'b1;
+            end
+            else begin 
+                lineBusy = 1'b0;
+            end
+        end
+    end
+
+    
+    
+    always @(posedge Clk_i) begin
+        if (Rst_i) begin 
+            spiDataR <= 0;
+        end
+        else begin
+            if (valReg) begin 
+                spiDataR <= spiDataReg;
+            end
+        end
+    end
+    
+    always @(posedge Clk_i) begin 
+        spiDataReg <= SpiData_i;
+    end
+
+
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            oldDataFlag = 1'b0;
+        end
+        else begin 
+            if (spiDataR == SpiData_i && (SpiData_i != 0) || EmptyFlag_i) begin 
+                oldDataFlag = 1'b1;
+            end
+            else begin 
+                oldDataFlag = 1'b0;
+            end
+        end
+    end
+    
+    
+    always @(posedge Clk_i) begin 
+        startR <= Start_i;
+    end
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            valToRxFifo1 = 1'b0;
+        end
+        else begin 
+            if (Start_i && !startR) begin 
+                valToRxFifo1 = 1'b1;
+            end
+            else begin 
+                valToRxFifo1 = 1'b0;
+            end
+        end
+    end
+
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            stopFlag <= 1'b0;
+        end
+        else begin
+            if (Ss_o && !SSR) begin 
+                stopFlag <= 1'b1;
+            end
+            else begin
+                stopFlag <= 1'b0;
+            end
+        end
+    end
+
+
+   
+    
+    always @(posedge Clk_i) begin
+        SSR <= Ss;
+    end
+    
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            startFlag = 1'b0;
+        end
+        else begin 
+            if (Start_i && !stopFlag && !EmptyFlag_i  && !oldDataFlag   ) begin 
+                startFlag = 1'b1;
+            end
+            else begin 
+                startFlag = 1'b0;
+            end
+        end
+    end
+    
+    always @(*) begin
+        if (Rst_i) begin 
+            valReg = 1'b0;
+        end
+        else begin
+            if (Ss_o && !SSR) begin 
+                valReg = 1'b1;
+            end
+            else begin 
+                valReg = 1'b0;
+            end
+        end
+    end
+
+
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            trCnt <= 32'd0;
+        end
+        else begin 
+            if (Ss_o && !SSR) begin 
+                trCnt <= trCnt + 1;
+            end
+        end
+    end
+
+
+    
+   
+    
+    
+    always @(negedge Clk_i) begin 
+        if (Rst_i) begin 
+            ssCnt <= 1'b0;
+        end
+        else if (ssCnt <= ssNum  && startFlag  ) begin 
+            ssCnt <= ssCnt + 1'b1;
+        end
+        else begin
+            if (ssCnt == ssNum-1 || !startFlag) begin 
+                ssCnt <= 1'b0;
+            end
+        end
+    end
+    
+    
+    
+    
+    always @(negedge Clk_i) begin 
+        if (Rst_i) begin 
+            Ss <= 1'b1;
+        end
+        else begin 
+            if (ssCnt <= ssNum  && startFlag ) begin 
+                Ss <= 1'b0;
+            end
+            else begin 
+                Ss <= 1'b1;
+            end
+        end
+    end
+    
+    
+    always @(negedge Clk_i) begin 
+        if (Rst_i) begin 
+            mosiReg0 <= SpiData_i[ssNum-1:0];
+        end
+        else begin 
+            if (!Ss && ( ssCnt < ssNum)) begin
+                mosiReg0 <= mosiReg0 << 1;
+            end
+            else begin
+                if (Ss) begin
+                    mosiReg0 <= SpiData_i[ssNum-1:0];
+                end
+            end
+        end
+    end
+
+    
+    
+    
+    
+    
+    
+    
+    endmodule

+ 95 - 0
src/src/SPI/SPIs.v

@@ -0,0 +1,95 @@
+module SPIs (
+    input Clk_i,
+    input Rst_i,
+
+    input Sck_i,
+    input Ss_i,
+    input Mosi0_i,
+
+    output reg [17:0] Data_o,
+    output reg [5:0] Addr_o,
+    output [23:0] DataToRxFifo_o,
+    output reg Val_o
+);
+
+//================================================================================
+//	REG/WIRE
+//================================================================================
+
+    reg ssReg;
+    reg ssRegR;  
+    reg [23:0] shiftReg;
+    
+ 
+
+//===============================================================================
+//  ASSIGNMENTS
+
+
+    assign DataToRxFifo_o = {Addr_o, Data_o};
+
+//================================================================================
+//	CODING
+//================================================================================
+
+    always	@(posedge	Clk_i)	begin
+    	ssReg	<=	Ss_i;
+    	ssRegR	<=	ssReg;
+    end
+
+
+
+
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            Data_o <= 18'h0;
+        end
+        else begin
+            if (ssReg && !ssRegR) begin 
+                Data_o <= shiftReg[17:0];
+            end
+        end
+    end
+
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            Addr_o <= 8'h0;
+        end
+        else begin 
+            if (ssReg && !ssRegR) begin 
+                Addr_o <= shiftReg[23:18];
+            end
+        end
+    end
+
+
+    always @(posedge Sck_i or posedge Rst_i) begin 
+        if (Rst_i) begin 
+            shiftReg<= 24'h0;
+        end
+        else begin  
+            if (!Ss_i) begin 
+                shiftReg<= {shiftReg[22:0], Mosi0_i};
+            end
+            else begin 
+                shiftReg<= 24'h0;
+            end
+        end
+    end
+    
+        
+
+
+    always @(posedge Clk_i) begin
+        if (ssReg && !ssRegR) begin 
+            Val_o <= 1'b1;
+        end
+        else begin 
+            Val_o <= 1'b0;
+        end
+    end
+
+
+
+
+    endmodule

+ 515 - 0
src/src/Sim/SPIm_tb.v

@@ -0,0 +1,515 @@
+module SPIm_tb (
+    input Clk_i,
+    input Rst_i,
+    input Start_i,
+    input ClockPhase_i,
+    input [31:0] SpiData_i,
+    input SelSt_i,
+    input [1:0] WidthSel_i,
+    input  Lag_i,
+    input  Lead_i,
+    input EndianSel_i,
+    input [5:0] Stop_i,
+    input PulsePol_i,
+
+
+    output reg Mosi0_o,
+    output reg Sck_o,
+    output  Ss_o,
+    output reg  Val_o
+);
+
+
+//================================================================================
+//	REG/WIRE
+//================================================================================
+
+    reg startFlag;
+    reg startR;
+    reg [31:0] trCnt;
+    reg valReg;
+    reg valToRxFifo1;
+    reg [5:0] ssCnt;
+    reg Ss;
+    reg [31:0]spiDataR;
+    reg oldDataFlag;
+    
+    reg ssR;
+    reg SSR;
+    reg [31:0] mosiReg0;
+    reg [5:0] ssNum;
+    reg [2:0] delayCnt;
+    reg stopFlag;
+    
+    wire ssPol = SelSt_i ? Ss : ~Ss;
+    
+    
+    //================================================================================
+    //  ASSIGNMENTS
+    //================================================================================
+    
+    
+    assign Ss_o = ssPol; 
+    
+    //================================================================================
+    //	CODING
+    //================================================================================
+    
+    always @(*) begin 
+        if (Start_i) begin  
+            Val_o = valReg;
+        end
+        else begin 
+            Val_o = 1'b0;
+        end
+    end
+    
+
+    
+    
+    always @(posedge Clk_i) begin
+        if (valReg) begin  
+            spiDataR <= SpiData_i;
+        end
+    end
+    
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            oldDataFlag = 1'b0;
+        end
+        else begin 
+            if (spiDataR == SpiData_i) begin 
+                oldDataFlag = 1'b1;
+            end
+            else begin 
+                oldDataFlag = 1'b0;
+            end
+        end
+    end
+    
+    
+    always @(posedge Clk_i) begin 
+        startR <= Start_i;
+    end
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            valToRxFifo1 = 1'b0;
+        end
+        else begin 
+            if (Start_i && !startR) begin 
+                valToRxFifo1 = 1'b1;
+            end
+            else begin 
+                valToRxFifo1 = 1'b0;
+            end
+        end
+    end
+    
+    always @(negedge Clk_i) begin 
+        if (Rst_i) begin 
+            delayCnt <= 1'b0;
+        end
+        else begin 
+            if (stopFlag &&delayCnt < Stop_i) begin 
+                delayCnt <= delayCnt + 1'b1;
+            end
+            else begin 
+                delayCnt <= 1'b0;
+            end
+        end
+    end
+    
+    always @(posedge Clk_i) begin 
+        if (Rst_i) begin 
+            stopFlag <= 1'b0;
+        end
+        else begin
+            if (SelSt_i) begin 
+                if (ssPol && !ssR) begin 
+                    stopFlag <= 1'b1;
+                end
+                else if ( delayCnt == Stop_i) begin 
+                    stopFlag <= 1'b0;
+                end
+            end
+            else begin 
+                if (!ssPol && ssR) begin 
+                    stopFlag <= 1'b1;
+                end
+                else if (delayCnt == Stop_i) begin 
+                    stopFlag <= 1'b0;
+                end
+            end
+        end
+    end
+    
+    
+    
+    
+    always @(*) begin
+        if (SelSt_i) begin 
+            if (PulsePol_i) begin 
+                if (ClockPhase_i) begin
+                    if (Lead_i == 0) begin 
+                        if (!Ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin 
+                            Sck_o = ~(~Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                    else begin 
+                        if (!Ss && (ssCnt < ssNum+Lag_i+Lead_i && ssCnt > Lag_i)) begin 
+                            Sck_o = ~(~Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                end
+                else begin
+                    if (Lead_i == 0) begin 
+                        if (!Ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin 
+                            Sck_o = ~(Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                    else begin 
+                        if (!Ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin 
+                            Sck_o = ~(Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                end
+            end
+            else begin 
+                if (ClockPhase_i) begin
+                    if (Lead_i == 0) begin  
+                        if (!Ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin 
+                            Sck_o = ~(Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                    else begin 
+                        if (!Ss && (ssCnt <ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin 
+                            Sck_o = ~(Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                end 
+                else begin
+                    if (Lead_i == 0) begin 
+                        if (!Ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin 
+                            Sck_o = ~(~Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                    else begin 
+                        if (!Ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin 
+                            Sck_o = ~(~Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                end
+            end
+        end
+        else begin 
+              if (PulsePol_i) begin 
+                if (ClockPhase_i) begin
+                    if (Lead_i == 0) begin 
+                        if (ssPol && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin 
+                            Sck_o = ~(~Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                    else begin 
+                        if (ssPol && (ssCnt < ssNum+Lag_i+Lead_i && ssCnt > Lag_i)) begin 
+                            Sck_o = ~(~Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                end
+                else begin
+                    if (Lead_i == 0) begin 
+                        if (ssPol && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin 
+                            Sck_o = ~(Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                    else begin 
+                        if (ssPol && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin 
+                            Sck_o = ~(Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                end
+            end
+            else begin 
+                if (ClockPhase_i) begin
+                    if (Lead_i == 0) begin  
+                        if (ssPol && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin 
+                            Sck_o = ~(Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                    else begin 
+                        if (ssPol && (ssCnt <ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin 
+                            Sck_o = ~(Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                end 
+                else begin
+                    if (Lead_i == 0) begin 
+                        if (ssPol && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin 
+                            Sck_o = ~(~Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                    else begin 
+                        if (ssPol && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin 
+                            Sck_o = ~(~Clk_i);
+                        end
+                        else begin 
+                            Sck_o = 1'b0;
+                        end
+                    end
+                end
+            end
+        end
+            
+    end
+    
+    
+    always @(*) begin
+        if (Rst_i) begin 
+            Mosi0_o = 1'b0;
+        end
+        else begin
+            if (SelSt_i) begin 
+                if (!EndianSel_i) begin 
+                    case (WidthSel_i)  
+                        0 : begin
+                            Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
+                        end
+                        1 : begin
+                            Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[15]):1'b0;
+                        end
+                        2 : begin
+                            Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[23]):1'b0;
+                        end
+                        3 : begin
+                            Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[31]):1'b0;
+                        end
+                    endcase
+                end
+                else begin 
+                    case (WidthSel_i)  
+                        0 : begin
+                            Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                        end
+                        1 : begin
+                            Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                        end
+                        2 : begin
+                            Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                        end
+                        3 : begin
+                            Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                        end
+                    endcase
+                end
+            end
+            else begin 
+                if (!EndianSel_i) begin 
+                    case (WidthSel_i)  
+                        0 : begin
+                            Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
+                        end
+                        1 : begin
+                            Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[15]):1'b0;
+                        end
+                        2 : begin
+                            Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[23]):1'b0;
+                        end
+                        3 : begin
+                            Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[31]):1'b0;
+                        end
+                    endcase
+                end
+                else begin 
+                    case (WidthSel_i)  
+                        0 : begin
+                            Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                        end
+                        1 : begin
+                            Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                        end
+                        2 : begin
+                            Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                        end
+                        3 : begin
+                            Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                        end
+                    endcase
+                end
+            end
+        end
+    end
+    
+    
+    
+    always @(posedge Clk_i) begin
+        ssR <= ssPol;
+        SSR <= Ss;
+    end
+    
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            startFlag = 1'b0;
+        end
+        else begin 
+            if (Start_i&& !stopFlag && SpiData_i != 0 && !oldDataFlag ) begin 
+                startFlag = 1'b1;
+            end
+            else begin 
+                startFlag = 1'b0;
+            end
+        end
+    end
+    
+    always @(posedge Clk_i) begin
+        if (SelSt_i) begin 
+            if (Ss_o && !ssR) begin 
+                valReg = 1'b1;
+            end
+            else begin 
+                valReg = 1'b0;
+            end
+        end
+        else begin 
+            if (!Ss_o&& ssR) begin 
+                valReg = 1'b1;
+            end
+            else begin 
+                valReg = 1'b0;
+            end
+        end
+    end
+    
+    
+    always @(*) begin 
+        if (Rst_i) begin 
+            ssNum = 1'b0;
+        end
+        else begin 
+            case (WidthSel_i) 
+                0 : begin 
+                    ssNum = 8;
+                end
+                1 : begin 
+                    ssNum = 16;
+                end
+                2 : begin 
+                    ssNum = 24;
+                end
+                3 : begin 
+                    ssNum = 32;
+                end
+            endcase
+        end
+    end
+    
+    
+    always @(negedge Clk_i) begin 
+        if (Rst_i) begin 
+            ssCnt <= 1'b0;
+        end
+        else if (ssCnt <= (ssNum+Lag_i+Lead_i)  && startFlag  ) begin 
+            ssCnt <= ssCnt + 1'b1;
+        end
+        else begin
+            if (ssCnt == ssNum-1 || !startFlag) begin 
+                ssCnt <= 1'b0;
+            end
+        end
+    end
+    
+    
+    
+    
+    always @(negedge Clk_i) begin 
+        if (Rst_i) begin 
+            Ss <= 1'b1;
+        end
+        else begin 
+            if (ssCnt <= (ssNum+Lag_i+Lead_i)  && startFlag ) begin 
+                Ss <= 1'b0;
+            end
+            else begin 
+                Ss <= 1'b1;
+            end
+        end
+    end
+    
+    
+    always @(negedge Clk_i) begin 
+        if (Rst_i) begin 
+            mosiReg0 <= SpiData_i[31:0];
+        end
+        else begin
+            if (!EndianSel_i) begin 
+                if (!SSR && (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
+                    mosiReg0 <= mosiReg0 << 1;
+                end
+                else begin 
+                    mosiReg0 <= SpiData_i[31:0];
+                end
+            end
+            else begin 
+                if (!SSR && (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
+                    mosiReg0 <= mosiReg0 >> 1;
+                end
+                else begin 
+                    mosiReg0 <= SpiData_i[31:0];
+                end
+            end
+        end
+    end
+    
+    
+    
+    
+    
+    
+    
+    endmodule

+ 288 - 0
src/src/Sim/tb_RF_FPGA.v

@@ -0,0 +1,288 @@
+`timescale 1ns/1ps
+
+module tb_SPIm;
+
+    // Parameters
+    parameter CLK_PERIOD = 8.13; // Clock period in ns
+
+    // Inputs
+    reg Clk_i;
+    reg Clk100;
+    reg Clk20;
+    reg Clk80;
+    reg Clk50;
+    reg Clk24; 
+    reg Rst_i;
+    reg Start_i;
+    reg CPHA_i;
+    reg [31:0] SPIdata;
+	reg SpiDataVal_i;
+    reg SELST_i;
+    reg [1:0] WidthSel_i;
+    reg LAG_i;
+    reg LEAD_i;
+    reg EndianSel_i;
+    reg [5:0] Stop_i;
+    reg PulsePol_i;
+
+    // Outputs
+    wire Mosi0_o;
+    wire Mosi1_o;
+    wire Mosi1_io;
+    wire Mosi2_o;
+    wire Mosi3_o;
+    wire Sck_o;
+    wire Ss_o;
+    wire Val_o;
+
+    wire valR;
+    wire valQ;
+    wire SckR;
+    wire SckQ;
+    wire SsR;
+    wire SsQ;
+    wire mosi0R;
+    wire mosi0Q;
+
+    wire locked;
+    wire rstInit;
+
+    reg [4:0] trCnt;
+    reg [4:0] trCntSync;
+
+    reg start; 
+
+    reg modeSel; 
+
+    assign Val_o = (((modeSel)? trCnt : trCntSync) < 2 ) ? valQ:(modeSel) ? valQ:valR;
+    assign Sck_o = (((modeSel)? trCnt : trCntSync)< 2 ) ? SckQ:(modeSel) ? SckQ:SckR;
+    assign Ss_o = (((modeSel)? trCnt : trCntSync)<2) ? SsQ:(modeSel) ? SsQ:SsR;
+    assign Mosi0_o = (((modeSel)? trCnt : trCntSync)< 2 ) ? mosi0Q:(modeSel) ? mosi0Q:mosi0R;
+    assign Mosi1_io = (modeSel) ? Mosi1_o:1'bz;
+
+
+
+    always @(posedge Clk50) begin 
+        if (Rst_i) begin 
+            trCnt <= 5'd0;
+        end
+        else begin 
+            if (trCnt < 2  && trCntSync < 2 && !modeSel) begin
+                if (valQ) begin 
+                    trCnt <= trCnt + 1;
+                end
+            end
+            else if (trCnt < 7 && modeSel) begin 
+                if (valQ) begin 
+                    trCnt <= trCnt + 1;
+                end
+            end
+            else if (trCntSync >= 2 && !modeSel) begin 
+                trCnt <= 5'd0;
+            end
+        end
+    end
+
+
+
+ always @(posedge Clk20) begin 
+    if (Rst_i) begin 
+        trCntSync <= 5'd0;
+    end
+    else begin
+        if (trCnt >= 2) begin 
+            trCntSync <= trCnt;
+        end
+        else if (Val_o && trCntSync < 7 ) begin 
+            trCntSync <= trCntSync+1;
+        end
+    end
+ end
+
+
+
+
+
+
+    always @(posedge Clk20) begin 
+        if (Rst_i) begin
+            start <= 1'b0;
+        end
+        else begin 
+            if (trCnt >= 2 ) begin 
+                start <= 1'b1;
+            end
+        end
+    end
+
+
+
+
+
+
+    SPIm_tb SPIm_inst (
+        .Clk_i(Clk20), 
+        .Rst_i(Rst_i), 
+        .Start_i(start), 
+        .ClockPhase_i(CPHA_i), 
+        .SpiData_i(SPIdata),
+        .SelSt_i(SELST_i),
+        .WidthSel_i(WidthSel_i),
+        .Lag_i(LAG_i),
+        .Lead_i(LEAD_i),
+        .EndianSel_i(EndianSel_i),
+        .Stop_i(Stop_i),
+        .PulsePol_i(PulsePol_i),
+        .Mosi0_o(mosi0R),
+        .Sck_o(SckR),
+        .Ss_o(SsR),
+        .Val_o(valR)
+    );
+
+
+
+    QuadSPIm QuadSPIm_inst (
+        .Clk_i(Clk100),
+        .Rst_i(Rst_i),
+        .Start_i(Start_i),
+        .ClockPhase_i(CPHA_i),
+        .SpiData_i(SPIdata),
+        .SpiDataVal_i(SpiDataVal_i),
+        .SelSt_i(SELST_i),
+        .WidthSel_i(WidthSel_i),
+        .Lag_i(LAG_i),
+        .Lead_i(LEAD_i),
+        .EndianSel_i(EndianSel_i),
+        .Stop_i(Stop_i),
+        .PulsePol_i(PulsePol_i),
+        .Mosi0_i(mosi0Q),
+        .Mosi1_i(Mosi1_o),
+        .Mosi2_i(Mosi2_o),
+        .Mosi3_i(Mosi3_o),
+        .Sck_o(SckQ),
+        .Ss_o(SsQ),
+        .Val_o(valQ)
+    );
+
+
+
+
+
+
+    RFTop RFTop_inst (
+        .Clk_i(Clk24),
+        .Sck_i(Sck_o),
+        .Ss_i(Ss_o),
+        .Mosi0_i(Mosi0_o),
+        .Mosi1_io(Mosi1_o),
+        .Mosi2_i(Mosi2_o),
+        .Mosi3_i(Mosi3_o),
+        .RstInit_o(rstInit),
+        .Locked_o(locked)
+
+    );
+
+
+
+    // Clock generation
+    always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
+    always #(10/2) Clk100 = ~Clk100;
+    always #(20/2) Clk50 = ~Clk50;
+    always #(12.5/2) Clk80 = ~Clk80;
+    always #(41.67/2) Clk24 = ~Clk24;
+    always #(50/2) Clk20 = ~Clk20;
+
+    // Initial setup and test sequence
+    initial begin
+        // Initialize Inputs
+        Clk_i = 1;
+        Clk100= 1;
+        Clk20 = 1;
+        Clk50 = 1;
+        Clk80 = 1;
+        Clk24 = 1;
+        Rst_i = 1;
+        Start_i = 0;
+        CPHA_i = 0;
+		SpiDataVal_i = 0;
+        modeSel = 0;
+        SELST_i = 1;//0:High, 1:Low
+        WidthSel_i = 2; // 3-32bit, 2-24bit, 1-16bit, 0-8bit
+        LAG_i = 0;
+        LEAD_i = 0;
+        EndianSel_i = 0; // 0:MSB first, 1:lsb first
+        Stop_i = 6'd0;
+        PulsePol_i = 0;
+
+        // Reset the system
+        #(CLK_PERIOD*10) Rst_i = 0;
+        #(CLK_PERIOD*2) Start_i = 1; // Start SPI transaction
+      
+    end
+
+    always @(*) begin
+        if (locked && !rstInit && modeSel)  begin
+            case (trCnt) 
+            0: begin 
+                SPIdata = {8'haa,8'haa,7'haa,1'b0};
+            end
+            1:begin 
+                SPIdata = {1'h0, 7'h2a, 16'd10};
+            end
+            2:begin 
+                SPIdata = {1'h0, 7'h2a, 16'd20};
+            end
+            3:begin 
+                SPIdata = {1'h0, 7'h2a, 16'd30};
+            end
+            4:begin 
+                SPIdata = {1'h0, 7'h2a, 16'd40};
+            end
+            5:begin 
+                SPIdata = {1'h0, 7'h2a, 16'd50};
+            end
+            6:begin 
+                SPIdata = {1'h0, 7'h2a, 16'd60};
+            end
+            7:begin 
+                SPIdata = {1'h0, 7'h2a, 16'd70};
+            end
+        endcase
+        end
+        else if (locked && !rstInit && !modeSel) begin 
+            case (trCnt) 
+            0: begin 
+                SPIdata = 24'h555554;
+            end
+            1:begin 
+                SPIdata = {1'h0, 7'h2a, 16'd10};
+            end
+        endcase
+        case (trCntSync) 
+           2 : begin 
+            SPIdata = {1'h0, 7'h2a, 16'd20};
+            end
+            3 : begin 
+                SPIdata = {1'h0, 7'h2a, 16'd30};
+            end
+            4 : begin 
+                SPIdata = {1'h0, 7'h2a, 16'd40};
+            end
+            5 : begin 
+                SPIdata = {1'h0, 7'h2a, 16'd50};
+            end
+            6 : begin 
+                SPIdata = {1'h0, 7'h2a, 16'd60};
+            end
+            7 : begin 
+                SPIdata = {1'h0, 7'h2a, 16'd70};
+            end
+        endcase
+        end
+        else begin 
+            SPIdata = 24'h0;
+        end
+    end
+
+
+endmodule

ファイルの差分が大きいため隠しています
+ 1373 - 0
src/src/Top/RFTop.v


+ 30 - 0
src/src/fifo_top/DDSFifo/fifo_top/FifoDDS.ipc

@@ -0,0 +1,30 @@
+[General]
+ipc_version=4
+file=FifoDDS
+module=FifoDDS
+target_device=gw1n9c-046
+type=fifo
+version=3.0
+
+[Config]
+ALEMPTY=0
+ALFULL=0
+COUNT_R=true
+COUNT_W=true
+DEPTH_R=5
+DEPTH_W=5
+ECC=false
+EN_ALEMPTY=false
+EN_ALFULL=false
+FWFT=true
+IMPL=1
+IO_INSERTION=false
+LANG=0
+OUTPUT_REG=false
+RDEN_CTRL=false
+RESET=true
+RESET_SYNC=true
+Read_Write_Check_on_RAM=true
+SIZE_W=72
+STANDARD_FIFO=false
+Synthesis_tool=GowinSynthesis

ファイルの差分が大きいため隠しています
+ 1996 - 0
src/src/fifo_top/DDSFifo/fifo_top/FifoDDS.v


ファイルの差分が大きいため隠しています
+ 4576 - 0
src/src/fifo_top/DDSFifo/fifo_top/FifoDDS.vo


+ 27 - 0
src/src/fifo_top/DDSFifo/fifo_top/FifoDDS_tmp.v

@@ -0,0 +1,27 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Thu Mar 21 09:34:24 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoDDS your_instance_name(
+		.Data(Data_i), //input [71:0] Data
+		.Reset(Reset_i), //input Reset
+		.WrClk(WrClk_i), //input WrClk
+		.RdClk(RdClk_i), //input RdClk
+		.WrEn(WrEn_i), //input WrEn
+		.RdEn(RdEn_i), //input RdEn
+		.Wnum(Wnum_o), //output [6:0] Wnum
+		.Rnum(Rnum_o), //output [6:0] Rnum
+		.Q(Q_o), //output [71:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 22 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FIFO.prj

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW1N-9C" package="PBGA256" speed="6" partNumber="GW1N-LV9PG256C6/I5"/>
+    <FileList>
+        <File path="C:/RF_FPGA/src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/fifo_define.v" type="verilog"/>
+        <File path="C:/RF_FPGA/src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/fifo_parameter.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/edc.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/RF_FPGA/src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO"/>
+        <Option type="output_file" value="FifoDDS.vg"/>
+        <Option type="output_template" value="FifoDDS_tmp.v"/>
+        <Option type="ram_balance" value="1"/>
+        <Option type="ram_rw_check" value="1"/>
+        <Option type="verilog_language" value="sysv-2017"/>
+    </OptionList>
+</Project>

+ 46 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS.log

@@ -0,0 +1,46 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\RF_FPGA\src\src\fifo_top\DDSFifo\fifo_top\temp\FIFO\fifo_define.v'
+Analyzing Verilog file 'C:\RF_FPGA\src\src\fifo_top\DDSFifo\fifo_top\temp\FIFO\fifo_parameter.v'
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":1)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":56)
+Back to file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":56)
+WARN  (EX2582) : Parameter 'WDEPTH' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":1)
+WARN  (EX2582) : Parameter 'WDSIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":2)
+WARN  (EX2582) : Parameter 'RDEPTH' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":3)
+WARN  (EX2582) : Parameter 'RDSIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":4)
+WARN  (EX2582) : Parameter 'ASIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":5)
+WARN  (EX2582) : Parameter 'RASIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":6)
+Compiling module 'FifoDDS'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":3)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+NOTE  (EX0101) : Current top module is "FifoDDS"
+[5%] Running netlist conversion ...
+Running device independent optimization ...
+[10%] Optimizing Phase 0 completed
+[15%] Optimizing Phase 1 completed
+[25%] Optimizing Phase 2 completed
+Running inference ...
+[30%] Inferring Phase 0 completed
+[40%] Inferring Phase 1 completed
+[50%] Inferring Phase 2 completed
+[55%] Inferring Phase 3 completed
+Running technical mapping ...
+[60%] Tech-Mapping Phase 0 completed
+[65%] Tech-Mapping Phase 1 completed
+[75%] Tech-Mapping Phase 2 completed
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\RF_FPGA\src\src\fifo_top\DDSFifo\fifo_top\temp\FIFO\FifoDDS.vg" completed
+Generate template file "C:\RF_FPGA\src\src\fifo_top\DDSFifo\fifo_top\temp\FIFO\FifoDDS_tmp.v" completed
+[100%] Generate report file "C:\RF_FPGA\src\src\fifo_top\DDSFifo\fifo_top\temp\FIFO\FifoDDS_syn.rpt.html" completed
+GowinSynthesis finish

ファイルの差分が大きいため隠しています
+ 1996 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS.vg


ファイルの差分が大きいため隠しています
+ 1789 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS_syn.rpt.html


+ 44 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS_syn_resource.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<title>Hierarchy Module Resource</title>
+<style type="text/css">
+body { font-family: Verdana, Arial, sans-serif; font-size: 14px; }
+div#main_wrapper{ width: 100%; }
+h1 {text-align: center; }
+h1 {margin-top: 36px; }
+table, th, td { border: 1px solid #aaa; }
+table { border-collapse:collapse; margin-top: 10px; margin-bottom: 20px; width: 100%; }
+th, td { align = "center"; padding: 5px 2px 5px 5px; }
+th { color: #fff; font-weight: bold; background-color: #0084ff; }
+table td.label { width: 20%; white-space: nowrap; min-width: 20px; background-color: #dee8f4; }
+</style>
+</head>
+<body>
+<div id="main_wrapper">
+<div id="content">
+<h1>Hierarchy Module Resource</h1>
+<table>
+<tr>
+<th class="label">MODULE NAME</th>
+<th class="label">REG NUMBER</th>
+<th class="label">ALU NUMBER</th>
+<th class="label">LUT NUMBER</th>
+<th class="label">DSP NUMBER</th>
+<th class="label">BSRAM NUMBER</th>
+<th class="label">SSRAM NUMBER</th>
+</tr>
+<tr>
+<td class="label">FifoDDS (C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v)</td>
+<td align = "center">146</td>
+<td align = "center">21</td>
+<td align = "center">206</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+<td align = "center">72</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="FifoDDS" Register="146" Alu="21" Lut="206" Ssram="72" T_Register="146(146)" T_Alu="21(21)" T_Lut="206(206)" T_Ssram="72(72)"/>

+ 27 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/FifoDDS_tmp.v

@@ -0,0 +1,27 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Thu Mar 21 09:34:24 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoDDS your_instance_name(
+		.Data(Data_i), //input [71:0] Data
+		.Reset(Reset_i), //input Reset
+		.WrClk(WrClk_i), //input WrClk
+		.RdClk(RdClk_i), //input RdClk
+		.WrEn(WrEn_i), //input WrEn
+		.RdEn(RdEn_i), //input RdEn
+		.Wnum(Wnum_o), //output [6:0] Wnum
+		.Rnum(Rnum_o), //output [6:0] Rnum
+		.Q(Q_o), //output [71:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 8 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/fifo_define.v

@@ -0,0 +1,8 @@
+`define module_name FifoDDS
+`define getname(oriName,tmodule_name) \~oriName.tmodule_name 
+`define DSR_BASED
+`define FWFT
+`define Count_W
+`define Count_R
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/fifo_parameter.v

@@ -0,0 +1,6 @@
+parameter WDEPTH = 64;
+parameter WDSIZE = 72;
+parameter RDEPTH = 64;
+parameter RDSIZE = 72;
+parameter ASIZE = 6;
+parameter RASIZE = 6;

+ 1 - 0
src/src/fifo_top/DDSFifo/fifo_top/temp/FIFO/project.ini

@@ -0,0 +1 @@
+RESOURCE_CHECK=false

+ 420 - 0
src/src/fifo_top/FifoCtrl.v

@@ -0,0 +1,420 @@
+module FifoCtrl#(
+    parameter FifoNum = 8
+)(
+input WrClk_i,
+input Rst_i,
+input[FifoNum-1:0]  RdClk_i,
+input [4:0] CurrState_i,
+input [2:0] DDSFifoCnt_i,
+input [2:0] MAX2870FifoCnt_i,
+input ValToReadFromRxFifo1_i,
+input ValToReadFromRxFifo2_i,
+input ValToReadFromRxFifo3_i,
+input ValToReadFromRxFifo4_i,
+input ValToReadFromRxFifo5_i,
+input ValToReadFromRxFifo6_i,
+input ValToReadFromRxFifo7_i,
+input [4:0] CurrStateSync1_i,
+input [4:0] CurrStateSync2_i,
+input [4:0] CurrStateSync3_i,
+input [4:0] CurrStateSync4_i,
+input [4:0] CurrStateSync5_i,
+input [23:0] DataToRxFifo_i,
+input ValToRxFifo_i,
+
+
+output [FifoNum-1:0] EmptyFlag_o,
+
+output [23:0] DataFromRxFifo1_o,
+output [63:0] DataFromRxFifo2_o,
+output [31:0] DataFromMAX2870Fifo_o,
+output [7:0]  DataFromShRegFifo_o,
+output [15:0] DataFromAttFifo_o,
+output [15:0] DataFromDacFifo_o,
+output [15:0] DataFromPotFifo_o
+
+
+
+);
+
+
+reg     [FifoNum-1:0] rxFifoWrEn;
+reg     [FifoNum-1:0] rxFifoReadEn;
+
+reg     [0:23] dataToRxFifoReg [FifoNum-1:0];
+reg     [23:0] dataToRxFifoReg21;
+reg     [23:0] dataToRxFifoReg22;
+reg     [23:0] dataToRxFifoReg23;
+wire    [71:0] dataToRxFifo2;
+wire    [71:0] dataFromRxFifo2;
+
+reg     [47:0] dataToFifoMax2870Reg;
+wire    [47:0] dataToFifoMax2870;
+wire    [47:0] dataFromMAX2870Fifo;
+
+reg     [1:0] rdEnCnt1;
+reg     [1:0] rdEnCnt2;
+reg     [1:0] rdEnCnt3;
+reg     [1:0] rdEnCnt4;
+reg     [1:0] rdEnCnt5;
+reg     [1:0] rdEnCnt6;
+reg     [1:0] rdEnCnt7;
+
+
+
+wire [FifoNum-1:0] emptyFlag;
+wire [FifoNum-1:0] fullFlag;
+wire [0:23] dataToRxFifo [FifoNum-1:0];
+wire [0:23] dataFromRxFifo [FifoNum-1:0];
+
+
+
+assign dataToRxFifo[0]= dataToRxFifoReg[0];
+assign dataToRxFifo[1]= dataToRxFifoReg[1];
+assign dataToRxFifo[2]= dataToRxFifoReg[2];
+assign dataToRxFifo[3]= dataToRxFifoReg[3];
+assign dataToRxFifo[4]= dataToRxFifoReg[4];
+assign DataFromRxFifo1_o = dataFromRxFifo[0];
+assign DataFromRxFifo2_o = dataFromRxFifo2[71:8];
+assign DataFromMAX2870Fifo_o = dataFromMAX2870Fifo[47-:32];
+assign DataFromShRegFifo_o = dataFromRxFifo[5][0:7];
+assign DataFromAttFifo_o = dataFromRxFifo[4][0:15];
+assign DataFromDacFifo_o = dataFromRxFifo[3][0:15];
+assign DataFromPotFifo_o = dataFromRxFifo[2][0:15];
+
+
+
+
+
+assign dataToRxFifo2 = {dataToRxFifoReg21, dataToRxFifoReg22, dataToRxFifoReg23};
+assign dataToFifoMax2870 = dataToFifoMax2870Reg;
+
+assign EmptyFlag_o = emptyFlag;
+
+integer k; 
+
+always @(posedge WrClk_i) begin 
+    case (CurrState_i)  
+        5'd1 : begin 
+            dataToRxFifoReg[0] <= DataToRxFifo_i;
+        end
+        5'd2 : begin
+            if (DDSFifoCnt_i == 3'h0 ) begin 
+                dataToRxFifoReg21 <= DataToRxFifo_i;
+            end
+            else if (DDSFifoCnt_i == 3'h1) begin 
+                dataToRxFifoReg22 <= DataToRxFifo_i;
+            end
+            else if (DDSFifoCnt_i == 3'h3) begin 
+                dataToRxFifoReg23 <= DataToRxFifo_i;
+            end
+        end
+        5'd3 : begin 
+            dataToRxFifoReg[2] <= DataToRxFifo_i;
+        end
+        5'd4 : begin 
+            dataToRxFifoReg[3] <= DataToRxFifo_i;
+        end
+        5'd5 : begin 
+            dataToRxFifoReg[4] <= DataToRxFifo_i;
+        end
+        5'd6 : begin 
+            dataToRxFifoReg[5] <= DataToRxFifo_i;
+        end
+        5'd7 : begin 
+            case (MAX2870FifoCnt_i) 
+                2'h0 : begin
+                    dataToFifoMax2870Reg[47:24] <= DataToRxFifo_i;
+                end
+                2'h1 : begin
+                    dataToFifoMax2870Reg[23:0] <= DataToRxFifo_i;
+                end 
+                // default: begin 
+                //     dataToFifoMax2870Reg = 0;
+                // end
+            endcase
+        end
+        5'd8 : begin 
+            dataToRxFifoReg[7] <= DataToRxFifo_i;
+        end
+        default: begin 
+            for (k = 0; k < FifoNum; k = k + 1) begin 
+                dataToRxFifoReg[k] <= 0;
+            end
+            dataToRxFifoReg21 <= 0;
+            dataToRxFifoReg22 <= 0;
+            dataToRxFifoReg23 <= 0;
+        end
+    endcase
+end
+
+
+
+always @(posedge WrClk_i) begin 
+    case (CurrState_i) 
+    0 : begin 
+        rxFifoWrEn <= 1'b0;
+    end
+    1: begin 
+        if (!fullFlag[0] && ValToRxFifo_i) begin 
+                rxFifoWrEn[0] <= 1'b1;
+            end
+            else begin 
+                rxFifoWrEn[0] <= 1'b0;
+            end
+    end
+    2: begin 
+        if (!fullFlag[1] && ValToRxFifo_i && DDSFifoCnt_i == 3'h2 ) begin 
+                rxFifoWrEn[1] <= 1'b1;
+            end
+            else begin 
+                rxFifoWrEn[1] <= 1'b0;
+            end
+    end
+    3: begin 
+        if (!fullFlag[2] && ValToRxFifo_i) begin 
+                rxFifoWrEn[2] <= 1'b1;
+            end
+            else begin 
+                rxFifoWrEn[2] <= 1'b0;
+            end
+    end
+    4: begin 
+        if (!fullFlag[3] && ValToRxFifo_i) begin 
+                rxFifoWrEn[3] <= 1'b1;
+            end
+            else begin 
+                rxFifoWrEn[3] <= 1'b0;
+            end
+    end
+    5: begin 
+        if (!fullFlag[4] && ValToRxFifo_i) begin 
+                rxFifoWrEn[4] <= 1'b1;
+            end
+            else begin 
+                rxFifoWrEn[4] <= 1'b0;
+            end
+    end
+    6: begin 
+        if (!fullFlag[5] && ValToRxFifo_i) begin 
+                rxFifoWrEn[5] <= 1'b1;
+            end
+            else begin 
+                rxFifoWrEn[5] <= 1'b0;
+            end
+    end
+    7: begin 
+        if (!fullFlag[6] && ValToRxFifo_i && MAX2870FifoCnt_i == 3'h1) begin 
+                rxFifoWrEn[6] <= 1'b1;
+            end
+            else begin 
+                rxFifoWrEn[6] <= 1'b0;
+            end
+    end
+    default: begin 
+        rxFifoWrEn <= 1'b0;
+    end
+    endcase
+end
+
+always @(posedge RdClk_i[0]) begin
+    if (!emptyFlag[0] && ValToReadFromRxFifo1_i && rdEnCnt1 < 1 ) begin 
+        rxFifoReadEn[0] <= 1'b1;
+    end
+    else if (rdEnCnt1 >= 1 ) begin 
+        rxFifoReadEn[0] <= 1'b0;
+    end
+    else begin 
+        rxFifoReadEn[0] <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[1]) begin 
+    if (!emptyFlag[1] && ValToReadFromRxFifo2_i && rdEnCnt2 < 1 ) begin 
+        rxFifoReadEn[1] <= 1'b1;
+    end
+    else if (rdEnCnt2 >= 1 ) begin 
+        rxFifoReadEn[1] <= 1'b0;
+    end
+    else begin 
+        rxFifoReadEn[1] <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[2]) begin 
+    if (!emptyFlag[2] && ValToReadFromRxFifo3_i && rdEnCnt3 < 1 ) begin 
+        rxFifoReadEn[2] <= 1'b1;
+    end
+    else if (rdEnCnt3 >= 1 ) begin 
+        rxFifoReadEn[2] <= 1'b0;
+    end
+    else begin 
+        rxFifoReadEn[2] <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[3]) begin 
+    if (!emptyFlag[3] && ValToReadFromRxFifo4_i && rdEnCnt4 < 1 ) begin 
+        rxFifoReadEn[3] <= 1'b1;
+    end
+    else if (rdEnCnt4 >= 1 ) begin 
+        rxFifoReadEn[3] <= 1'b0;
+    end
+    else begin 
+        rxFifoReadEn[3] <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[4]) begin 
+    if (!emptyFlag[4] && ValToReadFromRxFifo5_i && rdEnCnt5 < 1 ) begin 
+        rxFifoReadEn[4] <= 1'b1;
+    end
+    else if (rdEnCnt5 >= 1 ) begin 
+        rxFifoReadEn[4] <= 1'b0;
+    end
+    else begin 
+        rxFifoReadEn[4] <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[5]) begin 
+    if (!emptyFlag[5] && ValToReadFromRxFifo6_i && rdEnCnt6 < 1 ) begin 
+        rxFifoReadEn[5] <= 1'b1;
+    end
+    else if (rdEnCnt6 >= 1 ) begin 
+        rxFifoReadEn[5] <= 1'b0;
+    end
+    else begin 
+        rxFifoReadEn[5] <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[6]) begin 
+    if (!emptyFlag[6] && ValToReadFromRxFifo7_i && rdEnCnt7 < 1 ) begin 
+        rxFifoReadEn[6] <= 1'b1;
+    end
+    else if (rdEnCnt7 >= 1 ) begin 
+        rxFifoReadEn[6] <= 1'b0;
+    end
+    else begin 
+        rxFifoReadEn[6] <= 1'b0;
+    end
+end
+
+
+always @(posedge RdClk_i[0]) begin 
+    if (rxFifoReadEn[0]) begin 
+        rdEnCnt1 <= rdEnCnt1 + 1'b1;
+    end
+    else begin 
+        rdEnCnt1 <= 1'b0;
+    end
+end
+
+
+always @(posedge RdClk_i[1]) begin 
+    if (rxFifoReadEn[1]) begin 
+        rdEnCnt2 <= rdEnCnt2 + 1'b1;
+    end
+    else begin 
+        rdEnCnt2 <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[2]) begin 
+    if (rxFifoReadEn[2]) begin 
+        rdEnCnt3 <= rdEnCnt3 + 1'b1;
+    end
+    else begin 
+        rdEnCnt3 <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[3]) begin 
+    if (rxFifoReadEn[3]) begin 
+        rdEnCnt4 <= rdEnCnt4 + 1'b1;
+    end
+    else begin 
+        rdEnCnt4 <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[4]) begin 
+    if (rxFifoReadEn[4]) begin 
+        rdEnCnt5 <= rdEnCnt5 + 1'b1;
+    end
+    else begin 
+        rdEnCnt5 <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[5]) begin 
+    if (rxFifoReadEn[5]) begin 
+        rdEnCnt6 <= rdEnCnt6 + 1'b1;
+    end
+    else begin 
+        rdEnCnt6 <= 1'b0;
+    end
+end
+
+always @(posedge RdClk_i[6]) begin 
+    if (rxFifoReadEn[6]) begin 
+        rdEnCnt7 <= rdEnCnt7 + 1'b1;
+    end
+    else begin 
+        rdEnCnt7 <= 1'b0;
+    end
+end
+
+
+genvar i;
+
+generate for (i = 0; i < FifoNum; i = i + 1 ) begin : fifoGen
+    if (i != 1  && i != 6 && i != 7) begin
+        FifoRxRF RxFifoRF (
+            .Data(dataToRxFifo[i]),
+            .Reset(Rst_i),
+            .WrClk(WrClk_i),
+            .RdClk(RdClk_i[i]),
+            .WrEn(rxFifoWrEn[i]),
+            .RdEn(rxFifoReadEn[i]),
+            .Empty(emptyFlag[i]),
+            .Full(fullFlag[i]),
+            .Q(dataFromRxFifo[i])
+        );
+    end
+end 
+endgenerate
+
+
+FifoDDS DDSFifo (
+    .Data(dataToRxFifo2),
+    .Reset(Rst_i),
+    .WrClk(WrClk_i),
+    .RdClk(RdClk_i[1]),
+    .WrEn(rxFifoWrEn[1]),
+    .RdEn(rxFifoReadEn[1]),
+    .Empty(emptyFlag[1]),
+    .Full(fullFlag[1]),
+    .Q(dataFromRxFifo2)
+
+);
+
+
+FifoMax2870 Max2870Fifo (
+    .Data(dataToFifoMax2870),
+    .Reset(Rst_i),
+    .WrClk(WrClk_i),
+    .RdClk(RdClk_i[6]),
+    .WrEn(rxFifoWrEn[6]),
+    .RdEn(rxFifoReadEn[6]),
+    .Empty(emptyFlag[6]),
+    .Full(fullFlag[6]),
+    .Q(dataFromMAX2870Fifo)
+);
+
+
+
+
+
+endmodule

+ 30 - 0
src/src/fifo_top/FifoRxRF.ipc

@@ -0,0 +1,30 @@
+[General]
+ipc_version=4
+file=FifoRxRF
+module=FifoRxRF
+target_device=gw1n9c-046
+type=fifo
+version=3.0
+
+[Config]
+ALEMPTY=0
+ALFULL=0
+COUNT_R=true
+COUNT_W=true
+DEPTH_R=5
+DEPTH_W=5
+ECC=false
+EN_ALEMPTY=false
+EN_ALFULL=false
+FWFT=true
+IMPL=1
+IO_INSERTION=false
+LANG=0
+OUTPUT_REG=false
+RDEN_CTRL=false
+RESET=true
+RESET_SYNC=true
+Read_Write_Check_on_RAM=true
+SIZE_W=24
+STANDARD_FIFO=false
+Synthesis_tool=GowinSynthesis

ファイルの差分が大きいため隠しています
+ 1016 - 0
src/src/fifo_top/FifoRxRF.v


ファイルの差分が大きいため隠しています
+ 2368 - 0
src/src/fifo_top/FifoRxRF.vo


+ 27 - 0
src/src/fifo_top/FifoRxRF_tmp.v

@@ -0,0 +1,27 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Thu Mar 21 09:39:05 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoRxRF your_instance_name(
+		.Data(Data_i), //input [23:0] Data
+		.Reset(Reset_i), //input Reset
+		.WrClk(WrClk_i), //input WrClk
+		.RdClk(RdClk_i), //input RdClk
+		.WrEn(WrEn_i), //input WrEn
+		.RdEn(RdEn_i), //input RdEn
+		.Wnum(Wnum_o), //output [6:0] Wnum
+		.Rnum(Rnum_o), //output [6:0] Rnum
+		.Q(Q_o), //output [23:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 30 - 0
src/src/fifo_top/MAX2870FIFO/FifoMax2870.ipc

@@ -0,0 +1,30 @@
+[General]
+ipc_version=4
+file=FifoMax2870
+module=FifoMax2870
+target_device=gw2a55c-005
+type=fifo
+version=3.0
+
+[Config]
+ALEMPTY=0
+ALFULL=0
+COUNT_R=false
+COUNT_W=false
+DEPTH_R=2
+DEPTH_W=2
+ECC=false
+EN_ALEMPTY=false
+EN_ALFULL=false
+FWFT=true
+IMPL=1
+IO_INSERTION=false
+LANG=0
+OUTPUT_REG=false
+RDEN_CTRL=false
+RESET=true
+RESET_SYNC=true
+Read_Write_Check_on_RAM=true
+SIZE_W=48
+STANDARD_FIFO=false
+Synthesis_tool=GowinSynthesis

ファイルの差分が大きいため隠しています
+ 1121 - 0
src/src/fifo_top/MAX2870FIFO/FifoMax2870.vo


+ 25 - 0
src/src/fifo_top/MAX2870FIFO/FifoMax2870_tmp.v

@@ -0,0 +1,25 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW2A-LV55PG484C8/I7
+//Device: GW2A-55
+//Device Version: C
+//Created Time: Tue Feb 27 10:41:13 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoMax2870 your_instance_name(
+		.Data(Data_i), //input [47:0] Data
+		.Reset(Reset_i), //input Reset
+		.WrClk(WrClk_i), //input WrClk
+		.RdClk(RdClk_i), //input RdClk
+		.WrEn(WrEn_i), //input WrEn
+		.RdEn(RdEn_i), //input RdEn
+		.Q(Q_o), //output [47:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 30 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870.ipc

@@ -0,0 +1,30 @@
+[General]
+ipc_version=4
+file=FifoMax2870
+module=FifoMax2870
+target_device=gw1n9c-046
+type=fifo
+version=3.0
+
+[Config]
+ALEMPTY=0
+ALFULL=0
+COUNT_R=false
+COUNT_W=false
+DEPTH_R=5
+DEPTH_W=5
+ECC=false
+EN_ALEMPTY=false
+EN_ALFULL=false
+FWFT=true
+IMPL=1
+IO_INSERTION=false
+LANG=0
+OUTPUT_REG=false
+RDEN_CTRL=false
+RESET=true
+RESET_SYNC=true
+Read_Write_Check_on_RAM=true
+SIZE_W=48
+STANDARD_FIFO=false
+Synthesis_tool=GowinSynthesis

ファイルの差分が大きいため隠しています
+ 1380 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870.v


ファイルの差分が大きいため隠しています
+ 3142 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870.vo


+ 25 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/FifoMax2870_tmp.v

@@ -0,0 +1,25 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Thu Mar 21 09:34:56 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoMax2870 your_instance_name(
+		.Data(Data_i), //input [47:0] Data
+		.Reset(Reset_i), //input Reset
+		.WrClk(WrClk_i), //input WrClk
+		.RdClk(RdClk_i), //input RdClk
+		.WrEn(WrEn_i), //input WrEn
+		.RdEn(RdEn_i), //input RdEn
+		.Q(Q_o), //output [47:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 22 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FIFO.prj

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW1N-9C" package="PBGA256" speed="6" partNumber="GW1N-LV9PG256C6/I5"/>
+    <FileList>
+        <File path="C:/RF_FPGA/src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/fifo_define.v" type="verilog"/>
+        <File path="C:/RF_FPGA/src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/fifo_parameter.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/edc.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/RF_FPGA/src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO"/>
+        <Option type="output_file" value="FifoMax2870.vg"/>
+        <Option type="output_template" value="FifoMax2870_tmp.v"/>
+        <Option type="ram_balance" value="1"/>
+        <Option type="ram_rw_check" value="1"/>
+        <Option type="verilog_language" value="sysv-2017"/>
+    </OptionList>
+</Project>

+ 46 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870.log

@@ -0,0 +1,46 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\RF_FPGA\src\src\fifo_top\MAX2870FIFO\fifo_top\temp\FIFO\fifo_define.v'
+Analyzing Verilog file 'C:\RF_FPGA\src\src\fifo_top\MAX2870FIFO\fifo_top\temp\FIFO\fifo_parameter.v'
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":1)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":56)
+Back to file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":56)
+WARN  (EX2582) : Parameter 'WDEPTH' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":1)
+WARN  (EX2582) : Parameter 'WDSIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":2)
+WARN  (EX2582) : Parameter 'RDEPTH' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":3)
+WARN  (EX2582) : Parameter 'RDSIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":4)
+WARN  (EX2582) : Parameter 'ASIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":5)
+WARN  (EX2582) : Parameter 'RASIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":6)
+Compiling module 'FifoMax2870'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":3)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+NOTE  (EX0101) : Current top module is "FifoMax2870"
+[5%] Running netlist conversion ...
+Running device independent optimization ...
+[10%] Optimizing Phase 0 completed
+[15%] Optimizing Phase 1 completed
+[25%] Optimizing Phase 2 completed
+Running inference ...
+[30%] Inferring Phase 0 completed
+[40%] Inferring Phase 1 completed
+[50%] Inferring Phase 2 completed
+[55%] Inferring Phase 3 completed
+Running technical mapping ...
+[60%] Tech-Mapping Phase 0 completed
+[65%] Tech-Mapping Phase 1 completed
+[75%] Tech-Mapping Phase 2 completed
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\RF_FPGA\src\src\fifo_top\MAX2870FIFO\fifo_top\temp\FIFO\FifoMax2870.vg" completed
+Generate template file "C:\RF_FPGA\src\src\fifo_top\MAX2870FIFO\fifo_top\temp\FIFO\FifoMax2870_tmp.v" completed
+[100%] Generate report file "C:\RF_FPGA\src\src\fifo_top\MAX2870FIFO\fifo_top\temp\FIFO\FifoMax2870_syn.rpt.html" completed
+GowinSynthesis finish

ファイルの差分が大きいため隠しています
+ 1380 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870.vg


ファイルの差分が大きいため隠しています
+ 1789 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870_syn.rpt.html


+ 44 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870_syn_resource.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<title>Hierarchy Module Resource</title>
+<style type="text/css">
+body { font-family: Verdana, Arial, sans-serif; font-size: 14px; }
+div#main_wrapper{ width: 100%; }
+h1 {text-align: center; }
+h1 {margin-top: 36px; }
+table, th, td { border: 1px solid #aaa; }
+table { border-collapse:collapse; margin-top: 10px; margin-bottom: 20px; width: 100%; }
+th, td { align = "center"; padding: 5px 2px 5px 5px; }
+th { color: #fff; font-weight: bold; background-color: #0084ff; }
+table td.label { width: 20%; white-space: nowrap; min-width: 20px; background-color: #dee8f4; }
+</style>
+</head>
+<body>
+<div id="main_wrapper">
+<div id="content">
+<h1>Hierarchy Module Resource</h1>
+<table>
+<tr>
+<th class="label">MODULE NAME</th>
+<th class="label">REG NUMBER</th>
+<th class="label">ALU NUMBER</th>
+<th class="label">LUT NUMBER</th>
+<th class="label">DSP NUMBER</th>
+<th class="label">BSRAM NUMBER</th>
+<th class="label">SSRAM NUMBER</th>
+</tr>
+<tr>
+<td class="label">FifoMax2870 (C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v)</td>
+<td align = "center">108</td>
+<td align = "center">7</td>
+<td align = "center">145</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+<td align = "center">48</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="FifoMax2870" Register="108" Alu="7" Lut="145" Ssram="48" T_Register="108(108)" T_Alu="7(7)" T_Lut="145(145)" T_Ssram="48(48)"/>

+ 25 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/FifoMax2870_tmp.v

@@ -0,0 +1,25 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Thu Mar 21 09:34:56 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoMax2870 your_instance_name(
+		.Data(Data_i), //input [47:0] Data
+		.Reset(Reset_i), //input Reset
+		.WrClk(WrClk_i), //input WrClk
+		.RdClk(RdClk_i), //input RdClk
+		.WrEn(WrEn_i), //input WrEn
+		.RdEn(RdEn_i), //input RdEn
+		.Q(Q_o), //output [47:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 6 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/fifo_define.v

@@ -0,0 +1,6 @@
+`define module_name FifoMax2870
+`define getname(oriName,tmodule_name) \~oriName.tmodule_name 
+`define DSR_BASED
+`define FWFT
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/fifo_parameter.v

@@ -0,0 +1,6 @@
+parameter WDEPTH = 64;
+parameter WDSIZE = 48;
+parameter RDEPTH = 64;
+parameter RDSIZE = 48;
+parameter ASIZE = 6;
+parameter RASIZE = 6;

+ 1 - 0
src/src/fifo_top/MAX2870FIFO/fifo_top/temp/FIFO/project.ini

@@ -0,0 +1 @@
+RESOURCE_CHECK=false

+ 22 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/FIFO.prj

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW2A-55C" package="PBGA484" speed="8" partNumber="GW2A-LV55PG484C8/I7"/>
+    <FileList>
+        <File path="C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/fifo_top/MAX2870FIFO/temp/FIFO/fifo_define.v" type="verilog"/>
+        <File path="C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/fifo_top/MAX2870FIFO/temp/FIFO/fifo_parameter.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/edc.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/fifo_top/MAX2870FIFO/temp/FIFO"/>
+        <Option type="output_file" value="FifoMax2870.vg"/>
+        <Option type="output_template" value="FifoMax2870_tmp.v"/>
+        <Option type="ram_balance" value="1"/>
+        <Option type="ram_rw_check" value="1"/>
+        <Option type="verilog_language" value="sysv-2017"/>
+    </OptionList>
+</Project>

+ 46 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870.log

@@ -0,0 +1,46 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\Users\AnatoliyChigirinskiy\Documents\RF_FPGA\src\fifo_top\MAX2870FIFO\temp\FIFO\fifo_define.v'
+Analyzing Verilog file 'C:\Users\AnatoliyChigirinskiy\Documents\RF_FPGA\src\fifo_top\MAX2870FIFO\temp\FIFO\fifo_parameter.v'
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":1)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":56)
+Back to file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":56)
+WARN  (EX2582) : Parameter 'WDEPTH' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":1)
+WARN  (EX2582) : Parameter 'WDSIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":2)
+WARN  (EX2582) : Parameter 'RDEPTH' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":3)
+WARN  (EX2582) : Parameter 'RDSIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":4)
+WARN  (EX2582) : Parameter 'ASIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":5)
+WARN  (EX2582) : Parameter 'RASIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":6)
+Compiling module 'FifoMax2870'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":3)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+NOTE  (EX0101) : Current top module is "FifoMax2870"
+[5%] Running netlist conversion ...
+Running device independent optimization ...
+[10%] Optimizing Phase 0 completed
+[15%] Optimizing Phase 1 completed
+[25%] Optimizing Phase 2 completed
+Running inference ...
+[30%] Inferring Phase 0 completed
+[40%] Inferring Phase 1 completed
+[50%] Inferring Phase 2 completed
+[55%] Inferring Phase 3 completed
+Running technical mapping ...
+[60%] Tech-Mapping Phase 0 completed
+[65%] Tech-Mapping Phase 1 completed
+[75%] Tech-Mapping Phase 2 completed
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\Users\AnatoliyChigirinskiy\Documents\RF_FPGA\src\fifo_top\MAX2870FIFO\temp\FIFO\FifoMax2870.vg" completed
+Generate template file "C:\Users\AnatoliyChigirinskiy\Documents\RF_FPGA\src\fifo_top\MAX2870FIFO\temp\FIFO\FifoMax2870_tmp.v" completed
+[100%] Generate report file "C:\Users\AnatoliyChigirinskiy\Documents\RF_FPGA\src\fifo_top\MAX2870FIFO\temp\FIFO\FifoMax2870_syn.rpt.html" completed
+GowinSynthesis finish

+ 420 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870.vg

@@ -0,0 +1,420 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.01 (64-bit)"
+//Tue Feb 27 10:41:13 2024
+
+//Source file index table:
+//file0 "\C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/fifo_top/MAX2870FIFO/temp/FIFO/fifo_define.v"
+//file1 "\C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/fifo_top/MAX2870FIFO/temp/FIFO/fifo_parameter.v"
+//file2 "\C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/edc.v"
+//file3 "\C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo.v"
+//file4 "\C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v"
+`timescale 100 ps/100 ps
+`pragma protect begin_protected
+`pragma protect version="2.3"
+`pragma protect author="default"
+`pragma protect author_info="default"
+`pragma protect encrypt_agent="GOWIN"
+`pragma protect encrypt_agent_info="GOWIN Encrypt Version 2.3"
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=256)
+`pragma protect key_keyowner="GOWIN",key_keyname="GWK2023-09",key_method="rsa"
+`pragma protect key_block
+IYaX7/vCOCXbPULZyYtvRuW8CXBPZK5ThOl31yuCHNliJX0Ds3g5I16SzyN86qpT3sPu6wWDHPku
+D1PYJ4ASS1vecfjO8vrGEMExn+IMJiaH5vl0Zust9iZaCU41yXdgpvfiJ7/myzXkIuWgsavXeW8/
+shWsmVENHyq5oNyiYgtZuW7EFv2ImECrnfpZjE43+g3LMyKzxWuUviAxxb3bLBq4yBjOzyolO18u
+rXpzyLbs3RbhC+WfJEP+peyF9Njjg0dAwVfMDBdfaFupijd3J/06MWdFheeP6U2OqdzKHcEzG898
+DeOSOzCqv41W9K4jf+PUOWhiaMnOGOLUBEm5rg==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=19456)
+`pragma protect data_keyowner="default-ip-vendor"
+`pragma protect data_keyname="default-ip-key"
+`pragma protect data_method="aes128-cfb"
+`pragma protect data_block
+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
+60edcBa/NUESGQ36yqLLJHPE7Q==
+`pragma protect end_protected
+module FifoMax2870 (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [47:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [47:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.FifoMax2870  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[47:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[47:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoMax2870 */

ファイルの差分が大きいため隠しています
+ 1709 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870_syn.rpt.html


+ 44 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870_syn_resource.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<title>Hierarchy Module Resource</title>
+<style type="text/css">
+body { font-family: Verdana, Arial, sans-serif; font-size: 14px; }
+div#main_wrapper{ width: 100%; }
+h1 {text-align: center; }
+h1 {margin-top: 36px; }
+table, th, td { border: 1px solid #aaa; }
+table { border-collapse:collapse; margin-top: 10px; margin-bottom: 20px; width: 100%; }
+th, td { align = "center"; padding: 5px 2px 5px 5px; }
+th { color: #fff; font-weight: bold; background-color: #0084ff; }
+table td.label { width: 20%; white-space: nowrap; min-width: 20px; background-color: #dee8f4; }
+</style>
+</head>
+<body>
+<div id="main_wrapper">
+<div id="content">
+<h1>Hierarchy Module Resource</h1>
+<table>
+<tr>
+<th class="label">MODULE NAME</th>
+<th class="label">REG NUMBER</th>
+<th class="label">ALU NUMBER</th>
+<th class="label">LUT NUMBER</th>
+<th class="label">DSP NUMBER</th>
+<th class="label">BSRAM NUMBER</th>
+<th class="label">SSRAM NUMBER</th>
+</tr>
+<tr>
+<td class="label">FifoMax2870 (C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v)</td>
+<td align = "center">84</td>
+<td align = "center">4</td>
+<td align = "center">27</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+<td align = "center">12</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="FifoMax2870" Register="84" Alu="4" Lut="27" Ssram="12" T_Register="84(84)" T_Alu="4(4)" T_Lut="27(27)" T_Ssram="12(12)"/>

+ 25 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/FifoMax2870_tmp.v

@@ -0,0 +1,25 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW2A-LV55PG484C8/I7
+//Device: GW2A-55
+//Device Version: C
+//Created Time: Tue Feb 27 10:41:13 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoMax2870 your_instance_name(
+		.Data(Data_i), //input [47:0] Data
+		.Reset(Reset_i), //input Reset
+		.WrClk(WrClk_i), //input WrClk
+		.RdClk(RdClk_i), //input RdClk
+		.WrEn(WrEn_i), //input WrEn
+		.RdEn(RdEn_i), //input RdEn
+		.Q(Q_o), //output [47:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 6 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/fifo_define.v

@@ -0,0 +1,6 @@
+`define module_name FifoMax2870
+`define getname(oriName,tmodule_name) \~oriName.tmodule_name 
+`define DSR_BASED
+`define FWFT
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/fifo_parameter.v

@@ -0,0 +1,6 @@
+parameter WDEPTH = 8;
+parameter WDSIZE = 48;
+parameter RDEPTH = 8;
+parameter RDSIZE = 48;
+parameter ASIZE = 3;
+parameter RASIZE = 3;

+ 1 - 0
src/src/fifo_top/MAX2870FIFO/temp/FIFO/project.ini

@@ -0,0 +1 @@
+RESOURCE_CHECK=false

+ 22 - 0
src/src/fifo_top/temp/FIFO/FIFO.prj

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW1N-9C" package="PBGA256" speed="6" partNumber="GW1N-LV9PG256C6/I5"/>
+    <FileList>
+        <File path="C:/RF_FPGA/src/src/fifo_top/temp/FIFO/fifo_define.v" type="verilog"/>
+        <File path="C:/RF_FPGA/src/src/fifo_top/temp/FIFO/fifo_parameter.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/edc.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/RF_FPGA/src/src/fifo_top/temp/FIFO"/>
+        <Option type="output_file" value="FifoRxRF.vg"/>
+        <Option type="output_template" value="FifoRxRF_tmp.v"/>
+        <Option type="ram_balance" value="1"/>
+        <Option type="ram_rw_check" value="1"/>
+        <Option type="verilog_language" value="sysv-2017"/>
+    </OptionList>
+</Project>

+ 46 - 0
src/src/fifo_top/temp/FIFO/FifoRxRF.log

@@ -0,0 +1,46 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\RF_FPGA\src\src\fifo_top\temp\FIFO\fifo_define.v'
+Analyzing Verilog file 'C:\RF_FPGA\src\src\fifo_top\temp\FIFO\fifo_parameter.v'
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\edc.v":14373)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":1)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":56)
+Back to file 'C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":56)
+WARN  (EX2582) : Parameter 'WDEPTH' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":1)
+WARN  (EX2582) : Parameter 'WDSIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":2)
+WARN  (EX2582) : Parameter 'RDEPTH' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":3)
+WARN  (EX2582) : Parameter 'RDSIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":4)
+WARN  (EX2582) : Parameter 'ASIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":5)
+WARN  (EX2582) : Parameter 'RASIZE' declared inside compilation unit '$unit_fifo_define_v' shall be treated as localparam("fifo_parameter.v":6)
+Compiling module 'FifoRxRF'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo_top.v":3)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.01_x64\IDE\ipcore\FIFO\data\fifo.v":553)
+NOTE  (EX0101) : Current top module is "FifoRxRF"
+[5%] Running netlist conversion ...
+Running device independent optimization ...
+[10%] Optimizing Phase 0 completed
+[15%] Optimizing Phase 1 completed
+[25%] Optimizing Phase 2 completed
+Running inference ...
+[30%] Inferring Phase 0 completed
+[40%] Inferring Phase 1 completed
+[50%] Inferring Phase 2 completed
+[55%] Inferring Phase 3 completed
+Running technical mapping ...
+[60%] Tech-Mapping Phase 0 completed
+[65%] Tech-Mapping Phase 1 completed
+[75%] Tech-Mapping Phase 2 completed
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\RF_FPGA\src\src\fifo_top\temp\FIFO\FifoRxRF.vg" completed
+Generate template file "C:\RF_FPGA\src\src\fifo_top\temp\FIFO\FifoRxRF_tmp.v" completed
+[100%] Generate report file "C:\RF_FPGA\src\src\fifo_top\temp\FIFO\FifoRxRF_syn.rpt.html" completed
+GowinSynthesis finish

ファイルの差分が大きいため隠しています
+ 1016 - 0
src/src/fifo_top/temp/FIFO/FifoRxRF.vg


ファイルの差分が大きいため隠しています
+ 1789 - 0
src/src/fifo_top/temp/FIFO/FifoRxRF_syn.rpt.html


+ 44 - 0
src/src/fifo_top/temp/FIFO/FifoRxRF_syn_resource.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<title>Hierarchy Module Resource</title>
+<style type="text/css">
+body { font-family: Verdana, Arial, sans-serif; font-size: 14px; }
+div#main_wrapper{ width: 100%; }
+h1 {text-align: center; }
+h1 {margin-top: 36px; }
+table, th, td { border: 1px solid #aaa; }
+table { border-collapse:collapse; margin-top: 10px; margin-bottom: 20px; width: 100%; }
+th, td { align = "center"; padding: 5px 2px 5px 5px; }
+th { color: #fff; font-weight: bold; background-color: #0084ff; }
+table td.label { width: 20%; white-space: nowrap; min-width: 20px; background-color: #dee8f4; }
+</style>
+</head>
+<body>
+<div id="main_wrapper">
+<div id="content">
+<h1>Hierarchy Module Resource</h1>
+<table>
+<tr>
+<th class="label">MODULE NAME</th>
+<th class="label">REG NUMBER</th>
+<th class="label">ALU NUMBER</th>
+<th class="label">LUT NUMBER</th>
+<th class="label">DSP NUMBER</th>
+<th class="label">BSRAM NUMBER</th>
+<th class="label">SSRAM NUMBER</th>
+</tr>
+<tr>
+<td class="label">FifoRxRF (C:/Gowin/Gowin_V1.9.9.01_x64/IDE/ipcore/FIFO/data/fifo_top.v)</td>
+<td align = "center">98</td>
+<td align = "center">21</td>
+<td align = "center">110</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+<td align = "center">24</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/fifo_top/temp/FIFO/FifoRxRF_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="FifoRxRF" Register="98" Alu="21" Lut="110" Ssram="24" T_Register="98(98)" T_Alu="21(21)" T_Lut="110(110)" T_Ssram="24(24)"/>

+ 27 - 0
src/src/fifo_top/temp/FIFO/FifoRxRF_tmp.v

@@ -0,0 +1,27 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Thu Mar 21 09:39:05 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoRxRF your_instance_name(
+		.Data(Data_i), //input [23:0] Data
+		.Reset(Reset_i), //input Reset
+		.WrClk(WrClk_i), //input WrClk
+		.RdClk(RdClk_i), //input RdClk
+		.WrEn(WrEn_i), //input WrEn
+		.RdEn(RdEn_i), //input RdEn
+		.Wnum(Wnum_o), //output [6:0] Wnum
+		.Rnum(Rnum_o), //output [6:0] Rnum
+		.Q(Q_o), //output [23:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 8 - 0
src/src/fifo_top/temp/FIFO/fifo_define.v

@@ -0,0 +1,8 @@
+`define module_name FifoRxRF
+`define getname(oriName,tmodule_name) \~oriName.tmodule_name 
+`define DSR_BASED
+`define FWFT
+`define Count_W
+`define Count_R
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/fifo_top/temp/FIFO/fifo_parameter.v

@@ -0,0 +1,6 @@
+parameter WDEPTH = 64;
+parameter WDSIZE = 24;
+parameter RDEPTH = 64;
+parameter RDSIZE = 24;
+parameter ASIZE = 6;
+parameter RASIZE = 6;

+ 1 - 0
src/src/fifo_top/temp/FIFO/project.ini

@@ -0,0 +1 @@
+RESOURCE_CHECK=false

+ 24 - 0
src/src/gClkGen/gClkGen.ipc

@@ -0,0 +1,24 @@
+[General]
+ipc_version=4
+file=gClkGen
+module=gClkGen
+target_device=gw2a55c-005
+type=clock_rpll
+version=1.0
+
+[Config]
+CKLOUTD3=false
+CLKFB_SOURCE=0
+CLKIN_FREQ=50
+CLKOUTD=false
+CLKOUTP=false
+CLKOUT_BYPASS=false
+CLKOUT_DIVIDE_DYN=true
+CLKOUT_FREQ=100
+CLKOUT_TOLERANCE=0
+DYNAMIC=true
+LANG=0
+LOCK_EN=true
+MODE_GENERAL=true
+PLL_PWD=false
+RESET_PLL=false

+ 33 - 0
src/src/gClkGen/gClkGen.mod

@@ -0,0 +1,33 @@
+-series GW2A
+-device GW2A-55
+-device_version C
+-package PBGA484
+-part_number GW2A-LV55PG484C8/I7
+
+
+-mod_name gClkGen
+-file_name gClkGen
+-path C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/gClkGen/
+-type PLL
+-rPll true
+-file_type vlg
+-dev_type GW2A-55C
+-dyn_idiv_sel false
+-idiv_sel 1
+-dyn_fbdiv_sel false
+-fbdiv_sel 2
+-dyn_odiv_sel false
+-odiv_sel 8
+-dyn_da_en true
+-rst_sig false
+-rst_sig_p false
+-fclkin 50
+-clkfb_sel 0
+-en_lock true
+-clkout_bypass false
+-clkout_ft_dir 1
+-en_clkoutp false
+-clkoutp_bypass false
+-en_clkoutd false
+-clkoutd_bypass false
+-en_clkoutd3 false

+ 64 - 0
src/src/gClkGen/gClkGen.v

@@ -0,0 +1,64 @@
+//Copyright (C)2014-2023 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: IP file
+//GOWIN Version: V1.9.9 Beta
+//Part Number: GW2A-LV55PG484C8/I7
+//Device: GW2A-55
+//Device Version: C
+//Created Time: Mon Feb 12 15:09:09 2024
+
+module gClkGen (clkout, lock, clkin);
+
+output clkout;
+output lock;
+input clkin;
+
+wire clkoutp_o;
+wire clkoutd_o;
+wire clkoutd3_o;
+wire gw_gnd;
+
+assign gw_gnd = 1'b0;
+
+rPLL rpll_inst (
+    .CLKOUT(clkout),
+    .LOCK(lock),
+    .CLKOUTP(clkoutp_o),
+    .CLKOUTD(clkoutd_o),
+    .CLKOUTD3(clkoutd3_o),
+    .RESET(gw_gnd),
+    .RESET_P(gw_gnd),
+    .CLKIN(clkin),
+    .CLKFB(gw_gnd),
+    .FBDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .IDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .ODSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .PSDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .DUTYDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .FDLY({gw_gnd,gw_gnd,gw_gnd,gw_gnd})
+);
+
+defparam rpll_inst.FCLKIN = "50";
+defparam rpll_inst.DYN_IDIV_SEL = "false";
+defparam rpll_inst.IDIV_SEL = 0;
+defparam rpll_inst.DYN_FBDIV_SEL = "false";
+defparam rpll_inst.FBDIV_SEL = 1;
+defparam rpll_inst.DYN_ODIV_SEL = "false";
+defparam rpll_inst.ODIV_SEL = 8;
+defparam rpll_inst.PSDA_SEL = "0000";
+defparam rpll_inst.DYN_DA_EN = "true";
+defparam rpll_inst.DUTYDA_SEL = "1000";
+defparam rpll_inst.CLKOUT_FT_DIR = 1'b1;
+defparam rpll_inst.CLKOUTP_FT_DIR = 1'b1;
+defparam rpll_inst.CLKOUT_DLY_STEP = 0;
+defparam rpll_inst.CLKOUTP_DLY_STEP = 0;
+defparam rpll_inst.CLKFB_SEL = "internal";
+defparam rpll_inst.CLKOUT_BYPASS = "false";
+defparam rpll_inst.CLKOUTP_BYPASS = "false";
+defparam rpll_inst.CLKOUTD_BYPASS = "false";
+defparam rpll_inst.DYN_SDIV_SEL = 2;
+defparam rpll_inst.CLKOUTD_SRC = "CLKOUT";
+defparam rpll_inst.CLKOUTD3_SRC = "CLKOUT";
+defparam rpll_inst.DEVICE = "GW2A-55C";
+
+endmodule //gClkGen

+ 19 - 0
src/src/gClkGen/gClkGen_tmp.v

@@ -0,0 +1,19 @@
+//Copyright (C)2014-2023 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//GOWIN Version: V1.9.9 Beta
+//Part Number: GW2A-LV55PG484C8/I7
+//Device: GW2A-55
+//Device Version: C
+//Created Time: Mon Feb 12 15:09:09 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+    gClkGen your_instance_name(
+        .clkout(clkout_o), //output clkout
+        .lock(lock_o), //output lock
+        .clkin(clkin_i) //input clkin
+    );
+
+//--------Copy end-------------------

+ 28 - 0
src/src/gowin_rpll/ClkGen.ipc

@@ -0,0 +1,28 @@
+[General]
+ipc_version=4
+file=ClkGen
+module=ClkGen
+target_device=gw2a55c-005
+type=clock_rpll
+version=1.0
+
+[Config]
+CKLOUTD3=false
+CLKFB_SOURCE=0
+CLKIN_FREQ=50
+CLKOUTD=true
+CLKOUTP=false
+CLKOUT_BYPASS=false
+CLKOUT_DIVIDE_DYN=true
+CLKOUT_FREQ=360
+CLKOUT_TOLERANCE=0
+DYNAMIC=true
+LANG=0
+LOCK_EN=false
+MODE_GENERAL=true
+PLL_PWD=false
+RESET_PLL=false
+CLKOUTD_BYPASS=false
+CLKOUTD_FREQ=20
+CLKOUTD_SOURCE_CLKOUT=true
+CLKOUTD_TOLERANCE=0

+ 35 - 0
src/src/gowin_rpll/ClkGen.mod

@@ -0,0 +1,35 @@
+-series GW2A
+-device GW2A-55
+-device_version C
+-package PBGA484
+-part_number GW2A-LV55PG484C8/I7
+
+
+-mod_name ClkGen
+-file_name ClkGen
+-path C:/Users/AnatoliyChigirinskiy/Documents/RF_FPGA/src/gowin_rpll/
+-type PLL
+-rPll true
+-file_type vlg
+-dev_type GW2A-55C
+-dyn_idiv_sel false
+-idiv_sel 5
+-dyn_fbdiv_sel false
+-fbdiv_sel 36
+-dyn_odiv_sel false
+-odiv_sel 2
+-dyn_sdiv_sel 18
+-dyn_da_en true
+-rst_sig false
+-rst_sig_p false
+-fclkin 50
+-clkfb_sel 0
+-en_lock false
+-clkout_bypass false
+-clkout_ft_dir 1
+-en_clkoutp false
+-clkoutp_bypass false
+-en_clkoutd true
+-clkoutd_bypass false
+-clkoutd_src CLKOUT
+-en_clkoutd3 false

+ 19 - 0
src/src/gowin_rpll/ClkGen_tmp.v

@@ -0,0 +1,19 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW2A-LV55PG484C8/I7
+//Device: GW2A-55
+//Device Version: C
+//Created Time: Tue Feb 27 10:16:13 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+    ClkGen your_instance_name(
+        .clkout(clkout_o), //output clkout
+        .clkoutd(clkoutd_o), //output clkoutd
+        .clkin(clkin_i) //input clkin
+    );
+
+//--------Copy end-------------------

+ 28 - 0
src/src/gowin_rpll/gClkGen.ipc

@@ -0,0 +1,28 @@
+[General]
+ipc_version=4
+file=gClkGen
+module=gClkGen
+target_device=gw1n9c-046
+type=clock_rpll
+version=1.0
+
+[Config]
+CKLOUTD3=false
+CLKFB_SOURCE=0
+CLKIN_FREQ=24
+CLKOUTD=true
+CLKOUTD_BYPASS=false
+CLKOUTD_FREQ=5
+CLKOUTD_SOURCE_CLKOUT=true
+CLKOUTD_TOLERANCE=0
+CLKOUTP=false
+CLKOUT_BYPASS=false
+CLKOUT_DIVIDE_DYN=true
+CLKOUT_FREQ=100
+CLKOUT_TOLERANCE=0
+DYNAMIC=true
+LANG=0
+LOCK_EN=true
+MODE_GENERAL=true
+PLL_PWD=false
+RESET_PLL=false

+ 35 - 0
src/src/gowin_rpll/gClkGen.mod

@@ -0,0 +1,35 @@
+-series GW1N
+-device GW1N-9
+-device_version C
+-package PBGA256
+-part_number GW1N-LV9PG256C6/I5
+
+
+-mod_name gClkGen
+-file_name gClkGen
+-path C:/RF_FPGA/src/src/gowin_rpll/
+-type PLL
+-rPll true
+-file_type vlg
+-dev_type GW1N-9C
+-dyn_idiv_sel false
+-idiv_sel 6
+-dyn_fbdiv_sel false
+-fbdiv_sel 25
+-dyn_odiv_sel false
+-odiv_sel 4
+-dyn_sdiv_sel 20
+-dyn_da_en true
+-rst_sig false
+-rst_sig_p false
+-fclkin 24
+-clkfb_sel 0
+-en_lock true
+-clkout_bypass false
+-clkout_ft_dir 1
+-en_clkoutp false
+-clkoutp_bypass false
+-en_clkoutd true
+-clkoutd_bypass false
+-clkoutd_src CLKOUT
+-en_clkoutd3 false

+ 64 - 0
src/src/gowin_rpll/gClkGen.v

@@ -0,0 +1,64 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: IP file
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Wed Mar  6 11:33:52 2024
+
+module gClkGen (clkout, lock, clkoutd, clkin);
+
+output clkout;
+output lock;
+output clkoutd;
+input clkin;
+
+wire clkoutp_o;
+wire clkoutd3_o;
+wire gw_gnd;
+
+assign gw_gnd = 1'b0;
+
+rPLL rpll_inst (
+    .CLKOUT(clkout),
+    .LOCK(lock),
+    .CLKOUTP(clkoutp_o),
+    .CLKOUTD(clkoutd),
+    .CLKOUTD3(clkoutd3_o),
+    .RESET(gw_gnd),
+    .RESET_P(gw_gnd),
+    .CLKIN(clkin),
+    .CLKFB(gw_gnd),
+    .FBDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .IDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .ODSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .PSDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .DUTYDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .FDLY({gw_gnd,gw_gnd,gw_gnd,gw_gnd})
+);
+
+defparam rpll_inst.FCLKIN = "24";
+defparam rpll_inst.DYN_IDIV_SEL = "false";
+defparam rpll_inst.IDIV_SEL = 5;
+defparam rpll_inst.DYN_FBDIV_SEL = "false";
+defparam rpll_inst.FBDIV_SEL = 24;
+defparam rpll_inst.DYN_ODIV_SEL = "false";
+defparam rpll_inst.ODIV_SEL = 4;
+defparam rpll_inst.PSDA_SEL = "0000";
+defparam rpll_inst.DYN_DA_EN = "true";
+defparam rpll_inst.DUTYDA_SEL = "1000";
+defparam rpll_inst.CLKOUT_FT_DIR = 1'b1;
+defparam rpll_inst.CLKOUTP_FT_DIR = 1'b1;
+defparam rpll_inst.CLKOUT_DLY_STEP = 0;
+defparam rpll_inst.CLKOUTP_DLY_STEP = 0;
+defparam rpll_inst.CLKFB_SEL = "internal";
+defparam rpll_inst.CLKOUT_BYPASS = "false";
+defparam rpll_inst.CLKOUTP_BYPASS = "false";
+defparam rpll_inst.CLKOUTD_BYPASS = "false";
+defparam rpll_inst.DYN_SDIV_SEL = 20;
+defparam rpll_inst.CLKOUTD_SRC = "CLKOUT";
+defparam rpll_inst.CLKOUTD3_SRC = "CLKOUT";
+defparam rpll_inst.DEVICE = "GW1N-9C";
+
+endmodule //gClkGen

+ 20 - 0
src/src/gowin_rpll/gClkGen_tmp.v

@@ -0,0 +1,20 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Wed Mar  6 11:33:52 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+    gClkGen your_instance_name(
+        .clkout(clkout_o), //output clkout
+        .lock(lock_o), //output lock
+        .clkoutd(clkoutd_o), //output clkoutd
+        .clkin(clkin_i) //input clkin
+    );
+
+//--------Copy end-------------------

+ 28 - 0
src/src/gowin_rpll/gowin_rpll/ClkGen.ipc

@@ -0,0 +1,28 @@
+[General]
+ipc_version=4
+file=ClkGen
+module=ClkGen
+target_device=gw1n9c-046
+type=clock_rpll
+version=1.0
+
+[Config]
+CKLOUTD3=false
+CLKFB_SOURCE=0
+CLKIN_FREQ=24
+CLKOUTD=true
+CLKOUTD_BYPASS=false
+CLKOUTD_FREQ=20
+CLKOUTD_SOURCE_CLKOUT=true
+CLKOUTD_TOLERANCE=0
+CLKOUTP=false
+CLKOUT_BYPASS=false
+CLKOUT_DIVIDE_DYN=true
+CLKOUT_FREQ=360
+CLKOUT_TOLERANCE=0
+DYNAMIC=true
+LANG=0
+LOCK_EN=false
+MODE_GENERAL=true
+PLL_PWD=false
+RESET_PLL=false

+ 35 - 0
src/src/gowin_rpll/gowin_rpll/ClkGen.mod

@@ -0,0 +1,35 @@
+-series GW1N
+-device GW1N-9
+-device_version C
+-package PBGA256
+-part_number GW1N-LV9PG256C6/I5
+
+
+-mod_name ClkGen
+-file_name ClkGen
+-path C:/RF_FPGA/src/src/gowin_rpll/gowin_rpll/
+-type PLL
+-rPll true
+-file_type vlg
+-dev_type GW1N-9C
+-dyn_idiv_sel false
+-idiv_sel 1
+-dyn_fbdiv_sel false
+-fbdiv_sel 15
+-dyn_odiv_sel false
+-odiv_sel 2
+-dyn_sdiv_sel 18
+-dyn_da_en true
+-rst_sig false
+-rst_sig_p false
+-fclkin 24
+-clkfb_sel 0
+-en_lock false
+-clkout_bypass false
+-clkout_ft_dir 1
+-en_clkoutp false
+-clkoutp_bypass false
+-en_clkoutd true
+-clkoutd_bypass false
+-clkoutd_src CLKOUT
+-en_clkoutd3 false

+ 64 - 0
src/src/gowin_rpll/gowin_rpll/ClkGen.v

@@ -0,0 +1,64 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: IP file
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Tue Mar  5 17:30:46 2024
+
+module ClkGen (clkout, clkoutd, clkin);
+
+output clkout;
+output clkoutd;
+input clkin;
+
+wire lock_o;
+wire clkoutp_o;
+wire clkoutd3_o;
+wire gw_gnd;
+
+assign gw_gnd = 1'b0;
+
+rPLL rpll_inst (
+    .CLKOUT(clkout),
+    .LOCK(lock_o),
+    .CLKOUTP(clkoutp_o),
+    .CLKOUTD(clkoutd),
+    .CLKOUTD3(clkoutd3_o),
+    .RESET(gw_gnd),
+    .RESET_P(gw_gnd),
+    .CLKIN(clkin),
+    .CLKFB(gw_gnd),
+    .FBDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .IDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .ODSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .PSDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .DUTYDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
+    .FDLY({gw_gnd,gw_gnd,gw_gnd,gw_gnd})
+);
+
+defparam rpll_inst.FCLKIN = "24";
+defparam rpll_inst.DYN_IDIV_SEL = "false";
+defparam rpll_inst.IDIV_SEL = 0;
+defparam rpll_inst.DYN_FBDIV_SEL = "false";
+defparam rpll_inst.FBDIV_SEL = 14;
+defparam rpll_inst.DYN_ODIV_SEL = "false";
+defparam rpll_inst.ODIV_SEL = 2;
+defparam rpll_inst.PSDA_SEL = "0000";
+defparam rpll_inst.DYN_DA_EN = "true";
+defparam rpll_inst.DUTYDA_SEL = "1000";
+defparam rpll_inst.CLKOUT_FT_DIR = 1'b1;
+defparam rpll_inst.CLKOUTP_FT_DIR = 1'b1;
+defparam rpll_inst.CLKOUT_DLY_STEP = 0;
+defparam rpll_inst.CLKOUTP_DLY_STEP = 0;
+defparam rpll_inst.CLKFB_SEL = "internal";
+defparam rpll_inst.CLKOUT_BYPASS = "false";
+defparam rpll_inst.CLKOUTP_BYPASS = "false";
+defparam rpll_inst.CLKOUTD_BYPASS = "false";
+defparam rpll_inst.DYN_SDIV_SEL = 18;
+defparam rpll_inst.CLKOUTD_SRC = "CLKOUT";
+defparam rpll_inst.CLKOUTD3_SRC = "CLKOUT";
+defparam rpll_inst.DEVICE = "GW1N-9C";
+
+endmodule //ClkGen

+ 19 - 0
src/src/gowin_rpll/gowin_rpll/ClkGen_tmp.v

@@ -0,0 +1,19 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.01 (64-bit)
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-9
+//Device Version: C
+//Created Time: Tue Mar  5 17:30:46 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+    ClkGen your_instance_name(
+        .clkout(clkout_o), //output clkout
+        .clkoutd(clkoutd_o), //output clkoutd
+        .clkin(clkin_i) //input clkin
+    );
+
+//--------Copy end-------------------

+ 104 - 0
src/src/initRst/InitRst.v

@@ -0,0 +1,104 @@
+module InitRst (
+    clk_i,
+    signal_o
+);
+
+//================================================================================
+//
+//  FUNCTIONS
+//
+//================================================================================
+
+    function integer bit_num;
+        input integer value;
+        begin
+            bit_num = 0;
+            while (value > 0) begin
+                value   = value >> 1;
+                bit_num = bit_num + 1;
+            end
+        end
+    endfunction
+
+//================================================================================
+//
+//  PARAMETER/LOCALPARAM
+//
+//================================================================================
+
+    parameter   DELAY_VALUE     = 25;
+    localparam  DELAY_CNT_W     = bit_num(DELAY_VALUE);
+
+//================================================================================
+//
+//  PORTS
+//
+//================================================================================
+
+    input           clk_i;
+    output  reg     signal_o;
+
+//================================================================================
+//
+//  STATE MACHINE STATES
+//
+//================================================================================
+
+    localparam      SM_RST_S    = 1'b0;
+    localparam      SM_DONE_S   = 1'b1;
+
+//================================================================================
+//
+//  REG/WIRE
+//
+//================================================================================
+
+    reg                         curr_state  = SM_RST_S;
+    reg     [DELAY_CNT_W-1:0]   delay_cnt   = {DELAY_CNT_W{1'b0}};
+    reg                         delay_flag  = 1'b0;
+
+    reg                         next_state;
+    reg     [DELAY_CNT_W-1:0]   delay_cnt_next	=	{DELAY_CNT_W{1'b0}};
+    reg                         signal_next;
+
+//================================================================================
+//
+//  CODING
+//
+//================================================================================
+
+initial begin
+    curr_state  = SM_RST_S;
+    delay_cnt   = {DELAY_CNT_W{1'b0}};
+    signal_o    = 1'b1;
+    delay_flag  = 1'b0;
+end
+
+always @(posedge clk_i) begin
+    curr_state  <= next_state;
+    delay_cnt   <= delay_cnt_next;
+    signal_o    <= signal_next;
+    delay_flag  <= delay_cnt > (DELAY_VALUE - 1);
+end
+
+always @(*) begin
+    next_state      = SM_RST_S;
+    delay_cnt_next  = delay_cnt;
+    signal_next     = 1'b1;
+    case(curr_state)
+        SM_RST_S    : begin
+            if (delay_flag) begin
+                next_state      = SM_DONE_S;
+            end else begin
+                next_state      = SM_RST_S;
+                delay_cnt_next  = delay_cnt + {{(DELAY_CNT_W-1){1'b0}}, 1'b1};
+            end
+        end
+        SM_DONE_S   : begin
+            signal_next = 1'b0;
+            next_state  = SM_DONE_S;
+        end
+    endcase
+end
+
+endmodule