Przeglądaj źródła

Merge branch 'Anatoliy/feature_FifoCtrl' of zaytsev.mikhail/SB_TMSG44V1_FPGA into dev

zaytsev.mikhail 1 rok temu
rodzic
commit
1979a3a9c5
89 zmienionych plików z 15759 dodań i 733 usunięć
  1. BIN
      src/src/FifoCtrl/FifoCtrl.docx
  2. 164 0
      src/src/FifoCtrl/FifoCtrl.v
  3. 39 0
      src/src/FifoCtrl/FifoCtrl_tb.do
  4. 282 0
      src/src/FifoCtrl/FifoCtrl_tb.sv
  5. 11 19
      src/src/SPIm/SpiM.v
  6. 1205 224
      src/src/Top/ExtQspiMEmul.v
  7. 530 199
      src/src/Top/ExtSpiMEmul.v
  8. 229 16
      src/src/Top/TopSbTmsg.v
  9. 351 0
      src/src/Top/TopSbTmsgTb.sv
  10. 0 275
      src/src/Top/TopSbTmsgTb.v
  11. 167 0
      src/src/Top/TopSbTmsg_Fifos.do
  12. 95 0
      src/src/WrapFifoChain/AttenuatorWrapper.v
  13. 95 0
      src/src/WrapFifoChain/DDSWrapper.v
  14. 95 0
      src/src/WrapFifoChain/DacWrapper.v
  15. 35 0
      src/src/WrapFifoChain/Fifo16x3/Fifo16x3.ipc
  16. 187 0
      src/src/WrapFifoChain/Fifo16x3/Fifo16x3.v
  17. 353 0
      src/src/WrapFifoChain/Fifo16x3/Fifo16x3.vo
  18. 24 0
      src/src/WrapFifoChain/Fifo16x3/Fifo16x3_tmp.v
  19. 20 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/FIFOHS.prj
  20. 45 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3.log
  21. 187 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3.vg
  22. 1300 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3_syn.rpt.html
  23. 46 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3_syn_resource.html
  24. 2 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3_syn_rsc.xml
  25. 24 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3_tmp.v
  26. 5 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/fifo_define.v
  27. 6 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/fifo_parameter.v
  28. 1 0
      src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/project.ini
  29. 35 0
      src/src/WrapFifoChain/FifoDDS/FifoDDS.ipc
  30. 199 0
      src/src/WrapFifoChain/FifoDDS/FifoDDS.v
  31. 373 0
      src/src/WrapFifoChain/FifoDDS/FifoDDS.vo
  32. 24 0
      src/src/WrapFifoChain/FifoDDS/FifoDDS_tmp.v
  33. 20 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FIFOHS.prj
  34. 45 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS.log
  35. 199 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS.vg
  36. 1300 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS_syn.rpt.html
  37. 46 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS_syn_resource.html
  38. 2 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS_syn_rsc.xml
  39. 24 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS_tmp.v
  40. 5 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/fifo_define.v
  41. 6 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/fifo_parameter.v
  42. 1 0
      src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/project.ini
  43. 35 0
      src/src/WrapFifoChain/FifoLMX/FifoLMX.ipc
  44. 304 0
      src/src/WrapFifoChain/FifoLMX/FifoLMX.v
  45. 681 0
      src/src/WrapFifoChain/FifoLMX/FifoLMX.vo
  46. 24 0
      src/src/WrapFifoChain/FifoLMX/FifoLMX_tmp.v
  47. 20 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FIFOHS.prj
  48. 45 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX.log
  49. 304 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX.vg
  50. 1420 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX_syn.rpt.html
  51. 46 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX_syn_resource.html
  52. 2 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX_syn_rsc.xml
  53. 24 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX_tmp.v
  54. 5 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/fifo_define.v
  55. 6 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/fifo_parameter.v
  56. 1 0
      src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/project.ini
  57. 35 0
      src/src/WrapFifoChain/FifoMax2870/FifoMax2870.ipc
  58. 222 0
      src/src/WrapFifoChain/FifoMax2870/FifoMax2870.v
  59. 457 0
      src/src/WrapFifoChain/FifoMax2870/FifoMax2870.vo
  60. 24 0
      src/src/WrapFifoChain/FifoMax2870/FifoMax2870_tmp.v
  61. 20 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FIFOHS.prj
  62. 45 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870.log
  63. 222 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870.vg
  64. 1340 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870_syn.rpt.html
  65. 46 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870_syn_resource.html
  66. 2 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870_syn_rsc.xml
  67. 24 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870_tmp.v
  68. 5 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/fifo_define.v
  69. 6 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/fifo_parameter.v
  70. 1 0
      src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/project.ini
  71. 35 0
      src/src/WrapFifoChain/FifoShiftReg/FifoShiftReg.ipc
  72. 188 0
      src/src/WrapFifoChain/FifoShiftReg/FifoShiftReg.v
  73. 353 0
      src/src/WrapFifoChain/FifoShiftReg/FifoShiftReg.vo
  74. 24 0
      src/src/WrapFifoChain/FifoShiftReg/FifoShiftReg_tmp.v
  75. 20 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FIFOHS.prj
  76. 45 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg.log
  77. 188 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg.vg
  78. 1300 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg_syn.rpt.html
  79. 46 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg_syn_resource.html
  80. 2 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg_syn_rsc.xml
  81. 24 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg_tmp.v
  82. 5 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/fifo_define.v
  83. 6 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/fifo_parameter.v
  84. 1 0
      src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/project.ini
  85. 95 0
      src/src/WrapFifoChain/LmxWrapper.v
  86. 95 0
      src/src/WrapFifoChain/Max2870Wrapper.v
  87. 95 0
      src/src/WrapFifoChain/PotWrapper.v
  88. 94 0
      src/src/WrapFifoChain/ShifRegWrapper.v
  89. BIN
      src/src/WrapFifoChain/WrapFifoChain.docx

BIN
src/src/FifoCtrl/FifoCtrl.docx


+ 164 - 0
src/src/FifoCtrl/FifoCtrl.v

@@ -0,0 +1,164 @@
+////////////////////////////////////////////////////////////////////////////////////////////
+// Company:         TAIR
+// Engineer:        Chigrinskiy A.  
+// 
+// Create Date:     18/04/2024 
+// Design Name: 
+// Module Name:     FifoCtrl
+// Project Name:    SB_TMSG44V1_FPGA
+// Target Devices:  Board: SB_TMSG44v1. FPGA: GW1N-LV9PG256C6/I5
+// Tool versions:
+// Description:     This module is a controller for the FIFOs. It controls the read and write pointers of the FIFOs.
+//
+// Dependencies:  
+// Revision: 
+// Revision 1.0 - File Created
+// Additional Comments: 
+//
+////////////////////////////////////////////////////////////////////////////////////////////
+module FifoCtrl #(
+    parameter IN_WIDTH = 24,
+    parameter WR_NUM = 1,
+    parameter OUT_WIDTH = 24
+)(
+    input WrClk_i,
+    input RdClk_i,
+    input Rst_i,
+    input [IN_WIDTH-1:0] Data_i,
+    input Val_i,
+    input BusySpiM_i,
+    input FifoFull_i,
+    input FifoEmpty_i,
+
+    output [OUT_WIDTH-1:0] Data_o,
+    output reg ReadEn_o,
+    output reg  WriteEn_o,
+    output reg ValRdData_o
+
+);
+//================================================================================
+//	LOCAL PARAMETERS
+//================================================================================
+localparam DATA_WIDTH = WR_NUM*IN_WIDTH;
+
+//================================================================================
+//	REG/WIRE
+//================================================================================
+reg [DATA_WIDTH-1:0] dataReg;
+reg [1:0]  wrCnt;
+
+//================================================================================
+//  ASSIGNMENTS
+//================================================================================
+assign Data_o = dataReg[OUT_WIDTH-1:0];
+
+//================================================================================
+//	CODING
+//================================================================================
+always @(posedge WrClk_i) begin 
+    if (Rst_i) begin 
+        wrCnt <= 0;
+    end
+    else begin 
+        if (Val_i) begin 
+            wrCnt <= wrCnt + 1;
+        end
+        else if (wrCnt == WR_NUM) begin 
+            wrCnt <= 0;
+        end
+    end
+end
+
+always @(posedge WrClk_i) begin 
+    if (Rst_i) begin 
+        dataReg <= 0;
+    end
+    else begin
+        if (WR_NUM>1) begin
+            case (WR_NUM)  
+            3: begin
+                case (wrCnt)
+                0 : begin 
+                    if (Val_i) begin 
+                        dataReg[(3*IN_WIDTH)-1:(2*IN_WIDTH)] <= Data_i;
+                    end
+                end
+                1 : begin 
+                    if (Val_i) begin 
+                        dataReg[(2*IN_WIDTH)-1:IN_WIDTH] <= Data_i;
+                    end
+                end
+                2 : begin 
+                    if (Val_i) begin 
+                        dataReg[IN_WIDTH-1:0] <= Data_i;
+                    end
+                end
+                endcase
+            end
+            2 : begin 
+                case (wrCnt)
+                0: begin 
+                    if (Val_i) begin 
+                        dataReg[(2*IN_WIDTH)-1:IN_WIDTH] <= Data_i;
+                    end
+                end
+                1: begin 
+                    if (Val_i) begin 
+                        dataReg[IN_WIDTH-1:0] <= Data_i;
+                    end
+                end
+                endcase
+            end
+            endcase
+        end
+        else begin
+            if (Val_i) begin 
+                dataReg[IN_WIDTH-1:0] <= Data_i;
+            end
+        end
+    end
+end
+
+always @(posedge WrClk_i) begin
+    if (Rst_i) begin 
+        WriteEn_o <= 1'b0;
+    end
+    else begin  
+        if (Val_i && wrCnt == WR_NUM-1 && !FifoFull_i) begin
+            WriteEn_o <= 1'b1;
+        end
+        else begin 
+            WriteEn_o <= 1'b0;
+        end
+    end
+end
+
+always @(posedge RdClk_i) begin
+    if (Rst_i) begin 
+        ReadEn_o <= 1'b0;
+    end
+    else begin  
+        if (!FifoEmpty_i && !BusySpiM_i) begin 
+            ReadEn_o <= 1'b1;
+        end
+        else begin 
+            ReadEn_o <= 1'b0;
+        end
+    end
+end
+
+always @(posedge RdClk_i) begin 
+    if (Rst_i) begin 
+        ValRdData_o <= 1'b0;
+    end
+    else begin
+        if (!FifoEmpty_i && !BusySpiM_i) begin 
+            ValRdData_o <= 1'b1;
+        end
+        else begin 
+            ValRdData_o <= 1'b0;
+        end
+    end
+end
+
+endmodule

+ 39 - 0
src/src/FifoCtrl/FifoCtrl_tb.do

@@ -0,0 +1,39 @@
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+add wave -noupdate -divider FifoCtrlDDS
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/IN_WIDTH
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/WR_NUM
+add wave -noupdate -radix unsigned /FifoCtrl_tb/FifoCtrlDDS_inst/OUT_WIDTH
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/DATA_WIDTH
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/WrClk_i
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/RdClk_i
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/Rst_i
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/Data_i
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/Val_i
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/BusySpiM_i
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/FifoFull_i
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/FifoEmpty_i
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/Data_o
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/ReadEn_o
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/ValRdData_o
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/WriteEn_o
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/dataReg
+add wave -noupdate /FifoCtrl_tb/FifoCtrlDDS_inst/wrCnt
+TreeUpdate [SetDefaultTree]
+WaveRestoreCursors {{Cursor 1} {11121814 ps} 0}
+quietly wave cursor active 1
+configure wave -namecolwidth 150
+configure wave -valuecolwidth 100
+configure wave -justifyvalue left
+configure wave -signalnamewidth 1
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+configure wave -timelineunits ps
+update
+WaveRestoreZoom {0 ps} {15750 ns}

+ 282 - 0
src/src/FifoCtrl/FifoCtrl_tb.sv

@@ -0,0 +1,282 @@
+`timescale 1ns/1ps
+module FifoCtrl_tb;
+logic WrClk_i;
+logic RdClkDDS_i;
+logic RdClkLMX_i;
+logic RdClkMax_i;
+logic Rst_i;
+logic [23:0] dataForDDS;
+logic [23:0] dataForLMX;
+logic [23:0] dataForMAX;
+logic BusySpiLMX;
+logic BusySpiDDS;
+logic BusySpiMax;
+logic valFromSPI64;
+logic valFromSPI32;
+logic valFromSPI24;
+
+logic wrEnDDS;
+logic wrEnLMX;
+
+logic rdEnDDS;
+logic rdEnLMX;
+
+logic fullFlagLMX;
+logic emptyFlagLMX;
+
+logic fullFlagDDS;
+logic emptyFlagDDS;
+
+logic [23:0] dataToFifo24;
+logic [31:0] dataToFifo32;
+logic [63:0] dataToFifo64;
+logic [23:0] dataFromFifo24;
+logic [31:0] dataFromFifo32;
+logic [63:0] dataFromFifo64;
+
+logic [6:0] OUT_WIDTH;
+logic [1:0] WR_NUM;
+
+//***********************************************
+//	           LOCALPARAMS
+//***********************************************
+localparam FIFTY_MHZ = 20;
+localparam SIXTY_MHZ = 16;
+localparam TWENTY_MHZ = 50;
+
+//***********************************************
+//	           CLOCK GENERATION
+//***********************************************
+always begin
+    #50 WrClk_i = ~WrClk_i;
+    #(FIFTY_MHZ/2) RdClkDDS_i = ~RdClkDDS_i;
+    #(SIXTY_MHZ/2) RdClkLMX_i = ~RdClkLMX_i;
+    #(TWENTY_MHZ/2) RdClkMax_i = ~RdClkMax_i;
+end
+//***********************************************
+//	           DUT INSTANTIATION
+//***********************************************
+FifoCtrl#(
+    .IN_WIDTH(24),
+    .WR_NUM(3),
+    .OUT_WIDTH(64)
+) FifoCtrlDDS_inst (
+    .WrClk_i(WrClk_i),
+    .RdClk_i(RdClkDDS_i),
+    .Rst_i(Rst_i),
+    .Data_i(dataForDDS),
+    .Val_i(valFromSPI64),
+    .FifoFull_i(fullFlagDDS),
+    .FifoEmpty_i(emptyFlagDDS),
+    .BusySpiM_i(BusySpiDDS),
+    .Data_o(dataToFifo64),
+    .ReadEn_o(rdEnDDS),
+    .ValRdData_o(valRdDDS),
+    .WriteEn_o(wrEnDDS)
+);
+
+FifoCtrl #(
+    .IN_WIDTH(24),
+    .WR_NUM(1),
+    .OUT_WIDTH(24)
+) FifoCtrlLMX_inst (
+    .WrClk_i(WrClk_i),
+    .RdClk_i(RdClkLMX_i),
+    .Rst_i(Rst_i),
+    .Data_i(dataForLMX),
+    .Val_i(valFromSPI24),
+    .FifoFull_i(fullFlagLMX),
+    .FifoEmpty_i(emptyFlagLMX),
+    .BusySpiM_i(BusySpiLMX),
+    .Data_o(dataToFifo24),
+    .ReadEn_o(rdEnLMX),
+    .ValRdData_o(valRdLMX),
+    .WriteEn_o(wrEnLMX)
+);
+
+FifoCtrl #(
+    .IN_WIDTH(24),
+    .WR_NUM(2),
+    .OUT_WIDTH(32)
+) FifoCtrlMax_inst (
+    .WrClk_i(WrClk_i),
+    .RdClk_i(RdClkMax_i),
+    .Rst_i(Rst_i),
+    .Data_i(dataForMAX),
+    .Val_i(valFromSPI32),
+    .FifoFull_i(fullFlagMax),
+    .FifoEmpty_i(emptyFlagMax),
+    .BusySpiM_i(BusySpiMax),
+    .Data_o(dataToFifo32),
+    .ReadEn_o(rdEnMax),
+    .ValRdData_o(valRdMax),
+    .WriteEn_o(wrEnMax)
+);
+// Depth 16
+FifoLMX FifoLMX_inst (
+    .Data(dataToFifo24),
+    .WrClk(WrClk_i),
+    .Reset(Rst_i),
+    .RdClk(RdClkLMX_i),
+    .WrEn(wrEnLMX),
+    .RdEn(rdEnLMX),
+    .Q(dataFromFifo24),
+    .Empty(emptyFlagLMX),
+    .Full(fullFlagLMX)
+);
+// Depth 2
+FifoDDS FifoDDS_inst (
+    .Data(dataToFifo64),
+    .WrClk(WrClk_i),
+    .Reset(Rst_i),
+    .RdClk(RdClkDDS_i),
+    .WrEn(wrEnDDS),
+    .RdEn(rdEnDDS),
+    .Q(dataFromFifo64),
+    .Empty(emptyFlagDDS),
+    .Full(fullFlagDDS)
+);
+//Depth 4
+FifoMax2870 FifoMax_inst (
+    .Data(dataToFifo32),
+    .WrClk(WrClk_i),
+    .Reset(Rst_i),
+    .RdClk(RdClkMax_i),
+    .WrEn(wrEnMax),
+    .RdEn(rdEnMax),
+    .Q(dataFromFifo32),
+    .Empty(emptyFlagMax),
+    .Full(fullFlagMax)
+);
+
+SpiM #(
+    .DATA_WIDTH(24)
+)SpiMLMX_inst(
+    .Clk_i(RdClkLMX_i),
+    .Rst_i(Rst_i),
+    .Val_i(valRdLMX),
+    .SpiData_i(dataFromFifo24),
+    .Busy_o(BusySpiLMX)
+);
+
+SpiM #(
+    .DATA_WIDTH(64)
+)SpiMDDS_inst(
+    .Clk_i(RdClkDDS_i),
+    .Rst_i(Rst_i),
+    .Val_i(valRdDDS),
+    .SpiData_i(dataFromFifo64),
+    .Busy_o(BusySpiDDS)
+);
+
+SpiM #(
+    .DATA_WIDTH(32)
+)SpiMMax_inst(
+    .Clk_i(RdClkMax_i),
+    .Rst_i(Rst_i),
+    .Val_i(valRdMax),
+    .SpiData_i(dataFromFifo32),
+    .Busy_o(BusySpiMax)
+);
+//***********************************************
+//	           TASKS
+//***********************************************
+task drive_fifo64();
+    valFromSPI64 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI64 = 1'b1;
+    dataForDDS = {8'h0, 16'hFFFF};
+    #10;
+    @(posedge WrClk_i)
+    valFromSPI64 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI64 = 1'b1;
+    dataForDDS = 24'habcdef;
+    #10;
+    @ (posedge WrClk_i)
+    valFromSPI64 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI64 = 1'b1;
+    dataForDDS = 24'h123456;
+    #10;
+    @(posedge WrClk_i)
+    valFromSPI64 = 1'b0;
+endtask
+
+task drive_fifo32();
+    valFromSPI32 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI32 = 1'b1;
+    dataForMAX = {16'h0, 8'h12};
+    #10;
+    @(posedge WrClk_i)
+    valFromSPI32 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI32 = 1'b1;
+    dataForMAX = 24'habcdef;
+    #10;
+    @ (posedge WrClk_i)
+    valFromSPI32 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI32 = 1'b1;
+    dataForMAX = {16'h0, 8'h12};
+    #10;
+    @(posedge WrClk_i)
+    valFromSPI32 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI32 = 1'b1;
+    dataForMAX = $urandom();
+    #10;
+    @(posedge WrClk_i)
+    valFromSPI32 = 1'b0;
+endtask
+
+task drive_fifo24();
+    Rst_i = 1'b1;
+    valFromSPI24 = 1'b0;
+    dataForLMX = 24'h0;
+    #200;
+    Rst_i = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI24 = 1'b1;
+    dataForLMX = 24'h123456;
+    #10;
+    @(posedge WrClk_i)
+    valFromSPI24 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI24 = 1'b1;
+    dataForLMX = 24'habcdef;
+    #10;
+    @ (posedge WrClk_i)
+    valFromSPI24 = 1'b0;
+    #300;
+    @ (posedge WrClk_i)
+    valFromSPI24 = 1'b1;
+    dataForLMX = 24'h123456;
+    #10;
+    @(posedge WrClk_i)
+    valFromSPI24 = 1'b0;
+endtask
+//***********************************************
+//	           INITIALIZATION
+//***********************************************
+initial begin 
+    WrClk_i = 1'b1;
+    RdClkDDS_i = 1'b1;
+    RdClkLMX_i = 1'b1;
+    RdClkMax_i = 1'b1;
+    drive_fifo24();
+    drive_fifo32();
+    drive_fifo64();
+end
+
+endmodule

+ 11 - 19
src/src/SPIm/SpiM.v

@@ -70,19 +70,11 @@ always @(negedge Clk_i) begin
         ssCnt <= 7'h0;
     end
     else begin
-        if (ssCnt == 0) begin 
-            if (Val_i) begin 
-                ssCnt <= ssCnt + 1;
-            end
-        end
-        else begin 
-            if (ssCnt < DATA_WIDTH) begin 
-                ssCnt <= ssCnt + 1;
-            end
-            else begin 
-                ssCnt <= 7'h0;
-            end
-        end
+        if (!ssReg) begin
+			ssCnt <= ssCnt+1;
+		end else begin
+			ssCnt <= 0;
+		end
     end
 end
 
@@ -107,12 +99,12 @@ always @(negedge Clk_i) begin
         ssReg <= 1'b1;
     end
     else begin 
-        if (ssCnt < DATA_WIDTH) begin 
-            ssReg <= 1'b0;
-        end
-        else begin 
-            ssReg <= 1'b1;
-        end
+        if (Val_i) begin
+			ssReg <= 0;
+		end
+		if (ssCnt == DATA_WIDTH-1) begin
+			ssReg <= 1;
+		end
     end
 end
 

Plik diff jest za duży
+ 1205 - 224
src/src/Top/ExtQspiMEmul.v


+ 530 - 199
src/src/Top/ExtSpiMEmul.v

@@ -1,205 +1,536 @@
-`timescale 1ns / 1ps
-
-module ExtSpiMEmul 
-(
-	input Rst_i,
-	input Clk_i,
-	
-	input Start_i,
-	output TxDone_o,
-	
-	output Sck_o,
-	output reg Ss_o,
-	output reg Mosi_o
-	
+module ExtSpiMEmul (
+    input Clk_i,
+    input Rst_i,
+    input Start_i,
+    input EmptyFlag_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
 );
 
-//================================================================================
-//  PARAMETERS
-	localparam [1:0] IDLE = 0;
-	localparam [1:0] CMD = 1;
-	localparam [1:0] TX = 2;
-	localparam [1:0] PAUSE = 3;
 
-	parameter MODE = 1'h0;
-	parameter [4:0] DEVID = 5'h1;
-	parameter [16:0] WORDSNUM = 17'd24;
-	parameter EOPBIT = 1'b1;
-	
 //================================================================================
-//  REG/WIRE
-	reg [1:0] currState;
-	reg [1:0] nextState;
-	
-	reg	[6:0]	txCnt;
-	reg	[6:0]	cmdCnt;
-	reg	[3:0]	pauseCnt;
-
-	wire	txStop	=	(cmdCnt	>=	WORDSNUM+1);
-	
-	reg [23:0] headerCmd = {MODE,DEVID,WORDSNUM,EOPBIT};
-	reg [23:0] spiData;
-	
-	reg	[23:0]	dspSpiData;
-	
-	reg sckFlag;
+//	REG/WIRE
 //================================================================================
-//  ASSIGNMENTS
-
-assign	Sck_o		=	(sckFlag)? ~Clk_i:1'b0;
-assign	TxDone_o	=	(txStop & (currState== CMD));
-
-//================================================================================
-//  CODING
-
-always	@(posedge	Clk_i)	begin
-	if	(!Rst_i)	begin
-		if	(currState	==	CMD)	begin
-			if	(!txStop)	begin
-				cmdCnt	<=	cmdCnt+1;
-			end else begin
-				cmdCnt <= 0;
-			end
-		end
-	end	else	begin
-		cmdCnt	<=	0;
-	end
-end
-
-always	@(posedge	Clk_i)	begin
-	if	(!Rst_i)	begin
-		if	(currState	==	TX)	begin
-			txCnt	<=	txCnt+1;
-		end	else	begin
-			txCnt	<=	0;
-		end
-	end	else	begin
-		txCnt	<=	0;
-	end
-end
-
-always	@(posedge	Clk_i)	begin
-	if	(!Rst_i)	begin
-		if	(currState	==	PAUSE)	begin
-			pauseCnt	<=	pauseCnt+1;
-		end	else	begin
-			pauseCnt	<=	0;
-		end
-	end	else	begin
-		pauseCnt	<=	0;
-	end
-end
-	
-always	@(posedge	Clk_i)	begin
-	if	(!Rst_i)	begin
-		if	(currState	==	CMD)	begin
-			spiData	<=	spiData+cmdCnt;
-		end
-	end	else	begin
-		spiData	<=	24'hab;
-	end
-end
-
-always	@(posedge	Clk_i)	begin
-	if	(currState	==	CMD)	begin
-		if	(cmdCnt	==	0)	begin
-			dspSpiData		<=	headerCmd;
-		end	else	begin
-			dspSpiData		<=	spiData;
-		end	
-	end	else	if	(currState	==	TX)	begin
-		dspSpiData	<=	dspSpiData<<1;
-	end if	(currState	==	IDLE)	begin
-		dspSpiData	<=	0;
-	end
-end
-
-always	@(posedge Clk_i)	begin
-	if	(currState	==	TX)	begin
-		if	(txCnt	>=	7'd0)	begin
-			Mosi_o	<=	dspSpiData[23];
-		end	else	begin
-			Mosi_o	<=	1'b0;
-		end
-	end	else	begin
-		Mosi_o	<=	1'b0;
-	end
-end
-
-always	@(posedge	Clk_i)	begin
-	if	(currState	==	TX)	begin
-		Ss_o	<=	1'b0;
-		sckFlag	<=	1'b1;
-	end	else	begin
-		Ss_o	<=	1'b1;
-		sckFlag	<=	1'b0;
-	end
-end
-
-always	@(posedge	Clk_i)	begin
-	if	(Rst_i)	begin
-		currState	<=	IDLE;
-	end	else	begin
-		currState	<=	nextState;
-	end
-end
-
-always @(*) begin
-	nextState	=	IDLE;
-	case(currState)
-	IDLE	:	begin
-					if (Start_i)	begin
-						nextState = CMD;
-					end	else begin
-						nextState = IDLE;
-					end
-				end
-				
-	CMD	:		begin
-					if (!txStop)	begin
-						nextState = TX;
-					end	else begin
-						nextState = IDLE;
-					end
-				end
-
-	TX		:	begin
-					if (txCnt==6'd23) begin
-						nextState  = PAUSE;
-					end	else begin
-						nextState  = TX;
-					end
-				end
-        
-	PAUSE	:	begin
-					if (pauseCnt==4'd2) begin
-						nextState  = CMD;
-					end	else begin
-						nextState  = PAUSE;
-					end
-				end
-	endcase
-end
-
-
-
-endmodule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 
+    reg startFlag;
+    reg startR;
+    reg [31:0] trCnt;
+    reg valReg;
+    reg valToRxFifo1;
+    reg lineBusy;
+    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 @(*) begin 
+        if (SelSt_i) begin 
+            if (!Ss_o) begin 
+                lineBusy = 1'b1;
+            end
+            else begin 
+                lineBusy = 1'b0;
+            end
+        end
+        else begin 
+            if (Ss_o) 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 @(*) 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 @(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 + Lag_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 + Lag_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 && !EmptyFlag_i) begin 
+                startFlag = 1'b1;
+            end
+            else begin 
+                startFlag = 1'b0;
+            end
+        end
+    end
+    
+    always @(*) 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

+ 229 - 16
src/src/Top/TopSbTmsg.v

@@ -39,18 +39,42 @@ module TopSbTmsg
 	input Mosi2_i,
 	input Mosi3_i,
 	
-	input Miso1_i,
-	input Miso2_i,
-	input MisoMax2870_i,
+	input MisoLdLmx_i,
+	input MisoDds_i,
+	input MisoLdMax2870_i,
 	
-	output I2CSck_o,
-	inout I2CSda_io,
+	output I2cScl_o,
+	inout I2cSda_io,
 	
 	output [DEVNUM-1:0] Ss_o,
 	output [DEVNUM-1:0] Sck_o,
 	output [DEVNUM-1:0] Mosi_o,
 	
-	output [21:0] Gpio_o
+	output RfLd_o,
+
+	//GPIO
+	output RfSw1_o,
+	output RfSw2_o,
+	output CtrlAmSw3_o,
+	output DdsSyncCtrlFpga_o,
+	output DdsResetFpga_o,
+	output DdsSyncFpga_o,
+	output SwCap4_o,
+	output AmAlcSw_o,
+	output SwCap3_o,
+	output SwCap2_o,
+	output SwCap1_o,
+	output AmAlc1Fix_o,
+	output PllVtuneCtrl_o,
+	output PllSyncCtrl_o,
+	output PllSync_o,
+	output PllLoopCtrl_o,
+	output DdsX2Fpga_o,
+	output DdsSaw2Fpga_o,
+	output RefOffsetCtrlFpga_o,
+	output GpioAdRfV1_o,
+	output GpioAdRfV2_o,
+	output DdsSaw1Fpga_o
 );
 
 //================================================================================
@@ -70,6 +94,7 @@ module TopSbTmsg
 
 	wire spiDataVal;
 	wire [WORDWIDTH-1:0] spiData;
+	wire [21:0] gpio1CtrlData;
 	
 	wire busyMosi1;
 	wire busyMosi4;
@@ -90,18 +115,74 @@ module TopSbTmsg
 	wire flagDirectAtt;	
 	wire flagDirectShReg;	
 	wire flagDirectMax;	
-	wire flagDirectGpio;	
-	wire flagDirectTemp;	
-	
-//================================================================================
-//  ASSIGNMENTS
+	wire flagDirectGpio1;
+	wire flagDirectGpio2;	
+	wire flagDirectTemp;
 
+	wire misoTemp;
+	wire misoGpio2;
+	wire anyFlag;
 
+	reg misoReg;	
 
+ //================================================================================
+    //  ASSIGNMENTS
+//================================================================================
+assign DdsSaw1Fpga_o 		= gpio1CtrlData[21];
+assign GpioAdRfV2_o 		= gpio1CtrlData[20];
+assign GpioAdRfV1_o 		= gpio1CtrlData[19];
+assign RefOffsetCtrlFpga_o	= gpio1CtrlData[18];
+assign DdsSaw2Fpga_o 		= gpio1CtrlData[17];
+assign DdsX2Fpga_o 			= gpio1CtrlData[16];
+assign PllLoopCtrl_o 		= gpio1CtrlData[15];
+assign PllSync_o 			= gpio1CtrlData[14];
+assign PllSyncCtrl_o 		= gpio1CtrlData[13];
+assign PllVtuneCtrl_o 		= gpio1CtrlData[12];
+assign AmAlc1Fix_o 			= gpio1CtrlData[11];
+assign SwCap1_o 			= gpio1CtrlData[10];
+assign SwCap2_o 			= gpio1CtrlData[9];
+assign SwCap3_o 			= gpio1CtrlData[8];
+assign AmAlcSw_o 			= gpio1CtrlData[7];
+assign SwCap4_o 			= gpio1CtrlData[6];
+assign DdsSyncFpga_o 		= gpio1CtrlData[5];
+assign DdsResetFpga_o 		= gpio1CtrlData[4];
+assign DdsSyncCtrlFpga_o 	= gpio1CtrlData[3];
+assign CtrlAmSw3_o 			= gpio1CtrlData[2];
+assign RfSw2_o 				= gpio1CtrlData[1];
+assign RfSw1_o 				= gpio1CtrlData[0];
 
+assign anyFlag = flagDirectTemp | flagDirectMax | flagDirectDds | flagDirectLmx | flagDirectGpio2;
+
+assign RfLd_o = MisoLdLmx_i && MisoLdMax2870_i;
+assign Miso1_io = misoReg;
 
 //================================================================================
 //  CODING
+always @(*) begin 
+	if (Rst_i) begin 
+		misoReg = 1'b0;
+	end
+	else begin 
+		if (flagDirectLmx) begin 
+			misoReg = MisoLdLmx_i;
+		end
+		else if (flagDirectDds) begin 
+			misoReg = MisoDds_i;
+		end
+		else if (flagDirectMax) begin 
+			misoReg = MisoLdMax2870_i;
+		end
+		else if (flagDirectTemp) begin 
+			misoReg = misoTemp;
+		end
+		else if (flagDirectGpio2) begin 
+			misoReg = misoGpio2;
+		end
+		else begin 
+			misoReg = 1'bz;
+		end
+	end
+end
 
 ClkGen ClkGen
 (
@@ -178,22 +259,154 @@ PacketAnalyzer1Mosi	PacketAnalyzer1Mosi
 	.FlagDirectAtt_o		(flagDirectAtt),
 	.FlagDirectShReg_o		(flagDirectShReg),
 	.FlagDirectMax_o		(flagDirectMax),
-	.FlagDirectGpio_o		(flagDirectGpio),
+	.FlagDirectGpio1_o		(flagDirectGpio1),
 	.FlagDirectTemp_o		(flagDirectTemp),
+	.FlagDirectGpio2_o		(flagDirectGpio2),
 	
 	.Busy_o					(busyMosi1)
 );
 
-GpioCtrl GpioCtrl
+LmxWrapper #(
+	.IN_WIDTH		(24),
+	.WR_NUM			(1),
+	.OUT_WIDTH		(24),
+	.DATA_WIDTH		(24)
+) LmxWrapper(
+	.WrClk_i		(gclk100),
+	.RdClk_i		(clk60),
+	.Rst_i			(Rst_i),
+	.Data_i			(spiData),
+	.Val_i			(valLmxDataToFifo),
+	.Ss_o			(),
+	.Sck_o			(),
+	.Mosi_o			()
+);
+
+DDSWrapper #(
+	.IN_WIDTH		(24),
+	.WR_NUM			(3),
+	.OUT_WIDTH		(64),
+	.DATA_WIDTH		(64)
+) DDSWrapper(
+	.WrClk_i		(gclk100),
+	.RdClk_i		(clk50),
+	.Rst_i			(Rst_i),
+	.Data_i			(spiData),
+	.Val_i			(valDdsDataToFifo),
+	.Ss_o			(),
+	.Sck_o			(),
+	.Mosi_o			()
+);
+
+PotWrapper #(
+	.IN_WIDTH		(24),
+	.WR_NUM			(1),
+	.OUT_WIDTH		(16),
+	.DATA_WIDTH		(16)
+) PotWrapper(
+	.WrClk_i		(gclk100),
+	.RdClk_i		(clk5),
+	.Rst_i			(Rst_i),
+	.Data_i			(spiData),
+	.Val_i			(valPotDataToFifo),
+	.Ss_o			(),
+	.Sck_o			(),
+	.Mosi_o			()
+);
+
+DacWrapper #(
+	.IN_WIDTH		(24),
+	.WR_NUM			(1),
+	.OUT_WIDTH		(16),
+	.DATA_WIDTH		(16)
+) DacWrapper(
+	.WrClk_i		(gclk100),
+	.RdClk_i		(clk50),
+	.Rst_i			(Rst_i),
+	.Data_i			(spiData),
+	.Val_i			(valDacDataToFifo),
+	.Ss_o			(),
+	.Sck_o			(),
+	.Mosi_o			()
+);
+
+AttenuatorWrapper #(
+	.IN_WIDTH		(24),
+	.WR_NUM			(1),
+	.OUT_WIDTH		(16),
+	.DATA_WIDTH		(16)
+) AttenuatorWrapper(
+	.WrClk_i		(gclk100),
+	.RdClk_i		(clk50),
+	.Rst_i			(Rst_i),
+	.Data_i			(spiData),
+	.Val_i			(valAttDataToFifo),
+	.Ss_o			(),
+	.Sck_o			(),
+	.Mosi_o			()
+);
+
+ShiftRegWrapper #(
+	.IN_WIDTH		(24),
+	.WR_NUM			(1),
+	.OUT_WIDTH		(8),
+	.DATA_WIDTH		(8)
+) ShiftRegWrapper(
+	.WrClk_i		(gclk100),
+	.RdClk_i		(clk26dot25),
+	.Rst_i			(Rst_i),
+	.Data_i			(spiData),
+	.Val_i			(valShRegDataToFifo),
+	.Ss_o			(),
+	.Sck_o			(),
+	.Mosi_o			()
+);
+
+Max2870Wrapper #(
+	.IN_WIDTH		(24),
+	.WR_NUM			(2),
+	.OUT_WIDTH		(32),
+	.DATA_WIDTH		(32)
+) Max2870Wrapper(
+	.WrClk_i		(gclk100),
+	.RdClk_i		(clk20),
+	.Rst_i			(Rst_i),
+	.Data_i			(spiData),
+	.Val_i			(valMaxDataToFifo),
+	.Ss_o			(),
+	.Sck_o			(),
+	.Mosi_o			()
+);
+
+TempRead TempRead (
+	.Clk24Mhz_i				(clk24),
+	.Rst_i					(Rst_i),
+	.ClkSpi_i				(Sck_i),
+	.FlagDirectTempRead_i	(flagDirectTemp),
+	.I2cScl_o				(I2cScl_o),
+	.I2cSda_io				(I2cSda_io),
+	.MisoTemp_o				(misoTemp)
+);
+
+Gpio1Ctrl Gpio1Ctrl
 (
 	.Clk_i					(gclk100),
 	.Rst_i					(Rst_i),
-	
 	.ValGpioDataToFifo_i	(valGpioDataToFifo),
+	.ValDataFromSpi_i		(spiDataVal),
+	.FlagDirectGpio1_i		(flagDirectGpio1),
 	.Data_i					(spiData),
-
-	.GpioReg_o				(Gpio_o)
+	.GpioReg_o				(gpio1CtrlData)
 );
 
+Gpio2Read Gpio2Read (
+	.Clk_i				(gclk100),
+	.Rst_i				(Rst_i),
+	.ClkSpi_i			(Sck_i),
+	.LdMax_i			(MisoLdMax2870_i),
+	.LdLmx_i			(MisoLdLmx_i),
+	.FlagDirectGpio2_i	(flagDirectGpio2),
+	.MisoGpio2_o		(misoGpio2)
+);
 
 endmodule

+ 351 - 0
src/src/Top/TopSbTmsgTb.sv

@@ -0,0 +1,351 @@
+`timescale 1ns/1ps
+
+module TopSbTmsgTb;
+   parameter CLK_PERIOD = 8.13; // Clock period in ns
+
+    // Inputs
+    logic Clk_i;
+    logic Clk100;
+    logic Clk20;
+    logic Clk80;
+    logic Clk50;
+    logic Clk24;
+    logic Clk10; 
+    logic Rst_i;
+    logic Start_i;
+    logic CPHA_i;
+    logic [31:0] SPIdata;
+	logic SpiDataVal_i;
+    logic SELST_i;
+    logic [1:0] WidthSel_i;
+    logic LAG_i;
+    logic LEAD_i;
+    logic EndianSel_i;
+    logic [5:0] Stop_i;
+    logic PulsePol_i;
+    logic MisoLdLmx_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;
+
+    logic [16:0] trCnt;
+    logic [4:0] trCntSync;
+
+
+    logic modeSel; 
+    logic [23:0] randData;
+    logic [31:0] randData32;
+    logic [5:0] QSPITotalWordNum;
+    logic Stop;
+    logic [31:0] stopCnt;
+    logic rstForFPGA;
+
+//***********************************************
+//	            Lines From RF Top
+//***********************************************
+
+    logic [7:0] sckFromRFTop;
+    logic [7:0] mosiFromRFTop;
+    logic [7:0] ssFromRFTop;
+
+
+    logic [23:0] dataFromSPItb;
+    logic        valFromSPItb; 
+
+//***********************************************
+//	            CLASSES
+//***********************************************
+
+class Packet;
+    rand bit [23:0] data;
+    rand bit [31:0] data32;
+endclass
+
+Packet pkt;
+
+//***********************************************
+//	      HEADERS FOR DEVICES
+//***********************************************
+localparam [4:0]  DeviceIdLmx2594 = 5'h0;
+localparam [4:0]  DeviceIdDDS = 5'h1;
+localparam [4:0]  DeviceIdPot = 5'h2;
+localparam [4:0]  DeviceIdDac = 5'h3;
+localparam [4:0]  DeviceIdAtt = 5'h4;
+localparam [4:0]  DeviceIdShReg = 5'h5;
+localparam [4:0]  DeviceIdMax2870 = 5'h6;
+localparam [4:0]  DeviceIdGpio1 = 5'h7;
+localparam [4:0]  DeviceIdTemp = 5'h8;
+localparam [4:0]  DeviceIdGpio2 = 5'h9;
+
+localparam [16:0] Gpio1InitWordNum = 17'd1;
+localparam [16:0] Gpio2InitWordNum = 17'd1;
+localparam [16:0] Lmx2594InitWordNum = 17'd113;
+localparam [16:0] DDSInitWordNum = 17'd37;
+localparam [16:0] MaxInitWordNum = 17'd6;
+
+localparam [23:0] InitGpio1Header        = {1'h0, DeviceIdGpio1, Gpio1InitWordNum, 1'h1};
+localparam [23:0] InitGpio2Header        = {1'b0, DeviceIdGpio2,Gpio2InitWordNum,1'h1 };
+localparam [23:0] InitLMX2594Header     = {1'h0, DeviceIdLmx2594, Lmx2594InitWordNum, 1'h1};
+localparam [23:0] InitDDSHeader         = {1'h0, DeviceIdDDS, DDSInitWordNum, 1'h1};
+localparam [23:0] InitMAX2870Header     = {1'h0, DeviceIdMax2870, MaxInitWordNum, 1'h1};
+localparam [3:0]  LMXWordNum = 4'd14;
+localparam [1:0]  DDSWordNum = 2'd3;
+localparam        POTWordNum = 1'd1;
+localparam        DACWordNum = 1'd1;
+localparam        ATTWordNum = 1'd1;
+localparam [1:0]  ShRegWordNum = 1'd1;
+localparam [2:0]  MaxWordNum =   3'd2;
+localparam [1:0]  GPIOWordNum =  2'd1;
+
+localparam [23:0] AllDevQSPIHeader = {1'h1, LMXWordNum, DDSWordNum, POTWordNum, DACWordNum,ATTWordNum, ShRegWordNum,MaxWordNum, GPIOWordNum, 7'h1};
+
+//***********************************************
+//	           ASSIGNS
+//***********************************************
+assign Val_o = (modeSel) ? valQ : valR;
+assign Sck_o = (modeSel) ? SckQ : SckR;
+assign Ss_o = (modeSel) ? SsQ : SsR;
+assign Mosi0_o = (modeSel) ? mosi0Q : mosi0R;
+assign MisoLdLmx_i = 1'b1;
+
+assign emptyFlagTx = (trCnt > 187) ? 1'b1 : 1'b0;
+assign QSPITotalWordNum = LMXWordNum + DDSWordNum + POTWordNum + DACWordNum + ATTWordNum + ShRegWordNum + MaxWordNum + GPIOWordNum; 
+
+//***********************************************
+//	           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;
+always #(50)   Clk10 = ~Clk10; 
+
+//***********************************************
+//	           INITIALIZATION
+//***********************************************
+
+initial begin
+      // Initialize Inputs
+      Clk_i = 1;
+      Clk100= 1;
+      Clk20 = 1;
+      Clk50 = 1;
+      Clk80 = 1;
+      Clk24 = 1;
+      rstForFPGA = 0;
+      Clk10 = 1;
+      pkt = new();
+      Rst_i = 1;
+      Start_i = 0;
+      CPHA_i = 0;		SpiDataVal_i = 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
+      PulsePol_i = 0;
+      // Reset the system
+      #(CLK_PERIOD*10) Rst_i = 0;
+      #(300000-60) rstForFPGA = 1;
+      #(CLK_PERIOD*74) rstForFPGA = 0;
+      #(20) Start_i = 1; // Start SPI transaction
+    
+  end
+//***********************************************
+
+always_ff @(posedge Clk10) begin
+    if (Rst_i) begin 
+        trCnt <= 0;
+    end
+    else begin 
+        if (Val_o) begin 
+            trCnt <= trCnt + 1;
+        end
+    end
+end
+
+genvar i;
+always_comb begin 
+    if (Rst_i) begin 
+        WidthSel_i = 2'd0;
+    end
+    else begin 
+        if (trCnt > 152 && trCnt < 159) begin 
+            WidthSel_i = 2'd3;
+        end
+        else begin 
+            WidthSel_i = 2'd2;
+        end
+    end
+end
+
+always_comb begin 
+    if (Rst_i) begin 
+        modeSel = 0;
+    end
+    else begin 
+        if (trCnt == 159) begin 
+            modeSel = 1;
+        end
+    end
+end
+
+always_comb begin 
+    if (Rst_i) begin 
+        Stop_i = 6'd0;
+    end
+    else begin 
+        if (trCnt == 158) begin 
+            Stop_i = 6'h0;
+        end
+        else begin
+            Stop_i = 6'd0;
+        end
+    end
+end
+
+always_ff @(posedge Clk10) begin 
+    if (Rst_i) begin 
+        randData<=0;
+        randData32 <= 0;
+    end
+    else begin 
+        randData <= pkt.randomize(data);
+        randData32 <= pkt.randomize(data32);
+    end
+end
+
+always_comb begin 
+    if (Rst_i) begin 
+        SPIdata = 0;
+    end
+    else begin 
+        // if (!rstInit && locked) begin
+            if (trCnt == 0) begin 
+                SPIdata = InitGpio2Header;
+            end
+            else if (trCnt == 2) begin 
+                SPIdata = InitGpio2Header;
+            end
+            else if (trCnt == 4) begin
+                SPIdata = InitLMX2594Header;
+            end
+            // else if (trCnt > 0 && trCnt < 114) begin 
+            //     SPIdata = pkt.data;
+            // end
+            else if (trCnt == 118) begin 
+                SPIdata = InitDDSHeader;
+            end
+            else if (trCnt == 156) begin 
+                SPIdata = InitMAX2870Header;
+            end
+            else if (trCnt > 156 && trCnt < 163) begin 
+                // if (trCnt % 2 == 0) begin 
+                //     SPIdata = 32'haaaaaaaa;
+                // end
+                // else begin 
+                //     SPIdata = 32'h55555555;
+                // end
+                SPIdata = 32'haaaaaaaa;
+                // SPIdata = pkt.data32;
+            end
+            else if (trCnt == 163) begin 
+                SPIdata = AllDevQSPIHeader;
+            end
+            else begin
+                // if (trCnt % 2 == 0) begin 
+                //     SPIdata = 24'haaaaaa;
+                // end
+                // else begin 
+                //     SPIdata = 24'h555555;
+                // end
+                SPIdata = 24'haaaaaa;
+                // SPIdata = pkt.data;
+            end
+        end
+    end
+// end
+
+//***********************************************
+//	           DUT INSTANTIATION
+//***********************************************
+    GSR GSR(.GSRI(1'b1));
+
+   ExtSpiMEmul ExtSpiMEmul_inst (
+        .Clk_i(Clk10), 
+        .Rst_i(Rst_i || modeSel), 
+        .Start_i(Start_i), 
+        .ClockPhase_i(CPHA_i),
+        .EmptyFlag_i(emptyFlagTx), 
+        .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)
+    );
+
+    ExtQspiMEmul ExtQspiMEmul_inst (
+        .Clk_i(Clk10),
+        .Rst_i(Rst_i || !modeSel),
+        .Start_i(Start_i),
+        .ClockPhase_i(CPHA_i),
+        .EmptyFlag_i(emptyFlagTx),
+        .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(mosi0Q),
+        .Mosi1_o(Mosi1_o),
+        .Mosi2_o(Mosi2_o),
+        .Mosi3_o(Mosi3_o),
+        .Sck_o(SckQ),
+        .Ss_o(SsQ),
+        .Val_o(valQ)
+    );
+
+    TopSbTmsg TopSbTmsg_inst (
+        .Clk_i(Clk24),
+        .Rst_i(rstForFPGA),
+        .Sck_i(Sck_o),
+        .Ss_i(Ss_o),
+        .MisoLdLmx_i(1'b1),
+        .MisoLdMax2870_i(1'b1),
+        .Mosi0_i(Mosi0_o),
+        .Mosi1_io(Mosi1_o),
+        .Mosi2_i(Mosi2_o),
+        .Mosi3_i(Mosi3_o)
+    );
+
+    endmodule

+ 0 - 275
src/src/Top/TopSbTmsgTb.v

@@ -1,275 +0,0 @@
-`timescale 1ns / 1ps
-
-//////////////////////////////////////////////////////////////////////////////////
-// Company: Tair
-// Engineer: Churbanov S.
-// 
-// Create Date:     
-// Design Name: 
-// Module Name:    InterfaceArbiter
-// Project Name: 
-// Target Devices: 
-// Tool versions: 
-// Description: 
-//
-// Dependencies: 
-//
-// Revision: 
-// Revision 0.01 - File Created
-// Additional Comments: 
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-module TopSbTmsgTb();
-
-//================================================================================
-//  REG/WIRE
-	
-	parameter OUTWORDWIDTH = 24;
-	parameter SSPIWORDWIDTH = 24;
-	parameter QSPIWORDWIDTH = 6;
-	
-	localparam [1:0] IDLE = 0;
-	localparam [1:0] SINGLE = 1;
-	localparam [1:0] DELAY = 2;
-	localparam [1:0] QUAD = 3;
-	
-	reg spiMode = 1'b0; //0 - single 1- quad
-	
-	reg [31:0] tbCnt;
-	reg [31:0] delCnt;
-	reg stateCnt;
-	
-	reg Clk100;
-	reg Clk10;
-	
-	reg [1:0] currState;
-	reg [1:0] nextState;
-	
-	reg rst;
-	
-	wire txStart = (tbCnt == 100 | tbCnt == 3000);
-	wire txDoneS;
-	wire txDoneQ;
-	
-	
-	wire sckS;
-	wire sckQ;
-	wire ssS;
-	wire ssQ;
-	
-	wire ss;
-	wire sck;
-	
-	wire mosi0S;
-	wire mosi0Q;
-	wire mosi1Q;
-	wire mosi2Q;
-	wire mosi3Q;
-	
-	wire delDone = (delCnt == 500);
-//================================================================================
-//  ASSIGNMENTS
-	
-	assign sck = (currState==SINGLE) ? sckS:sckQ;
-	assign ss = (currState==SINGLE) ? ssS:ssQ;
-	assign mosi0 = (currState==SINGLE) ? mosi0S:mosi0Q;
-	assign mosi1 = (currState==SINGLE) ? 1'b1:mosi1Q;
-	assign mosi2 = (currState==SINGLE) ? 1'b1:mosi2Q;
-	assign mosi3 = (currState==SINGLE) ? 1'b1:mosi3Q;
-//================================================================================
-//clocks gen
-	always	#5 Clk100	=	~Clk100;	
-	always	#50 Clk10	=	~Clk10;	
-	
-	
-//================================================================================
-//  CODING
-
-initial begin
-	Clk100	=	1'b1;
-	Clk10	=	1'b1;
-	rst		=	1'b1;
-#100;
-	rst		=	1'b0;
-end	
-	
-always	@(negedge	Clk100)	begin
-	if	(!rst)		begin
-		tbCnt	<=	tbCnt+1;
-	end	else	begin
-		tbCnt	<=	0;
-	end
-end
-
-always	@(posedge	Clk100)	begin
-	if	(!rst)		begin
-		if (currState == DELAY) begin
-			delCnt	<=	delCnt+1;
-		end	else	begin
-			delCnt	<=	0;
-		end
-	end else	begin
-		delCnt	<=	0;
-	end
-end
-
-always	@(negedge	Clk10)	begin
-	if	(!rst)		begin
-		if (txDoneS|txDoneQ) begin
-			stateCnt	<=	stateCnt+1;
-		end	
-	end else begin
-		stateCnt <= 0;
-	end
-end
-
-always	@(posedge	Clk100)	begin
-	if	(!rst)		begin
-		case (stateCnt)
-			0:	begin
-					spiMode <= 1'b0;
-				end
-			1:	begin
-					spiMode <= 1'b1;
-				end
-			default:begin
-						spiMode <= 1'b0;
-					end
-		endcase
-	end else begin
-		spiMode <= 1'b0;
-	end
-end
-
-always	@(posedge	Clk100)	begin
-	if	(rst)	begin
-		currState	<=	IDLE;
-	end	else	begin
-		currState	<=	nextState;
-	end
-end
-
-
-always @(*) begin
-	nextState	=	IDLE;
-	case(currState)
-	IDLE	:	begin
-					if (txStart)	begin
-						case (spiMode)
-							1'b0:	begin
-											nextState = SINGLE;
-										end
-							1'b1:		begin
-											nextState = QUAD;
-										end
-						endcase
-					end	else begin
-						nextState = IDLE;
-					end
-				end
-				
-	SINGLE	:	begin
-					if (txDoneS)	begin
-						nextState = DELAY;
-					end	else begin
-						nextState = SINGLE;
-					end
-				end
-				
-	DELAY	:	begin
-					if (delDone)	begin
-						nextState = QUAD;
-					end	else begin
-						nextState = DELAY;
-					end
-				end
-				
-	QUAD		:	begin
-					if (txDoneQ) begin
-						nextState  = IDLE;
-					end	else begin
-						nextState  = QUAD;
-					end
-				end
-	endcase
-end
-
-ExtSpiMEmul SingleSpiSm
-(
-	.Rst_i		(rst),
-	.Clk_i		(Clk10),
-	
-	.Start_i	((currState==SINGLE)),
-	.TxDone_o	(txDoneS),
-	
-	.Sck_o		(sckS),
-	.Ss_o		(ssS),
-	.Mosi_o		(mosi0S)
-	
-);
-
-ExtQSpiMEmul QuadSpiSm
-(
-	.Rst_i		(rst),
-	.Clk_i		(Clk10),
-	
-	.Start_i	((currState==QUAD)),
-	.TxDone_o	(txDoneQ),
-	
-	.Sck_o		(sckQ),
-	.Ss_o		(ssQ),
-	.Mosi0_o	(mosi0Q),
-	.Mosi1_o	(mosi1Q),
-	.Mosi2_o	(mosi2Q),
-	.Mosi3_o	(mosi3Q)
-	
-);
-
-TopSbTmsg DUT
-(
-	.Clk_i	(Clk100),
-	.Rst_i	(rst),
-	
-	.Sck_i	(sck),
-	.Ss_i	(ss),
-	
-	.Mosi0_i	(mosi0),
-	.Mosi1_io	(mosi1),
-	.Mosi2_i	(mosi2),
-	.Mosi3_i	(mosi3),
-	
-	.Miso1_i		(),
-	.Miso2_i		(),
-	.MisoMax2870_i	(),
-	
-	.I2CSck_o	(),
-	.I2CSda_io	(),
-	
-	.Ss_o		(),
-	.Sck_o		(),
-	.Mosi_o		(),
-	
-	.Gpio_o		()
-);
-
-endmodule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 167 - 0
src/src/Top/TopSbTmsg_Fifos.do

@@ -0,0 +1,167 @@
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+add wave -noupdate -divider Lmx_Wrapper
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/IN_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/WR_NUM
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/OUT_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/DATA_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/WrClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/RdClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/Rst_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/Data_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/Val_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/Ss_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/Sck_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/Mosi_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/dataFromLmxFifoCtrl
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/dataFromLmxFifo
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/readEnLmx
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/writeEnLmx
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/valRdDataLMX
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/busySpiMLmx
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/lmxFifoFull
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/LmxWrapper/lmxFifoEmpty
+add wave -noupdate -divider DDS_Wrapper
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/IN_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/WR_NUM
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/OUT_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/DATA_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/WrClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/RdClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/Rst_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/Data_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/Val_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/Ss_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/Sck_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/Mosi_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/dataFromDdsFifoCtrl
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/dataFromDdsFifo
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/readEnDds
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/writeEnDds
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/valRdDataDDS
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/busySpiMDds
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/ddsFifoFull
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DDSWrapper/ddsFifoEmpty
+add wave -noupdate -divider Pot_Wrapper
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/IN_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/WR_NUM
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/OUT_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/DATA_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/WrClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/RdClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/Rst_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/Data_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/Val_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/Ss_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/Sck_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/Mosi_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/dataFromPotFifoCtrl
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/dataFromPotFifo
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/readEnPot
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/writeEnPot
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/valRdDataPOT
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/busySpiMPot
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/potFifoFull
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/PotWrapper/potFifoEmpty
+add wave -noupdate -divider Dac_Wrapper
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/IN_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/WR_NUM
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/OUT_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/DATA_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/WrClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/RdClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/Rst_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/Data_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/Val_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/Ss_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/Sck_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/Mosi_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/dataFromDacFifoCtrl
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/dataFromDacFifo
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/readEnDac
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/writeEnDac
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/valRdDataDAC
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/busySpiMDac
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/dacFifoFull
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/DacWrapper/dacFifoEmpty
+add wave -noupdate -divider AttenuatorWrapper
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/IN_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/WR_NUM
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/OUT_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/DATA_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/WrClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/RdClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/Rst_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/Data_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/Val_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/Ss_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/Sck_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/Mosi_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/dataFromAttFifoCtrl
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/dataFromAttFifo
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/readEnAtt
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/writeEnAtt
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/valRdDataATT
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/busySpiMAtt
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/attFifoFull
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/AttenuatorWrapper/attFifoEmpty
+add wave -noupdate -divider ShiftRegWrapper
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/IN_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/WR_NUM
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/OUT_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/DATA_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/WrClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/RdClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/Rst_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/Data_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/Val_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/Ss_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/Sck_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/Mosi_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/dataFromShRegFifoCtrl
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/dataFromShRegFifo
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/readEnShReg
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/writeEnShReg
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/valRdDataShReg
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/busySpiMShReg
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/shRegFifoFull
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/ShiftRegWrapper/shRegFifoEmpty
+add wave -noupdate -divider Max2870Wrapper
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/IN_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/WR_NUM
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/OUT_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/DATA_WIDTH
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/WrClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/RdClk_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/Rst_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/Data_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/Val_i
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/Ss_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/Sck_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/Mosi_o
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/dataFromMaxFifoCtrl
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/dataFromMaxFifo
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/readEnMax
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/writeEnMax
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/valRdDataMAX
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/busySpiMMax
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/maxFifoFull
+add wave -noupdate /TopSbTmsgTb/TopSbTmsg_inst/Max2870Wrapper/maxFifoEmpty
+TreeUpdate [SetDefaultTree]
+WaveRestoreCursors {{Cursor 1} {840629685 ps} 0}
+quietly wave cursor active 1
+configure wave -namecolwidth 150
+configure wave -valuecolwidth 100
+configure wave -justifyvalue left
+configure wave -signalnamewidth 1
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+configure wave -timelineunits ps
+update
+WaveRestoreZoom {753643129 ps} {755703694 ps}

+ 95 - 0
src/src/WrapFifoChain/AttenuatorWrapper.v

@@ -0,0 +1,95 @@
+// Company:         TAIR
+// Engineer:        Chigrinskiy A.  
+// 
+// Create Date:     18/04/2024 
+// Design Name: 
+// Module Name:     AttenuatorWrapper
+// Project Name:    SB_TMSG44V1_FPGA
+// Target Devices:  Board: SB_TMSG44v1. FPGA: GW1N-LV9PG256C6/I5
+// Tool versions:
+// Description:    This module is a wrapper for the Fifo, Fifo Controller and SPI Master modules.
+//
+// Dependencies:  
+// Revision: 
+// Revision 1.0 - File Created
+// Additional Comments: 
+//
+////////////////////////////////////////////////////////////////////////////////////////////
+module AttenuatorWrapper #(
+    parameter IN_WIDTH = 24,
+    parameter WR_NUM = 1,
+    parameter OUT_WIDTH = 16,
+    parameter DATA_WIDTH = 16
+)(
+    input WrClk_i,
+    input RdClk_i,
+    input Rst_i,
+    input [IN_WIDTH-1:0] Data_i,
+    input Val_i,
+
+    output Ss_o,
+    output Sck_o,
+    output Mosi_o
+
+);
+//================================================================================
+//	                                REG/WIRE
+//================================================================================    
+wire [OUT_WIDTH-1:0] dataFromAttFifoCtrl;
+wire [OUT_WIDTH-1:0] dataFromAttFifo;
+wire readEnAtt;
+wire writeEnAtt;
+wire valRdDataATT;
+wire busySpiMAtt;
+wire attFifoFull;
+wire attFifoEmpty;
+
+//==========================================================================//
+//									CODING									//
+//==========================================================================//
+FifoCtrl #(
+	.IN_WIDTH		(IN_WIDTH),
+	.WR_NUM			(WR_NUM),
+	.OUT_WIDTH		(OUT_WIDTH)
+) FifoCtrlAtt
+(
+	.WrClk_i		(WrClk_i),
+	.RdClk_i		(RdClk_i),
+	.Rst_i			(Rst_i),
+	.Data_i			(Data_i),
+	.Val_i			(Val_i),
+	.BusySpiM_i		(busySpiMAtt),
+	.FifoFull_i		(attFifoFull),
+	.FifoEmpty_i	(attFifoEmpty),
+	.Data_o			(dataFromAttFifoCtrl),
+	.ReadEn_o		(readEnAtt),
+	.WriteEn_o		(writeEnAtt),
+	.ValRdData_o	(valRdDataATT)
+);
+
+Fifo16x3 FifoAtt_inst (
+	.Data	(dataFromAttFifoCtrl),
+	.WrClk	(WrClk_i),
+	.RdClk	(RdClk_i),
+	.Reset	(Rst_i),
+	.WrEn	(writeEnAtt),
+	.RdEn	(readEnAtt),
+	.Full	(attFifoFull),
+	.Empty	(attFifoEmpty),
+	.Q		(dataFromAttFifo)
+);
+
+SpiM #(
+	.DATA_WIDTH	(DATA_WIDTH)
+)SpiMAtt(
+	.Clk_i		(RdClk_i),
+	.Rst_i		(Rst_i),
+	.Val_i		(valRdDataATT),
+	.SpiData_i	(dataFromAttFifo),
+	.Busy_o	    (busySpiMAtt),
+	.Ss_o		(Ss_o),
+	.Mosi_o		(Mosi_o),
+	.Sck_o		(Sck_o)
+);
+
+endmodule

+ 95 - 0
src/src/WrapFifoChain/DDSWrapper.v

@@ -0,0 +1,95 @@
+// Company:         TAIR
+// Engineer:        Chigrinskiy A.  
+// 
+// Create Date:     18/04/2024 
+// Design Name: 
+// Module Name:     DDSWrapper
+// Project Name:    SB_TMSG44V1_FPGA
+// Target Devices:  Board: SB_TMSG44v1. FPGA: GW1N-LV9PG256C6/I5
+// Tool versions:
+// Description:    This module is a wrapper for the Fifo, Fifo Controller and SPI Master modules.
+//
+// Dependencies:  
+// Revision: 
+// Revision 1.0 - File Created
+// Additional Comments: 
+//
+////////////////////////////////////////////////////////////////////////////////////////////
+module DDSWrapper #(
+    parameter IN_WIDTH = 24,
+    parameter WR_NUM = 3,
+    parameter OUT_WIDTH = 64,
+    parameter DATA_WIDTH = 64
+)(
+    input WrClk_i,
+    input RdClk_i,
+    input Rst_i,
+    input [IN_WIDTH-1:0] Data_i,
+    input Val_i,
+
+    output Ss_o,
+    output Sck_o,
+    output Mosi_o
+
+);
+//================================================================================
+//	                                REG/WIRE
+//================================================================================    
+wire [OUT_WIDTH-1:0] dataFromDdsFifoCtrl;
+wire [OUT_WIDTH-1:0] dataFromDdsFifo;
+wire readEnDds;
+wire writeEnDds;
+wire valRdDataDDS;
+wire busySpiMDds;
+wire ddsFifoFull;
+wire ddsFifoEmpty;
+
+//==========================================================================//
+//									CODING									//
+//==========================================================================//
+FifoCtrl #(
+	.IN_WIDTH		(IN_WIDTH),
+	.WR_NUM			(WR_NUM),
+	.OUT_WIDTH		(OUT_WIDTH)
+) FifoCtrlDDS
+(
+	.WrClk_i		(WrClk_i),
+	.RdClk_i		(RdClk_i),
+	.Rst_i			(Rst_i),
+	.Data_i			(Data_i),
+	.Val_i			(Val_i),
+	.BusySpiM_i		(busySpiMDds),
+	.FifoFull_i		(ddsFifoFull),
+	.FifoEmpty_i	(ddsFifoEmpty),
+	.Data_o			(dataFromDdsFifoCtrl),
+	.ReadEn_o		(readEnDds),
+	.WriteEn_o		(writeEnDds),
+	.ValRdData_o	(valRdDataDDS)
+);
+
+FifoDDS FifoDDS_inst (
+	.Data	(dataFromDdsFifoCtrl),
+	.WrClk	(WrClk_i),
+	.RdClk	(RdClk_i),
+	.Reset	(Rst_i),
+	.WrEn	(writeEnDds),
+	.RdEn	(readEnDds),
+	.Full	(ddsFifoFull),
+	.Empty	(ddsFifoEmpty),
+	.Q		(dataFromDdsFifo)
+);
+
+SpiM #(
+	.DATA_WIDTH	(DATA_WIDTH)
+)SpiMDDS(
+	.Clk_i		(RdClk_i),
+	.Rst_i		(Rst_i),
+	.Val_i		(valRdDataDDS),
+	.SpiData_i	(dataFromDdsFifo),
+	.Busy_o	    (busySpiMDds),
+	.Ss_o		(Ss_o),
+	.Mosi_o		(Mosi_o),
+	.Sck_o		(Sck_o)
+);
+
+endmodule

+ 95 - 0
src/src/WrapFifoChain/DacWrapper.v

@@ -0,0 +1,95 @@
+// Company:         TAIR
+// Engineer:        Chigrinskiy A.  
+// 
+// Create Date:     18/04/2024 
+// Design Name: 
+// Module Name:     DDSWrapper
+// Project Name:    SB_TMSG44V1_FPGA
+// Target Devices:  Board: SB_TMSG44v1. FPGA: GW1N-LV9PG256C6/I5
+// Tool versions:
+// Description:    This module is a wrapper for the Fifo, Fifo Controller and SPI Master modules.
+//
+// Dependencies:  
+// Revision: 
+// Revision 1.0 - File Created
+// Additional Comments: 
+//
+////////////////////////////////////////////////////////////////////////////////////////////
+module DacWrapper #(
+    parameter IN_WIDTH = 24,
+    parameter WR_NUM = 1,
+    parameter OUT_WIDTH = 16,
+    parameter DATA_WIDTH = 16
+)(
+    input WrClk_i,
+    input RdClk_i,
+    input Rst_i,
+    input [IN_WIDTH-1:0] Data_i,
+    input Val_i,
+
+    output Ss_o,
+    output Sck_o,
+    output Mosi_o
+
+);
+//================================================================================
+//	                                REG/WIRE
+//================================================================================    
+wire [OUT_WIDTH-1:0] dataFromDacFifoCtrl;
+wire [OUT_WIDTH-1:0] dataFromDacFifo;
+wire readEnDac;
+wire writeEnDac;
+wire valRdDataDAC;
+wire busySpiMDac;
+wire dacFifoFull;
+wire dacFifoEmpty;
+
+//==========================================================================//
+//									CODING									//
+//==========================================================================//
+FifoCtrl #(
+	.IN_WIDTH		(IN_WIDTH),
+	.WR_NUM			(WR_NUM),
+	.OUT_WIDTH		(OUT_WIDTH)
+) FifoCtrlDac
+(
+	.WrClk_i		(WrClk_i),
+	.RdClk_i		(RdClk_i),
+	.Rst_i			(Rst_i),
+	.Data_i			(Data_i),
+	.Val_i			(Val_i),
+	.BusySpiM_i		(busySpiMDac),
+	.FifoFull_i		(dacFifoFull),
+	.FifoEmpty_i	(dacFifoEmpty),
+	.Data_o			(dataFromDacFifoCtrl),
+	.ReadEn_o		(readEnDac),
+	.WriteEn_o		(writeEnDac),
+	.ValRdData_o	(valRdDataDAC)
+);
+
+Fifo16x3 FifoDAC_inst (
+	.Data	(dataFromDacFifoCtrl),
+	.WrClk	(WrClk_i),
+	.RdClk	(RdClk_i),
+	.Reset	(Rst_i),
+	.WrEn	(writeEnDac),
+	.RdEn	(readEnDac),
+	.Full	(dacFifoFull),
+	.Empty	(dacFifoEmpty),
+	.Q		(dataFromDacFifo)
+);
+
+SpiM #(
+	.DATA_WIDTH	(DATA_WIDTH)
+)SpiMDac(
+	.Clk_i		(RdClk_i),
+	.Rst_i		(Rst_i),
+	.Val_i		(valRdDataDAC),
+	.SpiData_i	(dataFromDacFifo),
+	.Busy_o	    (busySpiMDac),
+	.Ss_o		(Ss_o),
+	.Mosi_o		(Mosi_o),
+	.Sck_o		(Sck_o)
+);
+
+endmodule

+ 35 - 0
src/src/WrapFifoChain/Fifo16x3/Fifo16x3.ipc

@@ -0,0 +1,35 @@
+[General]
+ipc_version=4
+file=Fifo16x3
+module=Fifo16x3
+target_device=gw1n9-014
+type=fifo_hs
+version=1.0
+
+[Config]
+AlmostEmptyFlag=false
+AlmostEmptyFlagItem=Empty_Single Threshold Constant Parameter
+AlmostFullFlag=false
+AlmostFullFlagItem=Full_Single Threshold Constant Parameter
+BSRAM=true
+ControlledByRdEn=false
+ECCSelected=false
+EmptyClear=1
+EmptySet=1
+EnReset=true
+FirstWordFallThrough=true
+FullClear=1
+FullSet=1
+LANG=0
+OutputRegistersSelected=false
+REG=false
+ReadDataNum=false
+ReadDataWidth=16
+ReadDepth=2
+ResetSynchronization=true
+SSRAM=false
+StandardFIFO=false
+Synthesis_tool=GowinSynthesis
+WriteDataNum=false
+WriteDataWidth=16
+WriteDepth=2

+ 187 - 0
src/src/WrapFifoChain/Fifo16x3/Fifo16x3.v

@@ -0,0 +1,187 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:04:59 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+W3HrOAkNrb9fyqeg7xkmFYNJEXf+2L4xAs1NganKSsLdhqtqnzGilurt3rhiuavKOthhpj0CIxX1
+ZedEQJHy1YoMcnQT/3ZR2V3s3tn5tIa0uYYmQ8HT3UmPy8pHZ9XT/zgb2OmdgjJxDOHxDE7oxPBw
+9cYYeTV+3m3U6h+r4eV1SJQSYMc4UjdcIpk/DWgts59MtW68EHUmHQxC7WbB6lq0/1Vwga5FznK/
++9xK15Qi3TKg78a8SyeARfBIq/ZyaIeoIf0QdOas+rARU4dzyqiiiy7sm42o4pyAR9PegR9hQGE7
+t/bYNDjO0d+SB5/il7zBD/3fBQDGuJm2Z5KM7Q==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=6368)
+`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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
+`pragma protect end_protected
+module Fifo16x3 (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [15:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [15:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.Fifo16x3  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[15:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[15:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* Fifo16x3 */

+ 353 - 0
src/src/WrapFifoChain/Fifo16x3/Fifo16x3.vo

@@ -0,0 +1,353 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Post-PnR Simulation Model file
+//Tool Version: V1.9.9.02
+//Created Time: Thu Apr 25 16:04:59 2024
+
+`timescale 100 ps/100 ps
+module Fifo16x3(
+	Data,
+	Reset,
+	WrClk,
+	RdClk,
+	WrEn,
+	RdEn,
+	Q,
+	Empty,
+	Full
+);
+input [15:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [15:0] Q;
+output Empty;
+output Full;
+wire [15:0] Data;
+wire Empty;
+wire Full;
+wire GND;
+wire [15:0] Q;
+wire RdClk;
+wire RdEn;
+wire Reset;
+wire VCC;
+wire WrClk;
+wire WrEn;
+wire \fifo_inst/n20_5 ;
+wire \fifo_inst/n26_4 ;
+wire \fifo_inst/n217_4 ;
+wire \fifo_inst/rempty_val ;
+wire \fifo_inst/wfull_val_7 ;
+wire \fifo_inst/wfull_val1 ;
+wire \fifo_inst/wfull_val1_0 ;
+wire \fifo_inst/Full_1 ;
+wire \fifo_inst/Equal.wbinnext_0_7 ;
+wire \fifo_inst/rempty_val_8 ;
+wire \fifo_inst/wfull_val1_2 ;
+wire \fifo_inst/wfull_val1_3 ;
+wire \fifo_inst/Full_1_2 ;
+wire \fifo_inst/Full_2 ;
+wire \fifo_inst/n4_6 ;
+wire \fifo_inst/n9_6 ;
+wire [0:0] \fifo_inst/Equal.rgraynext ;
+wire [0:0] \fifo_inst/Equal.wgraynext ;
+wire [1:0] \fifo_inst/rbin_num_next ;
+wire [1:1] \fifo_inst/Equal.wbinnext ;
+wire [1:0] \fifo_inst/reset_r ;
+wire [1:0] \fifo_inst/reset_w ;
+wire [1:0] \fifo_inst/rbin_num ;
+wire [1:0] \fifo_inst/Equal.rq1_wptr ;
+wire [1:0] \fifo_inst/Equal.rq2_wptr ;
+wire [0:0] \fifo_inst/rptr ;
+wire [1:0] \fifo_inst/wptr ;
+wire [0:0] \fifo_inst/Equal.wbin ;
+wire [31:16] \fifo_inst/DO ;
+VCC VCC_cZ (
+  .V(VCC)
+);
+GND GND_cZ (
+  .G(GND)
+);
+GSR GSR (
+	.GSRI(VCC)
+);
+LUT4 \fifo_inst/n20_s1  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.I3(WrEn),
+	.F(\fifo_inst/n20_5 )
+);
+defparam \fifo_inst/n20_s1 .INIT=16'h5300;
+LUT3 \fifo_inst/n26_s1  (
+	.I0(RdEn),
+	.I1(Empty),
+	.I2(\fifo_inst/rempty_val ),
+	.F(\fifo_inst/n26_4 )
+);
+defparam \fifo_inst/n26_s1 .INIT=8'h0E;
+LUT3 \fifo_inst/Equal.rgraynext_0_s0  (
+	.I0(\fifo_inst/rbin_num [0]),
+	.I1(\fifo_inst/rbin_num_next [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/Equal.rgraynext [0])
+);
+defparam \fifo_inst/Equal.rgraynext_0_s0 .INIT=8'h1E;
+LUT3 \fifo_inst/Equal.wgraynext_0_s0  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.I2(\fifo_inst/wptr [1]),
+	.F(\fifo_inst/Equal.wgraynext [0])
+);
+defparam \fifo_inst/Equal.wgraynext_0_s0 .INIT=8'h1E;
+LUT2 \fifo_inst/n217_s1  (
+	.I0(\fifo_inst/reset_w [1]),
+	.I1(\fifo_inst/wfull_val_7 ),
+	.F(\fifo_inst/n217_4 )
+);
+defparam \fifo_inst/n217_s1 .INIT=4'h4;
+LUT4 \fifo_inst/rempty_val_s3  (
+	.I0(\fifo_inst/Equal.rq2_wptr [1]),
+	.I1(\fifo_inst/rempty_val_8 ),
+	.I2(\fifo_inst/Equal.rq2_wptr [0]),
+	.I3(\fifo_inst/rbin_num_next [0]),
+	.F(\fifo_inst/rempty_val )
+);
+defparam \fifo_inst/rempty_val_s3 .INIT=16'h4221;
+LUT4 \fifo_inst/wfull_val_s3  (
+	.I0(\fifo_inst/wptr [0]),
+	.I1(\fifo_inst/wptr [1]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.I3(\fifo_inst/rptr [0]),
+	.F(\fifo_inst/wfull_val_7 )
+);
+defparam \fifo_inst/wfull_val_s3 .INIT=16'h1428;
+LUT3 \fifo_inst/wfull_val1_s9  (
+	.I0(\fifo_inst/wfull_val1_3 ),
+	.I1(\fifo_inst/wfull_val1_2 ),
+	.I2(\fifo_inst/wfull_val1_0 ),
+	.F(\fifo_inst/wfull_val1 )
+);
+defparam \fifo_inst/wfull_val1_s9 .INIT=8'hAC;
+LUT3 \fifo_inst/wfull_val1_s10  (
+	.I0(\fifo_inst/wfull_val_7 ),
+	.I1(\fifo_inst/wfull_val1_0 ),
+	.I2(\fifo_inst/reset_w [1]),
+	.F(\fifo_inst/wfull_val1_0 )
+);
+defparam \fifo_inst/wfull_val1_s10 .INIT=8'h0E;
+LUT3 \fifo_inst/Full_d_s  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.F(Full)
+);
+defparam \fifo_inst/Full_d_s .INIT=8'hAC;
+LUT3 \fifo_inst/Full_s8  (
+	.I0(\fifo_inst/wfull_val_7 ),
+	.I1(\fifo_inst/Full_1 ),
+	.I2(\fifo_inst/reset_w [1]),
+	.F(\fifo_inst/Full_1 )
+);
+defparam \fifo_inst/Full_s8 .INIT=8'h0E;
+LUT3 \fifo_inst/rbin_num_next_0_s5  (
+	.I0(Empty),
+	.I1(RdEn),
+	.I2(\fifo_inst/rbin_num [0]),
+	.F(\fifo_inst/rbin_num_next [0])
+);
+defparam \fifo_inst/rbin_num_next_0_s5 .INIT=8'hB4;
+LUT3 \fifo_inst/rbin_num_next_1_s2  (
+	.I0(\fifo_inst/rbin_num_next [0]),
+	.I1(\fifo_inst/rbin_num [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/rbin_num_next [1])
+);
+defparam \fifo_inst/rbin_num_next_1_s2 .INIT=8'hB4;
+LUT2 \fifo_inst/Equal.wbinnext_0_s3  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.F(\fifo_inst/Equal.wbinnext_0_7 )
+);
+defparam \fifo_inst/Equal.wbinnext_0_s3 .INIT=4'h6;
+LUT3 \fifo_inst/Equal.wbinnext_1_s2  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.I2(\fifo_inst/wptr [1]),
+	.F(\fifo_inst/Equal.wbinnext [1])
+);
+defparam \fifo_inst/Equal.wbinnext_1_s2 .INIT=8'h78;
+LUT4 \fifo_inst/rempty_val_s4  (
+	.I0(\fifo_inst/Equal.rq2_wptr [0]),
+	.I1(\fifo_inst/Equal.rq2_wptr [1]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.I3(\fifo_inst/rbin_num [0]),
+	.F(\fifo_inst/rempty_val_8 )
+);
+defparam \fifo_inst/rempty_val_s4 .INIT=16'h871E;
+DFFP \fifo_inst/reset_r_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [0])
+);
+defparam \fifo_inst/reset_r_0_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_1_s0  (
+	.D(\fifo_inst/reset_w [0]),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [1])
+);
+defparam \fifo_inst/reset_w_1_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [0])
+);
+defparam \fifo_inst/reset_w_0_s0 .INIT=1'b1;
+DFFC \fifo_inst/rbin_num_1_s0  (
+	.D(\fifo_inst/rbin_num_next [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [1])
+);
+defparam \fifo_inst/rbin_num_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_0_s0  (
+	.D(\fifo_inst/rbin_num_next [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [0])
+);
+defparam \fifo_inst/rbin_num_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_1_s0  (
+	.D(\fifo_inst/wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [1])
+);
+defparam \fifo_inst/Equal.rq1_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_0_s0  (
+	.D(\fifo_inst/wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [0])
+);
+defparam \fifo_inst/Equal.rq1_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_1_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [1])
+);
+defparam \fifo_inst/Equal.rq2_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_0_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [0])
+);
+defparam \fifo_inst/Equal.rq2_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_0_s0  (
+	.D(\fifo_inst/Equal.rgraynext [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [0])
+);
+defparam \fifo_inst/rptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_1_s0  (
+	.D(\fifo_inst/Equal.wbinnext [1]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [1])
+);
+defparam \fifo_inst/wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_0_s0  (
+	.D(\fifo_inst/Equal.wgraynext [0]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [0])
+);
+defparam \fifo_inst/wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_0_s0  (
+	.D(\fifo_inst/Equal.wbinnext_0_7 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [0])
+);
+defparam \fifo_inst/Equal.wbin_0_s0 .INIT=1'b0;
+DFFP \fifo_inst/Empty_s0  (
+	.D(\fifo_inst/rempty_val ),
+	.CLK(RdClk),
+	.PRESET(\fifo_inst/reset_r [1]),
+	.Q(Empty)
+);
+defparam \fifo_inst/Empty_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_r_1_s0  (
+	.D(\fifo_inst/reset_r [0]),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [1])
+);
+defparam \fifo_inst/reset_r_1_s0 .INIT=1'b1;
+DFFC \fifo_inst/wfull_val1_s0  (
+	.D(\fifo_inst/wfull_val_7 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wfull_val1_2 )
+);
+defparam \fifo_inst/wfull_val1_s0 .INIT=1'b0;
+DFFP \fifo_inst/wfull_val1_s1  (
+	.D(\fifo_inst/wfull_val_7 ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n217_4 ),
+	.Q(\fifo_inst/wfull_val1_3 )
+);
+defparam \fifo_inst/wfull_val1_s1 .INIT=1'b1;
+DFFC \fifo_inst/Full_s0  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Full_1_2 )
+);
+defparam \fifo_inst/Full_s0 .INIT=1'b0;
+DFFP \fifo_inst/Full_s1  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n217_4 ),
+	.Q(\fifo_inst/Full_2 )
+);
+defparam \fifo_inst/Full_s1 .INIT=1'b1;
+SDPB \fifo_inst/Equal.mem_Equal.mem_0_0_s  (
+	.CLKA(WrClk),
+	.CEA(\fifo_inst/n20_5 ),
+	.RESETA(GND),
+	.CLKB(RdClk),
+	.CEB(\fifo_inst/n26_4 ),
+	.RESETB(\fifo_inst/reset_r [1]),
+	.OCE(GND),
+	.BLKSELA({GND, GND, GND}),
+	.BLKSELB({GND, GND, GND}),
+	.DI({GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, Data[15:0]}),
+	.ADA({GND, GND, GND, GND, GND, GND, GND, GND, GND, \fifo_inst/Equal.wbin [0], GND, GND, VCC, VCC}),
+	.ADB({GND, GND, GND, GND, GND, GND, GND, GND, GND, \fifo_inst/rbin_num_next [0], GND, GND, GND, GND}),
+	.DO({\fifo_inst/DO [31:16], Q[15:0]})
+);
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .READ_MODE=1'b0;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_0=16;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_1=16;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .RESET_MODE="ASYNC";
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_0=3'b000;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_1=3'b000;
+INV \fifo_inst/n4_s2  (
+	.I(RdClk),
+	.O(\fifo_inst/n4_6 )
+);
+INV \fifo_inst/n9_s2  (
+	.I(WrClk),
+	.O(\fifo_inst/n9_6 )
+);
+endmodule

+ 24 - 0
src/src/WrapFifoChain/Fifo16x3/Fifo16x3_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:04:59 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	Fifo16x3 your_instance_name(
+		.Data(Data_i), //input [15: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 [15:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 20 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/FIFOHS.prj

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW1N-9" package="PBGA256" speed="6" partNumber="GW1N-LV9PG256C6/I5"/>
+    <FileList>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data"/>
+        <Option type="include_path" value="C:/Projects/QuestaProjects/main_tb/fifo_hs/Fifo16x3/temp/FIFOHS"/>
+        <Option type="output_file" value="Fifo16x3.vg"/>
+        <Option type="output_template" value="Fifo16x3_tmp.v"/>
+        <Option type="ram_balance" value="1"/>
+        <Option type="ram_rw_check" value="1"/>
+        <Option type="verilog_language" value="sysv-2017"/>
+    </OptionList>
+</Project>

+ 45 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3.log

@@ -0,0 +1,45 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Analyzing included file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\static_macro_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Compiling module 'Fifo16x3'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":4)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+NOTE  (EX0101) : Current top module is "Fifo16x3"
+[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
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\Projects\QuestaProjects\main_tb\fifo_hs\Fifo16x3\temp\FIFOHS\Fifo16x3.vg" completed
+Generate template file "C:\Projects\QuestaProjects\main_tb\fifo_hs\Fifo16x3\temp\FIFOHS\Fifo16x3_tmp.v" completed
+[100%] Generate report file "C:\Projects\QuestaProjects\main_tb\fifo_hs\Fifo16x3\temp\FIFOHS\Fifo16x3_syn.rpt.html" completed
+GowinSynthesis finish

+ 187 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3.vg

@@ -0,0 +1,187 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:04:59 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+W3HrOAkNrb9fyqeg7xkmFYNJEXf+2L4xAs1NganKSsLdhqtqnzGilurt3rhiuavKOthhpj0CIxX1
+ZedEQJHy1YoMcnQT/3ZR2V3s3tn5tIa0uYYmQ8HT3UmPy8pHZ9XT/zgb2OmdgjJxDOHxDE7oxPBw
+9cYYeTV+3m3U6h+r4eV1SJQSYMc4UjdcIpk/DWgts59MtW68EHUmHQxC7WbB6lq0/1Vwga5FznK/
++9xK15Qi3TKg78a8SyeARfBIq/ZyaIeoIf0QdOas+rARU4dzyqiiiy7sm42o4pyAR9PegR9hQGE7
+t/bYNDjO0d+SB5/il7zBD/3fBQDGuJm2Z5KM7Q==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=6368)
+`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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
+`pragma protect end_protected
+module Fifo16x3 (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [15:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [15:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.Fifo16x3  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[15:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[15:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* Fifo16x3 */

Plik diff jest za duży
+ 1300 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3_syn.rpt.html


+ 46 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3_syn_resource.html

@@ -0,0 +1,46 @@
+<!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>
+<th class="label">ROM16 NUMBER</th>
+</tr>
+<tr>
+<td class="label">Fifo16x3 (C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v)</td>
+<td align = "center">19</td>
+<td align = "center">-</td>
+<td align = "center">18</td>
+<td align = "center">-</td>
+<td align = "center">1</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="Fifo16x3" Register="19" Lut="18" Bsram="1" T_Register="19(19)" T_Lut="18(18)" T_Bsram="1(1)"/>

+ 24 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/Fifo16x3_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:04:59 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	Fifo16x3 your_instance_name(
+		.Data(Data_i), //input [15: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 [15:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 5 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/fifo_define.v

@@ -0,0 +1,5 @@
+`define module_name Fifo16x3
+`define EBR_BASED
+`define FWFT
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/fifo_parameter.v

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

+ 1 - 0
src/src/WrapFifoChain/Fifo16x3/temp/FIFOHS/project.ini

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

+ 35 - 0
src/src/WrapFifoChain/FifoDDS/FifoDDS.ipc

@@ -0,0 +1,35 @@
+[General]
+ipc_version=4
+file=FifoDDS
+module=FifoDDS
+target_device=gw1n9-014
+type=fifo_hs
+version=1.0
+
+[Config]
+AlmostEmptyFlag=false
+AlmostEmptyFlagItem=Empty_Single Threshold Constant Parameter
+AlmostFullFlag=false
+AlmostFullFlagItem=Full_Single Threshold Constant Parameter
+BSRAM=true
+ControlledByRdEn=false
+ECCSelected=false
+EmptyClear=1
+EmptySet=1
+EnReset=true
+FirstWordFallThrough=true
+FullClear=1
+FullSet=1
+LANG=0
+OutputRegistersSelected=false
+REG=false
+ReadDataNum=false
+ReadDataWidth=64
+ReadDepth=2
+ResetSynchronization=true
+SSRAM=false
+StandardFIFO=false
+Synthesis_tool=GowinSynthesis
+WriteDataNum=false
+WriteDataWidth=64
+WriteDepth=2

+ 199 - 0
src/src/WrapFifoChain/FifoDDS/FifoDDS.v

@@ -0,0 +1,199 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:06:49 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+bhm5ZxuHD5fe6lKy2Dq5AwHxacJ1cWMwBMX9H8GmdL4lnDV2AKUKXoXHJPX5qkh7Ng/EuDXlf3tq
+XgChMGXHxhGKlXwTDGbPZ7rg+R+CLwCXNxLjHDLHZj7jAwx16WNjn6S5gfS7ZWNO/UifNMSnMT3R
+m/cUTYMLIkyS4qXtYi2xztDEhzoau2SQnLDGMrABROuNOwwpPJPYPMCZrpYnUTE9prjojUwFQhnT
+aNSO4thTEH7/k6gA0a1Hr9Kwu6d3XW6q2dZH78mYOaedKNxNSU95OsQ/GrR3fobX7P5Bxrf3upgd
+Xs0Rq7KS+nMjcFcl7E3CRA+0+XO4iCSxRkS+iA==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=7024)
+`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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
+yLUXcvMsVv4bPZxPFw==
+`pragma protect end_protected
+module FifoDDS (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [63:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [63:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.FifoDDS  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[63:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[63:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoDDS */

+ 373 - 0
src/src/WrapFifoChain/FifoDDS/FifoDDS.vo

@@ -0,0 +1,373 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Post-PnR Simulation Model file
+//Tool Version: V1.9.9.02
+//Created Time: Thu Apr 25 16:06:49 2024
+
+`timescale 100 ps/100 ps
+module FifoDDS(
+	Data,
+	Reset,
+	WrClk,
+	RdClk,
+	WrEn,
+	RdEn,
+	Q,
+	Empty,
+	Full
+);
+input [63:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [63:0] Q;
+output Empty;
+output Full;
+wire [63:0] Data;
+wire Empty;
+wire Full;
+wire GND;
+wire [63:0] Q;
+wire RdClk;
+wire RdEn;
+wire Reset;
+wire VCC;
+wire WrClk;
+wire WrEn;
+wire \fifo_inst/n20_5 ;
+wire \fifo_inst/n26_4 ;
+wire \fifo_inst/n457_4 ;
+wire \fifo_inst/rempty_val ;
+wire \fifo_inst/wfull_val_7 ;
+wire \fifo_inst/wfull_val1 ;
+wire \fifo_inst/wfull_val1_0 ;
+wire \fifo_inst/Full_1 ;
+wire \fifo_inst/Equal.wbinnext_0_7 ;
+wire \fifo_inst/rempty_val_8 ;
+wire \fifo_inst/wfull_val1_2 ;
+wire \fifo_inst/wfull_val1_3 ;
+wire \fifo_inst/Full_1_2 ;
+wire \fifo_inst/Full_2 ;
+wire \fifo_inst/n4_6 ;
+wire \fifo_inst/n9_6 ;
+wire [0:0] \fifo_inst/Equal.rgraynext ;
+wire [0:0] \fifo_inst/Equal.wgraynext ;
+wire [1:0] \fifo_inst/rbin_num_next ;
+wire [1:1] \fifo_inst/Equal.wbinnext ;
+wire [1:0] \fifo_inst/reset_r ;
+wire [1:0] \fifo_inst/reset_w ;
+wire [1:0] \fifo_inst/rbin_num ;
+wire [1:0] \fifo_inst/Equal.rq1_wptr ;
+wire [1:0] \fifo_inst/Equal.rq2_wptr ;
+wire [0:0] \fifo_inst/rptr ;
+wire [1:0] \fifo_inst/wptr ;
+wire [0:0] \fifo_inst/Equal.wbin ;
+VCC VCC_cZ (
+  .V(VCC)
+);
+GND GND_cZ (
+  .G(GND)
+);
+GSR GSR (
+	.GSRI(VCC)
+);
+LUT4 \fifo_inst/n20_s1  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.I3(WrEn),
+	.F(\fifo_inst/n20_5 )
+);
+defparam \fifo_inst/n20_s1 .INIT=16'h5300;
+LUT3 \fifo_inst/n26_s1  (
+	.I0(RdEn),
+	.I1(Empty),
+	.I2(\fifo_inst/rempty_val ),
+	.F(\fifo_inst/n26_4 )
+);
+defparam \fifo_inst/n26_s1 .INIT=8'h0E;
+LUT3 \fifo_inst/Equal.rgraynext_0_s0  (
+	.I0(\fifo_inst/rbin_num [0]),
+	.I1(\fifo_inst/rbin_num_next [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/Equal.rgraynext [0])
+);
+defparam \fifo_inst/Equal.rgraynext_0_s0 .INIT=8'h1E;
+LUT3 \fifo_inst/Equal.wgraynext_0_s0  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.I2(\fifo_inst/wptr [1]),
+	.F(\fifo_inst/Equal.wgraynext [0])
+);
+defparam \fifo_inst/Equal.wgraynext_0_s0 .INIT=8'h1E;
+LUT2 \fifo_inst/n457_s1  (
+	.I0(\fifo_inst/reset_w [1]),
+	.I1(\fifo_inst/wfull_val_7 ),
+	.F(\fifo_inst/n457_4 )
+);
+defparam \fifo_inst/n457_s1 .INIT=4'h4;
+LUT4 \fifo_inst/rempty_val_s3  (
+	.I0(\fifo_inst/Equal.rq2_wptr [1]),
+	.I1(\fifo_inst/rempty_val_8 ),
+	.I2(\fifo_inst/Equal.rq2_wptr [0]),
+	.I3(\fifo_inst/rbin_num_next [0]),
+	.F(\fifo_inst/rempty_val )
+);
+defparam \fifo_inst/rempty_val_s3 .INIT=16'h4221;
+LUT4 \fifo_inst/wfull_val_s3  (
+	.I0(\fifo_inst/wptr [0]),
+	.I1(\fifo_inst/wptr [1]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.I3(\fifo_inst/rptr [0]),
+	.F(\fifo_inst/wfull_val_7 )
+);
+defparam \fifo_inst/wfull_val_s3 .INIT=16'h1428;
+LUT3 \fifo_inst/wfull_val1_s9  (
+	.I0(\fifo_inst/wfull_val1_3 ),
+	.I1(\fifo_inst/wfull_val1_2 ),
+	.I2(\fifo_inst/wfull_val1_0 ),
+	.F(\fifo_inst/wfull_val1 )
+);
+defparam \fifo_inst/wfull_val1_s9 .INIT=8'hAC;
+LUT3 \fifo_inst/wfull_val1_s10  (
+	.I0(\fifo_inst/wfull_val_7 ),
+	.I1(\fifo_inst/wfull_val1_0 ),
+	.I2(\fifo_inst/reset_w [1]),
+	.F(\fifo_inst/wfull_val1_0 )
+);
+defparam \fifo_inst/wfull_val1_s10 .INIT=8'h0E;
+LUT3 \fifo_inst/Full_d_s  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.F(Full)
+);
+defparam \fifo_inst/Full_d_s .INIT=8'hAC;
+LUT3 \fifo_inst/Full_s8  (
+	.I0(\fifo_inst/wfull_val_7 ),
+	.I1(\fifo_inst/Full_1 ),
+	.I2(\fifo_inst/reset_w [1]),
+	.F(\fifo_inst/Full_1 )
+);
+defparam \fifo_inst/Full_s8 .INIT=8'h0E;
+LUT3 \fifo_inst/rbin_num_next_0_s5  (
+	.I0(Empty),
+	.I1(RdEn),
+	.I2(\fifo_inst/rbin_num [0]),
+	.F(\fifo_inst/rbin_num_next [0])
+);
+defparam \fifo_inst/rbin_num_next_0_s5 .INIT=8'hB4;
+LUT3 \fifo_inst/rbin_num_next_1_s2  (
+	.I0(\fifo_inst/rbin_num_next [0]),
+	.I1(\fifo_inst/rbin_num [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/rbin_num_next [1])
+);
+defparam \fifo_inst/rbin_num_next_1_s2 .INIT=8'hB4;
+LUT2 \fifo_inst/Equal.wbinnext_0_s3  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.F(\fifo_inst/Equal.wbinnext_0_7 )
+);
+defparam \fifo_inst/Equal.wbinnext_0_s3 .INIT=4'h6;
+LUT3 \fifo_inst/Equal.wbinnext_1_s2  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.I2(\fifo_inst/wptr [1]),
+	.F(\fifo_inst/Equal.wbinnext [1])
+);
+defparam \fifo_inst/Equal.wbinnext_1_s2 .INIT=8'h78;
+LUT4 \fifo_inst/rempty_val_s4  (
+	.I0(\fifo_inst/Equal.rq2_wptr [0]),
+	.I1(\fifo_inst/Equal.rq2_wptr [1]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.I3(\fifo_inst/rbin_num [0]),
+	.F(\fifo_inst/rempty_val_8 )
+);
+defparam \fifo_inst/rempty_val_s4 .INIT=16'h871E;
+DFFP \fifo_inst/reset_r_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [0])
+);
+defparam \fifo_inst/reset_r_0_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_1_s0  (
+	.D(\fifo_inst/reset_w [0]),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [1])
+);
+defparam \fifo_inst/reset_w_1_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [0])
+);
+defparam \fifo_inst/reset_w_0_s0 .INIT=1'b1;
+DFFC \fifo_inst/rbin_num_1_s0  (
+	.D(\fifo_inst/rbin_num_next [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [1])
+);
+defparam \fifo_inst/rbin_num_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_0_s0  (
+	.D(\fifo_inst/rbin_num_next [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [0])
+);
+defparam \fifo_inst/rbin_num_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_1_s0  (
+	.D(\fifo_inst/wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [1])
+);
+defparam \fifo_inst/Equal.rq1_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_0_s0  (
+	.D(\fifo_inst/wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [0])
+);
+defparam \fifo_inst/Equal.rq1_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_1_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [1])
+);
+defparam \fifo_inst/Equal.rq2_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_0_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [0])
+);
+defparam \fifo_inst/Equal.rq2_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_0_s0  (
+	.D(\fifo_inst/Equal.rgraynext [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [0])
+);
+defparam \fifo_inst/rptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_1_s0  (
+	.D(\fifo_inst/Equal.wbinnext [1]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [1])
+);
+defparam \fifo_inst/wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_0_s0  (
+	.D(\fifo_inst/Equal.wgraynext [0]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [0])
+);
+defparam \fifo_inst/wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_0_s0  (
+	.D(\fifo_inst/Equal.wbinnext_0_7 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [0])
+);
+defparam \fifo_inst/Equal.wbin_0_s0 .INIT=1'b0;
+DFFP \fifo_inst/Empty_s0  (
+	.D(\fifo_inst/rempty_val ),
+	.CLK(RdClk),
+	.PRESET(\fifo_inst/reset_r [1]),
+	.Q(Empty)
+);
+defparam \fifo_inst/Empty_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_r_1_s0  (
+	.D(\fifo_inst/reset_r [0]),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [1])
+);
+defparam \fifo_inst/reset_r_1_s0 .INIT=1'b1;
+DFFC \fifo_inst/wfull_val1_s0  (
+	.D(\fifo_inst/wfull_val_7 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wfull_val1_2 )
+);
+defparam \fifo_inst/wfull_val1_s0 .INIT=1'b0;
+DFFP \fifo_inst/wfull_val1_s1  (
+	.D(\fifo_inst/wfull_val_7 ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n457_4 ),
+	.Q(\fifo_inst/wfull_val1_3 )
+);
+defparam \fifo_inst/wfull_val1_s1 .INIT=1'b1;
+DFFC \fifo_inst/Full_s0  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Full_1_2 )
+);
+defparam \fifo_inst/Full_s0 .INIT=1'b0;
+DFFP \fifo_inst/Full_s1  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n457_4 ),
+	.Q(\fifo_inst/Full_2 )
+);
+defparam \fifo_inst/Full_s1 .INIT=1'b1;
+SDPB \fifo_inst/Equal.mem_Equal.mem_0_0_s  (
+	.CLKA(WrClk),
+	.CEA(\fifo_inst/n20_5 ),
+	.RESETA(GND),
+	.CLKB(RdClk),
+	.CEB(\fifo_inst/n26_4 ),
+	.RESETB(\fifo_inst/reset_r [1]),
+	.OCE(GND),
+	.BLKSELA({GND, GND, GND}),
+	.BLKSELB({GND, GND, GND}),
+	.DI({Data[31:0]}),
+	.ADA({GND, GND, GND, GND, GND, GND, GND, GND, \fifo_inst/Equal.wbin [0], GND, VCC, VCC, VCC, VCC}),
+	.ADB({GND, GND, GND, GND, GND, GND, GND, GND, \fifo_inst/rbin_num_next [0], GND, GND, GND, GND, GND}),
+	.DO({Q[31:0]})
+);
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .READ_MODE=1'b0;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_0=32;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_1=32;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .RESET_MODE="ASYNC";
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_0=3'b000;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_1=3'b000;
+SDPB \fifo_inst/Equal.mem_Equal.mem_0_1_s  (
+	.CLKA(WrClk),
+	.CEA(\fifo_inst/n20_5 ),
+	.RESETA(GND),
+	.CLKB(RdClk),
+	.CEB(\fifo_inst/n26_4 ),
+	.RESETB(\fifo_inst/reset_r [1]),
+	.OCE(GND),
+	.BLKSELA({GND, GND, GND}),
+	.BLKSELB({GND, GND, GND}),
+	.DI({Data[63:32]}),
+	.ADA({GND, GND, GND, GND, GND, GND, GND, GND, \fifo_inst/Equal.wbin [0], GND, VCC, VCC, VCC, VCC}),
+	.ADB({GND, GND, GND, GND, GND, GND, GND, GND, \fifo_inst/rbin_num_next [0], GND, GND, GND, GND, GND}),
+	.DO({Q[63:32]})
+);
+defparam \fifo_inst/Equal.mem_Equal.mem_0_1_s .READ_MODE=1'b0;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_1_s .BIT_WIDTH_0=32;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_1_s .BIT_WIDTH_1=32;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_1_s .RESET_MODE="ASYNC";
+defparam \fifo_inst/Equal.mem_Equal.mem_0_1_s .BLK_SEL_0=3'b000;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_1_s .BLK_SEL_1=3'b000;
+INV \fifo_inst/n4_s2  (
+	.I(RdClk),
+	.O(\fifo_inst/n4_6 )
+);
+INV \fifo_inst/n9_s2  (
+	.I(WrClk),
+	.O(\fifo_inst/n9_6 )
+);
+endmodule

+ 24 - 0
src/src/WrapFifoChain/FifoDDS/FifoDDS_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:06:49 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoDDS your_instance_name(
+		.Data(Data_i), //input [63: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 [63:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 20 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FIFOHS.prj

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW1N-9" package="PBGA256" speed="6" partNumber="GW1N-LV9PG256C6/I5"/>
+    <FileList>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data"/>
+        <Option type="include_path" value="C:/Projects/QuestaProjects/main_tb/fifo_hs/FifoDDS/temp/FIFOHS"/>
+        <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>

+ 45 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS.log

@@ -0,0 +1,45 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Analyzing included file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\static_macro_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Compiling module 'FifoDDS'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":4)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+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
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoDDS\temp\FIFOHS\FifoDDS.vg" completed
+Generate template file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoDDS\temp\FIFOHS\FifoDDS_tmp.v" completed
+[100%] Generate report file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoDDS\temp\FIFOHS\FifoDDS_syn.rpt.html" completed
+GowinSynthesis finish

+ 199 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS.vg

@@ -0,0 +1,199 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:06:49 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+bhm5ZxuHD5fe6lKy2Dq5AwHxacJ1cWMwBMX9H8GmdL4lnDV2AKUKXoXHJPX5qkh7Ng/EuDXlf3tq
+XgChMGXHxhGKlXwTDGbPZ7rg+R+CLwCXNxLjHDLHZj7jAwx16WNjn6S5gfS7ZWNO/UifNMSnMT3R
+m/cUTYMLIkyS4qXtYi2xztDEhzoau2SQnLDGMrABROuNOwwpPJPYPMCZrpYnUTE9prjojUwFQhnT
+aNSO4thTEH7/k6gA0a1Hr9Kwu6d3XW6q2dZH78mYOaedKNxNSU95OsQ/GrR3fobX7P5Bxrf3upgd
+Xs0Rq7KS+nMjcFcl7E3CRA+0+XO4iCSxRkS+iA==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=7024)
+`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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
+yLUXcvMsVv4bPZxPFw==
+`pragma protect end_protected
+module FifoDDS (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [63:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [63:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.FifoDDS  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[63:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[63:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoDDS */

Plik diff jest za duży
+ 1300 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS_syn.rpt.html


+ 46 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS_syn_resource.html

@@ -0,0 +1,46 @@
+<!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>
+<th class="label">ROM16 NUMBER</th>
+</tr>
+<tr>
+<td class="label">FifoDDS (C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v)</td>
+<td align = "center">19</td>
+<td align = "center">-</td>
+<td align = "center">18</td>
+<td align = "center">-</td>
+<td align = "center">2</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="FifoDDS" Register="19" Lut="18" Bsram="2" T_Register="19(19)" T_Lut="18(18)" T_Bsram="2(2)"/>

+ 24 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/FifoDDS_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:06:49 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoDDS your_instance_name(
+		.Data(Data_i), //input [63: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 [63:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 5 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/fifo_define.v

@@ -0,0 +1,5 @@
+`define module_name FifoDDS
+`define EBR_BASED
+`define FWFT
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/fifo_parameter.v

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

+ 1 - 0
src/src/WrapFifoChain/FifoDDS/temp/FIFOHS/project.ini

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

+ 35 - 0
src/src/WrapFifoChain/FifoLMX/FifoLMX.ipc

@@ -0,0 +1,35 @@
+[General]
+ipc_version=4
+file=FifoLMX
+module=FifoLMX
+target_device=gw1n9-014
+type=fifo_hs
+version=1.0
+
+[Config]
+AlmostEmptyFlag=false
+AlmostEmptyFlagItem=Empty_Single Threshold Constant Parameter
+AlmostFullFlag=false
+AlmostFullFlagItem=Full_Single Threshold Constant Parameter
+BSRAM=true
+ControlledByRdEn=false
+ECCSelected=false
+EmptyClear=1
+EmptySet=1
+EnReset=true
+FirstWordFallThrough=true
+FullClear=1
+FullSet=1
+LANG=0
+OutputRegistersSelected=false
+REG=false
+ReadDataNum=false
+ReadDataWidth=24
+ReadDepth=16
+ResetSynchronization=true
+SSRAM=false
+StandardFIFO=false
+Synthesis_tool=GowinSynthesis
+WriteDataNum=false
+WriteDataWidth=24
+WriteDepth=16

+ 304 - 0
src/src/WrapFifoChain/FifoLMX/FifoLMX.v

@@ -0,0 +1,304 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:07:21 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+CQcsRTWNeKG9A5gO3GdSoNvW9zYr3PmooBz3vJJYrHFkazaqmvxtJGKC4UGygBk8vXE1NIKCzrix
+ts+4g61KOHhd4DYNMOb3HmV2I8s6SwAwCtu3mmY7S4+o5MuyzYTpV9YtKBoZ5ym6957lrUY9d1Be
+l7oLPcGOtiL/0cFFmy2gn3xaI84cJbhlR21C0bH47TYv5uDNGJlHNQKdqgZBDsKL3HQYCIYwveIM
+wqd3+uZjlD1zeWl08Z045RPP/iKAfoW8j34G5ZM1sLye6hjUb1N3OsyAZP+JXOeDgZ+OW1OVwvuI
+Eeo9r6zKZBCzzoX/vEjCCVRH/vbTUoQQ9buY6g==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=13040)
+`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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
+`pragma protect end_protected
+module FifoLMX (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [23:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [23:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.FifoLMX  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[23:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[23:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoLMX */

+ 681 - 0
src/src/WrapFifoChain/FifoLMX/FifoLMX.vo

@@ -0,0 +1,681 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Post-PnR Simulation Model file
+//Tool Version: V1.9.9.02
+//Created Time: Thu Apr 25 16:07:21 2024
+
+`timescale 100 ps/100 ps
+module FifoLMX(
+	Data,
+	Reset,
+	WrClk,
+	RdClk,
+	WrEn,
+	RdEn,
+	Q,
+	Empty,
+	Full
+);
+input [23:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [23:0] Q;
+output Empty;
+output Full;
+wire [23:0] Data;
+wire Empty;
+wire Full;
+wire GND;
+wire [23:0] Q;
+wire RdClk;
+wire RdEn;
+wire Reset;
+wire VCC;
+wire WrClk;
+wire WrEn;
+wire \fifo_inst/n23_5 ;
+wire \fifo_inst/n29_4 ;
+wire \fifo_inst/wfull_val ;
+wire \fifo_inst/n371_4 ;
+wire \fifo_inst/wfull_val1 ;
+wire \fifo_inst/wfull_val1_0 ;
+wire \fifo_inst/Full_1 ;
+wire \fifo_inst/Equal.wbinnext_0_7 ;
+wire \fifo_inst/Equal.rgraynext_1_4 ;
+wire \fifo_inst/Equal.wgraynext_1_4 ;
+wire \fifo_inst/Equal.wgraynext_2_4 ;
+wire \fifo_inst/Equal.wgraynext_3_4 ;
+wire \fifo_inst/wfull_val_4 ;
+wire \fifo_inst/wfull_val_5 ;
+wire \fifo_inst/n371_5 ;
+wire \fifo_inst/wfull_val1_16 ;
+wire \fifo_inst/Full_11 ;
+wire \fifo_inst/rempty_val ;
+wire \fifo_inst/wfull_val1_2 ;
+wire \fifo_inst/wfull_val1_3 ;
+wire \fifo_inst/Full_1_2 ;
+wire \fifo_inst/Full_2 ;
+wire \fifo_inst/n130_1_SUM ;
+wire \fifo_inst/n130_3 ;
+wire \fifo_inst/n131_1_SUM ;
+wire \fifo_inst/n131_3 ;
+wire \fifo_inst/n132_1_SUM ;
+wire \fifo_inst/n132_3 ;
+wire \fifo_inst/n133_1_SUM ;
+wire \fifo_inst/n133_3 ;
+wire \fifo_inst/n4_6 ;
+wire \fifo_inst/n9_6 ;
+wire [3:0] \fifo_inst/Equal.rgraynext ;
+wire [3:0] \fifo_inst/Equal.wgraynext ;
+wire [4:0] \fifo_inst/rbin_num_next ;
+wire [4:1] \fifo_inst/Equal.wbinnext ;
+wire [1:0] \fifo_inst/reset_r ;
+wire [1:0] \fifo_inst/reset_w ;
+wire [4:0] \fifo_inst/rbin_num ;
+wire [4:0] \fifo_inst/Equal.rq1_wptr ;
+wire [4:0] \fifo_inst/Equal.rq2_wptr ;
+wire [3:0] \fifo_inst/rptr ;
+wire [4:0] \fifo_inst/wptr ;
+wire [3:0] \fifo_inst/Equal.wbin ;
+wire [31:24] \fifo_inst/DO ;
+VCC VCC_cZ (
+  .V(VCC)
+);
+GND GND_cZ (
+  .G(GND)
+);
+GSR GSR (
+	.GSRI(VCC)
+);
+LUT4 \fifo_inst/n23_s1  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.I3(WrEn),
+	.F(\fifo_inst/n23_5 )
+);
+defparam \fifo_inst/n23_s1 .INIT=16'h5300;
+LUT3 \fifo_inst/n29_s1  (
+	.I0(RdEn),
+	.I1(Empty),
+	.I2(\fifo_inst/rempty_val ),
+	.F(\fifo_inst/n29_4 )
+);
+defparam \fifo_inst/n29_s1 .INIT=8'h0E;
+LUT3 \fifo_inst/Equal.rgraynext_1_s0  (
+	.I0(\fifo_inst/Equal.rgraynext_1_4 ),
+	.I1(\fifo_inst/rbin_num_next [1]),
+	.I2(\fifo_inst/rbin_num [2]),
+	.F(\fifo_inst/Equal.rgraynext [1])
+);
+defparam \fifo_inst/Equal.rgraynext_1_s0 .INIT=8'h1E;
+LUT3 \fifo_inst/Equal.rgraynext_2_s0  (
+	.I0(\fifo_inst/Equal.rgraynext_1_4 ),
+	.I1(\fifo_inst/rbin_num [2]),
+	.I2(\fifo_inst/rbin_num [3]),
+	.F(\fifo_inst/Equal.rgraynext [2])
+);
+defparam \fifo_inst/Equal.rgraynext_2_s0 .INIT=8'h1E;
+LUT4 \fifo_inst/Equal.rgraynext_3_s0  (
+	.I0(\fifo_inst/Equal.rgraynext_1_4 ),
+	.I1(\fifo_inst/rbin_num [2]),
+	.I2(\fifo_inst/rbin_num [3]),
+	.I3(\fifo_inst/rbin_num [4]),
+	.F(\fifo_inst/Equal.rgraynext [3])
+);
+defparam \fifo_inst/Equal.rgraynext_3_s0 .INIT=16'h07F8;
+LUT3 \fifo_inst/Equal.wgraynext_0_s0  (
+	.I0(\fifo_inst/n23_5 ),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.I2(\fifo_inst/Equal.wbin [1]),
+	.F(\fifo_inst/Equal.wgraynext [0])
+);
+defparam \fifo_inst/Equal.wgraynext_0_s0 .INIT=8'h1E;
+LUT4 \fifo_inst/Equal.wgraynext_1_s0  (
+	.I0(Full),
+	.I1(\fifo_inst/Equal.wgraynext_1_4 ),
+	.I2(\fifo_inst/Equal.wbin [1]),
+	.I3(\fifo_inst/Equal.wbin [2]),
+	.F(\fifo_inst/Equal.wgraynext [1])
+);
+defparam \fifo_inst/Equal.wgraynext_1_s0 .INIT=16'h0BF4;
+LUT4 \fifo_inst/Equal.wgraynext_2_s0  (
+	.I0(Full),
+	.I1(\fifo_inst/Equal.wgraynext_2_4 ),
+	.I2(\fifo_inst/Equal.wbin [2]),
+	.I3(\fifo_inst/Equal.wbin [3]),
+	.F(\fifo_inst/Equal.wgraynext [2])
+);
+defparam \fifo_inst/Equal.wgraynext_2_s0 .INIT=16'h0BF4;
+LUT4 \fifo_inst/Equal.wgraynext_3_s0  (
+	.I0(Full),
+	.I1(\fifo_inst/Equal.wgraynext_3_4 ),
+	.I2(\fifo_inst/Equal.wbin [3]),
+	.I3(\fifo_inst/wptr [4]),
+	.F(\fifo_inst/Equal.wgraynext [3])
+);
+defparam \fifo_inst/Equal.wgraynext_3_s0 .INIT=16'h0BF4;
+LUT4 \fifo_inst/wfull_val_s0  (
+	.I0(\fifo_inst/wptr [4]),
+	.I1(\fifo_inst/rbin_num [4]),
+	.I2(\fifo_inst/wfull_val_4 ),
+	.I3(\fifo_inst/wfull_val_5 ),
+	.F(\fifo_inst/wfull_val )
+);
+defparam \fifo_inst/wfull_val_s0 .INIT=16'h6000;
+LUT3 \fifo_inst/n371_s1  (
+	.I0(\fifo_inst/wfull_val_4 ),
+	.I1(\fifo_inst/wfull_val_5 ),
+	.I2(\fifo_inst/n371_5 ),
+	.F(\fifo_inst/n371_4 )
+);
+defparam \fifo_inst/n371_s1 .INIT=8'h80;
+LUT3 \fifo_inst/wfull_val1_s9  (
+	.I0(\fifo_inst/wfull_val1_3 ),
+	.I1(\fifo_inst/wfull_val1_2 ),
+	.I2(\fifo_inst/wfull_val1_0 ),
+	.F(\fifo_inst/wfull_val1 )
+);
+defparam \fifo_inst/wfull_val1_s9 .INIT=8'hAC;
+LUT4 \fifo_inst/wfull_val1_s10  (
+	.I0(\fifo_inst/wfull_val_5 ),
+	.I1(\fifo_inst/n371_5 ),
+	.I2(\fifo_inst/wfull_val_4 ),
+	.I3(\fifo_inst/wfull_val1_16 ),
+	.F(\fifo_inst/wfull_val1_0 )
+);
+defparam \fifo_inst/wfull_val1_s10 .INIT=16'hFF80;
+LUT3 \fifo_inst/Full_d_s  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.F(Full)
+);
+defparam \fifo_inst/Full_d_s .INIT=8'hAC;
+LUT4 \fifo_inst/Full_s8  (
+	.I0(\fifo_inst/wfull_val_5 ),
+	.I1(\fifo_inst/n371_5 ),
+	.I2(\fifo_inst/wfull_val_4 ),
+	.I3(\fifo_inst/Full_11 ),
+	.F(\fifo_inst/Full_1 )
+);
+defparam \fifo_inst/Full_s8 .INIT=16'hFF80;
+LUT3 \fifo_inst/rbin_num_next_0_s5  (
+	.I0(Empty),
+	.I1(RdEn),
+	.I2(\fifo_inst/rbin_num [0]),
+	.F(\fifo_inst/rbin_num_next [0])
+);
+defparam \fifo_inst/rbin_num_next_0_s5 .INIT=8'hB4;
+LUT4 \fifo_inst/rbin_num_next_1_s5  (
+	.I0(Empty),
+	.I1(RdEn),
+	.I2(\fifo_inst/rbin_num [0]),
+	.I3(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/rbin_num_next [1])
+);
+defparam \fifo_inst/rbin_num_next_1_s5 .INIT=16'hBF40;
+LUT2 \fifo_inst/rbin_num_next_2_s5  (
+	.I0(\fifo_inst/Equal.rgraynext_1_4 ),
+	.I1(\fifo_inst/rbin_num [2]),
+	.F(\fifo_inst/rbin_num_next [2])
+);
+defparam \fifo_inst/rbin_num_next_2_s5 .INIT=4'h6;
+LUT3 \fifo_inst/rbin_num_next_3_s5  (
+	.I0(\fifo_inst/Equal.rgraynext_1_4 ),
+	.I1(\fifo_inst/rbin_num [2]),
+	.I2(\fifo_inst/rbin_num [3]),
+	.F(\fifo_inst/rbin_num_next [3])
+);
+defparam \fifo_inst/rbin_num_next_3_s5 .INIT=8'h78;
+LUT4 \fifo_inst/rbin_num_next_4_s2  (
+	.I0(\fifo_inst/Equal.rgraynext_1_4 ),
+	.I1(\fifo_inst/rbin_num [2]),
+	.I2(\fifo_inst/rbin_num [3]),
+	.I3(\fifo_inst/rbin_num [4]),
+	.F(\fifo_inst/rbin_num_next [4])
+);
+defparam \fifo_inst/rbin_num_next_4_s2 .INIT=16'h7F80;
+LUT2 \fifo_inst/Equal.wbinnext_0_s3  (
+	.I0(\fifo_inst/n23_5 ),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.F(\fifo_inst/Equal.wbinnext_0_7 )
+);
+defparam \fifo_inst/Equal.wbinnext_0_s3 .INIT=4'h6;
+LUT3 \fifo_inst/Equal.wbinnext_2_s3  (
+	.I0(Full),
+	.I1(\fifo_inst/Equal.wgraynext_2_4 ),
+	.I2(\fifo_inst/Equal.wbin [2]),
+	.F(\fifo_inst/Equal.wbinnext [2])
+);
+defparam \fifo_inst/Equal.wbinnext_2_s3 .INIT=8'hB4;
+LUT3 \fifo_inst/Equal.wbinnext_3_s3  (
+	.I0(Full),
+	.I1(\fifo_inst/Equal.wgraynext_3_4 ),
+	.I2(\fifo_inst/Equal.wbin [3]),
+	.F(\fifo_inst/Equal.wbinnext [3])
+);
+defparam \fifo_inst/Equal.wbinnext_3_s3 .INIT=8'hB4;
+LUT4 \fifo_inst/Equal.wbinnext_4_s2  (
+	.I0(Full),
+	.I1(\fifo_inst/Equal.wgraynext_3_4 ),
+	.I2(\fifo_inst/Equal.wbin [3]),
+	.I3(\fifo_inst/wptr [4]),
+	.F(\fifo_inst/Equal.wbinnext [4])
+);
+defparam \fifo_inst/Equal.wbinnext_4_s2 .INIT=16'hBF40;
+LUT4 \fifo_inst/Equal.rgraynext_1_s1  (
+	.I0(Empty),
+	.I1(RdEn),
+	.I2(\fifo_inst/rbin_num [0]),
+	.I3(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/Equal.rgraynext_1_4 )
+);
+defparam \fifo_inst/Equal.rgraynext_1_s1 .INIT=16'h4000;
+LUT2 \fifo_inst/Equal.wgraynext_1_s1  (
+	.I0(WrEn),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.F(\fifo_inst/Equal.wgraynext_1_4 )
+);
+defparam \fifo_inst/Equal.wgraynext_1_s1 .INIT=4'h8;
+LUT3 \fifo_inst/Equal.wgraynext_2_s1  (
+	.I0(WrEn),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.I2(\fifo_inst/Equal.wbin [1]),
+	.F(\fifo_inst/Equal.wgraynext_2_4 )
+);
+defparam \fifo_inst/Equal.wgraynext_2_s1 .INIT=8'h80;
+LUT4 \fifo_inst/Equal.wgraynext_3_s1  (
+	.I0(WrEn),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.I2(\fifo_inst/Equal.wbin [1]),
+	.I3(\fifo_inst/Equal.wbin [2]),
+	.F(\fifo_inst/Equal.wgraynext_3_4 )
+);
+defparam \fifo_inst/Equal.wgraynext_3_s1 .INIT=16'h8000;
+LUT4 \fifo_inst/wfull_val_s1  (
+	.I0(\fifo_inst/wptr [0]),
+	.I1(\fifo_inst/rptr [0]),
+	.I2(\fifo_inst/wptr [1]),
+	.I3(\fifo_inst/rptr [1]),
+	.F(\fifo_inst/wfull_val_4 )
+);
+defparam \fifo_inst/wfull_val_s1 .INIT=16'h9009;
+LUT4 \fifo_inst/wfull_val_s2  (
+	.I0(\fifo_inst/wptr [2]),
+	.I1(\fifo_inst/rptr [2]),
+	.I2(\fifo_inst/wptr [3]),
+	.I3(\fifo_inst/rptr [3]),
+	.F(\fifo_inst/wfull_val_5 )
+);
+defparam \fifo_inst/wfull_val_s2 .INIT=16'h0990;
+LUT3 \fifo_inst/n371_s2  (
+	.I0(\fifo_inst/reset_w [1]),
+	.I1(\fifo_inst/wptr [4]),
+	.I2(\fifo_inst/rbin_num [4]),
+	.F(\fifo_inst/n371_5 )
+);
+defparam \fifo_inst/n371_s2 .INIT=8'h14;
+LUT2 \fifo_inst/wfull_val1_s11  (
+	.I0(\fifo_inst/reset_w [1]),
+	.I1(\fifo_inst/wfull_val1_0 ),
+	.F(\fifo_inst/wfull_val1_16 )
+);
+defparam \fifo_inst/wfull_val1_s11 .INIT=4'h4;
+LUT2 \fifo_inst/Full_s9  (
+	.I0(\fifo_inst/reset_w [1]),
+	.I1(\fifo_inst/Full_1 ),
+	.F(\fifo_inst/Full_11 )
+);
+defparam \fifo_inst/Full_s9 .INIT=4'h4;
+LUT4 \fifo_inst/Equal.wbinnext_1_s4  (
+	.I0(Full),
+	.I1(WrEn),
+	.I2(\fifo_inst/Equal.wbin [0]),
+	.I3(\fifo_inst/Equal.wbin [1]),
+	.F(\fifo_inst/Equal.wbinnext [1])
+);
+defparam \fifo_inst/Equal.wbinnext_1_s4 .INIT=16'hBF40;
+LUT4 \fifo_inst/Equal.rgraynext_0_s1  (
+	.I0(Empty),
+	.I1(RdEn),
+	.I2(\fifo_inst/rbin_num [0]),
+	.I3(\fifo_inst/rbin_num_next [1]),
+	.F(\fifo_inst/Equal.rgraynext [0])
+);
+defparam \fifo_inst/Equal.rgraynext_0_s1 .INIT=16'h4BB4;
+LUT3 \fifo_inst/rempty_val_s2  (
+	.I0(\fifo_inst/rbin_num_next [4]),
+	.I1(\fifo_inst/Equal.rq2_wptr [4]),
+	.I2(\fifo_inst/n133_3 ),
+	.F(\fifo_inst/rempty_val )
+);
+defparam \fifo_inst/rempty_val_s2 .INIT=8'h09;
+DFFP \fifo_inst/reset_r_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [0])
+);
+defparam \fifo_inst/reset_r_0_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_1_s0  (
+	.D(\fifo_inst/reset_w [0]),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [1])
+);
+defparam \fifo_inst/reset_w_1_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [0])
+);
+defparam \fifo_inst/reset_w_0_s0 .INIT=1'b1;
+DFFC \fifo_inst/rbin_num_4_s0  (
+	.D(\fifo_inst/rbin_num_next [4]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [4])
+);
+defparam \fifo_inst/rbin_num_4_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_3_s0  (
+	.D(\fifo_inst/rbin_num_next [3]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [3])
+);
+defparam \fifo_inst/rbin_num_3_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_2_s0  (
+	.D(\fifo_inst/rbin_num_next [2]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [2])
+);
+defparam \fifo_inst/rbin_num_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_1_s0  (
+	.D(\fifo_inst/rbin_num_next [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [1])
+);
+defparam \fifo_inst/rbin_num_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_0_s0  (
+	.D(\fifo_inst/rbin_num_next [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [0])
+);
+defparam \fifo_inst/rbin_num_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_4_s0  (
+	.D(\fifo_inst/wptr [4]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [4])
+);
+defparam \fifo_inst/Equal.rq1_wptr_4_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_3_s0  (
+	.D(\fifo_inst/wptr [3]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [3])
+);
+defparam \fifo_inst/Equal.rq1_wptr_3_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_2_s0  (
+	.D(\fifo_inst/wptr [2]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [2])
+);
+defparam \fifo_inst/Equal.rq1_wptr_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_1_s0  (
+	.D(\fifo_inst/wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [1])
+);
+defparam \fifo_inst/Equal.rq1_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_0_s0  (
+	.D(\fifo_inst/wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [0])
+);
+defparam \fifo_inst/Equal.rq1_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_4_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [4]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [4])
+);
+defparam \fifo_inst/Equal.rq2_wptr_4_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_3_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [3]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [3])
+);
+defparam \fifo_inst/Equal.rq2_wptr_3_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_2_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [2]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [2])
+);
+defparam \fifo_inst/Equal.rq2_wptr_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_1_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [1])
+);
+defparam \fifo_inst/Equal.rq2_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_0_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [0])
+);
+defparam \fifo_inst/Equal.rq2_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_3_s0  (
+	.D(\fifo_inst/Equal.rgraynext [3]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [3])
+);
+defparam \fifo_inst/rptr_3_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_2_s0  (
+	.D(\fifo_inst/Equal.rgraynext [2]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [2])
+);
+defparam \fifo_inst/rptr_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_1_s0  (
+	.D(\fifo_inst/Equal.rgraynext [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [1])
+);
+defparam \fifo_inst/rptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_0_s0  (
+	.D(\fifo_inst/Equal.rgraynext [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [0])
+);
+defparam \fifo_inst/rptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_4_s0  (
+	.D(\fifo_inst/Equal.wbinnext [4]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [4])
+);
+defparam \fifo_inst/wptr_4_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_3_s0  (
+	.D(\fifo_inst/Equal.wgraynext [3]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [3])
+);
+defparam \fifo_inst/wptr_3_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_2_s0  (
+	.D(\fifo_inst/Equal.wgraynext [2]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [2])
+);
+defparam \fifo_inst/wptr_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_1_s0  (
+	.D(\fifo_inst/Equal.wgraynext [1]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [1])
+);
+defparam \fifo_inst/wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_0_s0  (
+	.D(\fifo_inst/Equal.wgraynext [0]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [0])
+);
+defparam \fifo_inst/wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_3_s0  (
+	.D(\fifo_inst/Equal.wbinnext [3]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [3])
+);
+defparam \fifo_inst/Equal.wbin_3_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_2_s0  (
+	.D(\fifo_inst/Equal.wbinnext [2]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [2])
+);
+defparam \fifo_inst/Equal.wbin_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_1_s0  (
+	.D(\fifo_inst/Equal.wbinnext [1]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [1])
+);
+defparam \fifo_inst/Equal.wbin_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_0_s0  (
+	.D(\fifo_inst/Equal.wbinnext_0_7 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [0])
+);
+defparam \fifo_inst/Equal.wbin_0_s0 .INIT=1'b0;
+DFFP \fifo_inst/Empty_s0  (
+	.D(\fifo_inst/rempty_val ),
+	.CLK(RdClk),
+	.PRESET(\fifo_inst/reset_r [1]),
+	.Q(Empty)
+);
+defparam \fifo_inst/Empty_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_r_1_s0  (
+	.D(\fifo_inst/reset_r [0]),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [1])
+);
+defparam \fifo_inst/reset_r_1_s0 .INIT=1'b1;
+DFFC \fifo_inst/wfull_val1_s0  (
+	.D(\fifo_inst/wfull_val ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wfull_val1_2 )
+);
+defparam \fifo_inst/wfull_val1_s0 .INIT=1'b0;
+DFFP \fifo_inst/wfull_val1_s1  (
+	.D(\fifo_inst/wfull_val ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n371_4 ),
+	.Q(\fifo_inst/wfull_val1_3 )
+);
+defparam \fifo_inst/wfull_val1_s1 .INIT=1'b1;
+DFFC \fifo_inst/Full_s0  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Full_1_2 )
+);
+defparam \fifo_inst/Full_s0 .INIT=1'b0;
+DFFP \fifo_inst/Full_s1  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n371_4 ),
+	.Q(\fifo_inst/Full_2 )
+);
+defparam \fifo_inst/Full_s1 .INIT=1'b1;
+SDPB \fifo_inst/Equal.mem_Equal.mem_0_0_s  (
+	.CLKA(WrClk),
+	.CEA(\fifo_inst/n23_5 ),
+	.RESETA(GND),
+	.CLKB(RdClk),
+	.CEB(\fifo_inst/n29_4 ),
+	.RESETB(\fifo_inst/reset_r [1]),
+	.OCE(GND),
+	.BLKSELA({GND, GND, GND}),
+	.BLKSELB({GND, GND, GND}),
+	.DI({GND, GND, GND, GND, GND, GND, GND, GND, Data[23:0]}),
+	.ADA({GND, GND, GND, GND, GND, \fifo_inst/Equal.wbin [3:0], GND, VCC, VCC, VCC, VCC}),
+	.ADB({GND, GND, GND, GND, GND, \fifo_inst/rbin_num_next [3:0], GND, GND, GND, GND, GND}),
+	.DO({\fifo_inst/DO [31:24], Q[23:0]})
+);
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .READ_MODE=1'b0;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_0=32;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_1=32;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .RESET_MODE="ASYNC";
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_0=3'b000;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_1=3'b000;
+ALU \fifo_inst/n130_s0  (
+	.I0(\fifo_inst/Equal.rgraynext [0]),
+	.I1(\fifo_inst/Equal.rq2_wptr [0]),
+	.I3(GND),
+	.CIN(GND),
+	.COUT(\fifo_inst/n130_3 ),
+	.SUM(\fifo_inst/n130_1_SUM )
+);
+defparam \fifo_inst/n130_s0 .ALU_MODE=3;
+ALU \fifo_inst/n131_s0  (
+	.I0(\fifo_inst/Equal.rgraynext [1]),
+	.I1(\fifo_inst/Equal.rq2_wptr [1]),
+	.I3(GND),
+	.CIN(\fifo_inst/n130_3 ),
+	.COUT(\fifo_inst/n131_3 ),
+	.SUM(\fifo_inst/n131_1_SUM )
+);
+defparam \fifo_inst/n131_s0 .ALU_MODE=3;
+ALU \fifo_inst/n132_s0  (
+	.I0(\fifo_inst/Equal.rgraynext [2]),
+	.I1(\fifo_inst/Equal.rq2_wptr [2]),
+	.I3(GND),
+	.CIN(\fifo_inst/n131_3 ),
+	.COUT(\fifo_inst/n132_3 ),
+	.SUM(\fifo_inst/n132_1_SUM )
+);
+defparam \fifo_inst/n132_s0 .ALU_MODE=3;
+ALU \fifo_inst/n133_s0  (
+	.I0(\fifo_inst/Equal.rgraynext [3]),
+	.I1(\fifo_inst/Equal.rq2_wptr [3]),
+	.I3(GND),
+	.CIN(\fifo_inst/n132_3 ),
+	.COUT(\fifo_inst/n133_3 ),
+	.SUM(\fifo_inst/n133_1_SUM )
+);
+defparam \fifo_inst/n133_s0 .ALU_MODE=3;
+INV \fifo_inst/n4_s2  (
+	.I(RdClk),
+	.O(\fifo_inst/n4_6 )
+);
+INV \fifo_inst/n9_s2  (
+	.I(WrClk),
+	.O(\fifo_inst/n9_6 )
+);
+endmodule

+ 24 - 0
src/src/WrapFifoChain/FifoLMX/FifoLMX_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:07:21 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoLMX 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
+		.Q(Q_o), //output [23:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 20 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FIFOHS.prj

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW1N-9" package="PBGA256" speed="6" partNumber="GW1N-LV9PG256C6/I5"/>
+    <FileList>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data"/>
+        <Option type="include_path" value="C:/Projects/QuestaProjects/main_tb/fifo_hs/FifoLMX/temp/FIFOHS"/>
+        <Option type="output_file" value="FifoLMX.vg"/>
+        <Option type="output_template" value="FifoLMX_tmp.v"/>
+        <Option type="ram_balance" value="1"/>
+        <Option type="ram_rw_check" value="1"/>
+        <Option type="verilog_language" value="sysv-2017"/>
+    </OptionList>
+</Project>

+ 45 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX.log

@@ -0,0 +1,45 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Analyzing included file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\static_macro_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Compiling module 'FifoLMX'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":4)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+NOTE  (EX0101) : Current top module is "FifoLMX"
+[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
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoLMX\temp\FIFOHS\FifoLMX.vg" completed
+Generate template file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoLMX\temp\FIFOHS\FifoLMX_tmp.v" completed
+[100%] Generate report file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoLMX\temp\FIFOHS\FifoLMX_syn.rpt.html" completed
+GowinSynthesis finish

+ 304 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX.vg

@@ -0,0 +1,304 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:07:21 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+CQcsRTWNeKG9A5gO3GdSoNvW9zYr3PmooBz3vJJYrHFkazaqmvxtJGKC4UGygBk8vXE1NIKCzrix
+ts+4g61KOHhd4DYNMOb3HmV2I8s6SwAwCtu3mmY7S4+o5MuyzYTpV9YtKBoZ5ym6957lrUY9d1Be
+l7oLPcGOtiL/0cFFmy2gn3xaI84cJbhlR21C0bH47TYv5uDNGJlHNQKdqgZBDsKL3HQYCIYwveIM
+wqd3+uZjlD1zeWl08Z045RPP/iKAfoW8j34G5ZM1sLye6hjUb1N3OsyAZP+JXOeDgZ+OW1OVwvuI
+Eeo9r6zKZBCzzoX/vEjCCVRH/vbTUoQQ9buY6g==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=13040)
+`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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
+`pragma protect end_protected
+module FifoLMX (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [23:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [23:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.FifoLMX  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[23:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[23:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoLMX */

Plik diff jest za duży
+ 1420 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX_syn.rpt.html


+ 46 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX_syn_resource.html

@@ -0,0 +1,46 @@
+<!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>
+<th class="label">ROM16 NUMBER</th>
+</tr>
+<tr>
+<td class="label">FifoLMX (C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v)</td>
+<td align = "center">37</td>
+<td align = "center">4</td>
+<td align = "center">38</td>
+<td align = "center">-</td>
+<td align = "center">1</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="FifoLMX" Register="37" Alu="4" Lut="38" Bsram="1" T_Register="37(37)" T_Alu="4(4)" T_Lut="38(38)" T_Bsram="1(1)"/>

+ 24 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/FifoLMX_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:07:21 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoLMX 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
+		.Q(Q_o), //output [23:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 5 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/fifo_define.v

@@ -0,0 +1,5 @@
+`define module_name FifoLMX
+`define EBR_BASED
+`define FWFT
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/fifo_parameter.v

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

+ 1 - 0
src/src/WrapFifoChain/FifoLMX/temp/FIFOHS/project.ini

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

+ 35 - 0
src/src/WrapFifoChain/FifoMax2870/FifoMax2870.ipc

@@ -0,0 +1,35 @@
+[General]
+ipc_version=4
+file=FifoMax2870
+module=FifoMax2870
+target_device=gw1n9-014
+type=fifo_hs
+version=1.0
+
+[Config]
+AlmostEmptyFlag=false
+AlmostEmptyFlagItem=Empty_Single Threshold Constant Parameter
+AlmostFullFlag=false
+AlmostFullFlagItem=Full_Single Threshold Constant Parameter
+BSRAM=true
+ControlledByRdEn=false
+ECCSelected=false
+EmptyClear=1
+EmptySet=1
+EnReset=true
+FirstWordFallThrough=true
+FullClear=1
+FullSet=1
+LANG=0
+OutputRegistersSelected=false
+REG=false
+ReadDataNum=false
+ReadDataWidth=32
+ReadDepth=4
+ResetSynchronization=true
+SSRAM=false
+StandardFIFO=false
+Synthesis_tool=GowinSynthesis
+WriteDataNum=false
+WriteDataWidth=32
+WriteDepth=4

+ 222 - 0
src/src/WrapFifoChain/FifoMax2870/FifoMax2870.v

@@ -0,0 +1,222 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:07:36 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+Da6ePPXJ0x1Zkr3+qduAM8J+kvtpawq4mD4KNKBETeC4EH7Szs6BzQt56oavp90RuKDAboLkt4Jg
++G92rwctBdMEwq+eB6c7QPHl/H1uRLQVqlR4yx0r3BOVYQPjoymqLzmZv8veGRBC1kdMpZB80yUK
+zmz+xkaf5+Uj2LoGUbWb2pOECph91GIFDeF+RqGJtZTKyt08qFT8oijjiMTL0Xb+qn22EE7E1RFY
+OllWGiYHO4QEEG6qgweiS5shJRiL6+3Pxmw7CJNrKZ/zyFyC0a6pFdp6mTM2DN5SkKBIq/YzyLXr
+XKL3+73PMXlMajN6EcsM4S1BTp7fXxaHLIWB1w==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=8352)
+`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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
+`pragma protect end_protected
+module FifoMax2870 (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [31:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [31: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[31:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[31:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoMax2870 */

+ 457 - 0
src/src/WrapFifoChain/FifoMax2870/FifoMax2870.vo

@@ -0,0 +1,457 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Post-PnR Simulation Model file
+//Tool Version: V1.9.9.02
+//Created Time: Thu Apr 25 16:07:36 2024
+
+`timescale 100 ps/100 ps
+module FifoMax2870(
+	Data,
+	Reset,
+	WrClk,
+	RdClk,
+	WrEn,
+	RdEn,
+	Q,
+	Empty,
+	Full
+);
+input [31:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [31:0] Q;
+output Empty;
+output Full;
+wire [31:0] Data;
+wire Empty;
+wire Full;
+wire GND;
+wire [31:0] Q;
+wire RdClk;
+wire RdEn;
+wire Reset;
+wire VCC;
+wire WrClk;
+wire WrEn;
+wire \fifo_inst/n21_5 ;
+wire \fifo_inst/n27_4 ;
+wire \fifo_inst/wfull_val1 ;
+wire \fifo_inst/wfull_val1_0 ;
+wire \fifo_inst/Full_1 ;
+wire \fifo_inst/Equal.wbinnext_0_7 ;
+wire \fifo_inst/wfull_val_4 ;
+wire \fifo_inst/wfull_val_5 ;
+wire \fifo_inst/n335_6 ;
+wire \fifo_inst/wfull_val ;
+wire \fifo_inst/rempty_val ;
+wire \fifo_inst/wfull_val1_2 ;
+wire \fifo_inst/wfull_val1_3 ;
+wire \fifo_inst/Full_1_2 ;
+wire \fifo_inst/Full_2 ;
+wire \fifo_inst/n158_1_SUM ;
+wire \fifo_inst/n158_3 ;
+wire \fifo_inst/n159_1_SUM ;
+wire \fifo_inst/n159_3 ;
+wire \fifo_inst/n4_6 ;
+wire \fifo_inst/n9_6 ;
+wire [1:0] \fifo_inst/Equal.rgraynext ;
+wire [1:0] \fifo_inst/Equal.wgraynext ;
+wire [2:0] \fifo_inst/rbin_num_next ;
+wire [2:1] \fifo_inst/Equal.wbinnext ;
+wire [1:0] \fifo_inst/reset_r ;
+wire [1:0] \fifo_inst/reset_w ;
+wire [2:0] \fifo_inst/rbin_num ;
+wire [2:0] \fifo_inst/Equal.rq1_wptr ;
+wire [2:0] \fifo_inst/Equal.rq2_wptr ;
+wire [1:0] \fifo_inst/rptr ;
+wire [2:0] \fifo_inst/wptr ;
+wire [1:0] \fifo_inst/Equal.wbin ;
+VCC VCC_cZ (
+  .V(VCC)
+);
+GND GND_cZ (
+  .G(GND)
+);
+GSR GSR (
+	.GSRI(VCC)
+);
+LUT4 \fifo_inst/n21_s1  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.I3(WrEn),
+	.F(\fifo_inst/n21_5 )
+);
+defparam \fifo_inst/n21_s1 .INIT=16'h5300;
+LUT3 \fifo_inst/n27_s1  (
+	.I0(RdEn),
+	.I1(Empty),
+	.I2(\fifo_inst/rempty_val ),
+	.F(\fifo_inst/n27_4 )
+);
+defparam \fifo_inst/n27_s1 .INIT=8'h0E;
+LUT3 \fifo_inst/Equal.rgraynext_0_s0  (
+	.I0(\fifo_inst/rbin_num_next [0]),
+	.I1(\fifo_inst/rbin_num [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/Equal.rgraynext [0])
+);
+defparam \fifo_inst/Equal.rgraynext_0_s0 .INIT=8'h1E;
+LUT4 \fifo_inst/Equal.rgraynext_1_s0  (
+	.I0(\fifo_inst/rbin_num_next [0]),
+	.I1(\fifo_inst/rbin_num [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.I3(\fifo_inst/rbin_num [2]),
+	.F(\fifo_inst/Equal.rgraynext [1])
+);
+defparam \fifo_inst/Equal.rgraynext_1_s0 .INIT=16'h0BF4;
+LUT3 \fifo_inst/Equal.wgraynext_0_s0  (
+	.I0(\fifo_inst/n21_5 ),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.I2(\fifo_inst/Equal.wbin [1]),
+	.F(\fifo_inst/Equal.wgraynext [0])
+);
+defparam \fifo_inst/Equal.wgraynext_0_s0 .INIT=8'h1E;
+LUT4 \fifo_inst/Equal.wgraynext_1_s0  (
+	.I0(\fifo_inst/n21_5 ),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.I2(\fifo_inst/Equal.wbin [1]),
+	.I3(\fifo_inst/wptr [2]),
+	.F(\fifo_inst/Equal.wgraynext [1])
+);
+defparam \fifo_inst/Equal.wgraynext_1_s0 .INIT=16'h07F8;
+LUT3 \fifo_inst/wfull_val1_s9  (
+	.I0(\fifo_inst/wfull_val1_3 ),
+	.I1(\fifo_inst/wfull_val1_2 ),
+	.I2(\fifo_inst/wfull_val1_0 ),
+	.F(\fifo_inst/wfull_val1 )
+);
+defparam \fifo_inst/wfull_val1_s9 .INIT=8'hAC;
+LUT4 \fifo_inst/wfull_val1_s10  (
+	.I0(\fifo_inst/wfull_val_4 ),
+	.I1(\fifo_inst/wfull_val_5 ),
+	.I2(\fifo_inst/wfull_val1_0 ),
+	.I3(\fifo_inst/reset_w [1]),
+	.F(\fifo_inst/wfull_val1_0 )
+);
+defparam \fifo_inst/wfull_val1_s10 .INIT=16'h00F8;
+LUT3 \fifo_inst/Full_d_s  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.F(Full)
+);
+defparam \fifo_inst/Full_d_s .INIT=8'hAC;
+LUT4 \fifo_inst/Full_s8  (
+	.I0(\fifo_inst/wfull_val_4 ),
+	.I1(\fifo_inst/wfull_val_5 ),
+	.I2(\fifo_inst/Full_1 ),
+	.I3(\fifo_inst/reset_w [1]),
+	.F(\fifo_inst/Full_1 )
+);
+defparam \fifo_inst/Full_s8 .INIT=16'h00F8;
+LUT3 \fifo_inst/rbin_num_next_0_s5  (
+	.I0(Empty),
+	.I1(RdEn),
+	.I2(\fifo_inst/rbin_num [0]),
+	.F(\fifo_inst/rbin_num_next [0])
+);
+defparam \fifo_inst/rbin_num_next_0_s5 .INIT=8'hB4;
+LUT3 \fifo_inst/rbin_num_next_1_s5  (
+	.I0(\fifo_inst/rbin_num_next [0]),
+	.I1(\fifo_inst/rbin_num [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/rbin_num_next [1])
+);
+defparam \fifo_inst/rbin_num_next_1_s5 .INIT=8'hB4;
+LUT4 \fifo_inst/rbin_num_next_2_s2  (
+	.I0(\fifo_inst/rbin_num_next [0]),
+	.I1(\fifo_inst/rbin_num [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.I3(\fifo_inst/rbin_num [2]),
+	.F(\fifo_inst/rbin_num_next [2])
+);
+defparam \fifo_inst/rbin_num_next_2_s2 .INIT=16'hBF40;
+LUT2 \fifo_inst/Equal.wbinnext_0_s3  (
+	.I0(\fifo_inst/n21_5 ),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.F(\fifo_inst/Equal.wbinnext_0_7 )
+);
+defparam \fifo_inst/Equal.wbinnext_0_s3 .INIT=4'h6;
+LUT3 \fifo_inst/Equal.wbinnext_1_s3  (
+	.I0(\fifo_inst/n21_5 ),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.I2(\fifo_inst/Equal.wbin [1]),
+	.F(\fifo_inst/Equal.wbinnext [1])
+);
+defparam \fifo_inst/Equal.wbinnext_1_s3 .INIT=8'h78;
+LUT4 \fifo_inst/Equal.wbinnext_2_s2  (
+	.I0(\fifo_inst/n21_5 ),
+	.I1(\fifo_inst/Equal.wbin [0]),
+	.I2(\fifo_inst/Equal.wbin [1]),
+	.I3(\fifo_inst/wptr [2]),
+	.F(\fifo_inst/Equal.wbinnext [2])
+);
+defparam \fifo_inst/Equal.wbinnext_2_s2 .INIT=16'h7F80;
+LUT2 \fifo_inst/wfull_val_s1  (
+	.I0(\fifo_inst/wptr [2]),
+	.I1(\fifo_inst/rbin_num [2]),
+	.F(\fifo_inst/wfull_val_4 )
+);
+defparam \fifo_inst/wfull_val_s1 .INIT=4'h6;
+LUT4 \fifo_inst/wfull_val_s2  (
+	.I0(\fifo_inst/wptr [0]),
+	.I1(\fifo_inst/rptr [0]),
+	.I2(\fifo_inst/wptr [1]),
+	.I3(\fifo_inst/rptr [1]),
+	.F(\fifo_inst/wfull_val_5 )
+);
+defparam \fifo_inst/wfull_val_s2 .INIT=16'h0990;
+LUT4 \fifo_inst/n335_s2  (
+	.I0(\fifo_inst/wptr [2]),
+	.I1(\fifo_inst/rbin_num [2]),
+	.I2(\fifo_inst/reset_w [1]),
+	.I3(\fifo_inst/wfull_val_5 ),
+	.F(\fifo_inst/n335_6 )
+);
+defparam \fifo_inst/n335_s2 .INIT=16'h0600;
+LUT3 \fifo_inst/wfull_val_s3  (
+	.I0(\fifo_inst/wptr [2]),
+	.I1(\fifo_inst/rbin_num [2]),
+	.I2(\fifo_inst/wfull_val_5 ),
+	.F(\fifo_inst/wfull_val )
+);
+defparam \fifo_inst/wfull_val_s3 .INIT=8'h60;
+LUT3 \fifo_inst/rempty_val_s2  (
+	.I0(\fifo_inst/rbin_num_next [2]),
+	.I1(\fifo_inst/Equal.rq2_wptr [2]),
+	.I2(\fifo_inst/n159_3 ),
+	.F(\fifo_inst/rempty_val )
+);
+defparam \fifo_inst/rempty_val_s2 .INIT=8'h09;
+DFFP \fifo_inst/reset_r_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [0])
+);
+defparam \fifo_inst/reset_r_0_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_1_s0  (
+	.D(\fifo_inst/reset_w [0]),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [1])
+);
+defparam \fifo_inst/reset_w_1_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [0])
+);
+defparam \fifo_inst/reset_w_0_s0 .INIT=1'b1;
+DFFC \fifo_inst/rbin_num_2_s0  (
+	.D(\fifo_inst/rbin_num_next [2]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [2])
+);
+defparam \fifo_inst/rbin_num_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_1_s0  (
+	.D(\fifo_inst/rbin_num_next [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [1])
+);
+defparam \fifo_inst/rbin_num_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_0_s0  (
+	.D(\fifo_inst/rbin_num_next [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [0])
+);
+defparam \fifo_inst/rbin_num_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_2_s0  (
+	.D(\fifo_inst/wptr [2]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [2])
+);
+defparam \fifo_inst/Equal.rq1_wptr_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_1_s0  (
+	.D(\fifo_inst/wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [1])
+);
+defparam \fifo_inst/Equal.rq1_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_0_s0  (
+	.D(\fifo_inst/wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [0])
+);
+defparam \fifo_inst/Equal.rq1_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_2_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [2]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [2])
+);
+defparam \fifo_inst/Equal.rq2_wptr_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_1_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [1])
+);
+defparam \fifo_inst/Equal.rq2_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_0_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [0])
+);
+defparam \fifo_inst/Equal.rq2_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_1_s0  (
+	.D(\fifo_inst/Equal.rgraynext [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [1])
+);
+defparam \fifo_inst/rptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_0_s0  (
+	.D(\fifo_inst/Equal.rgraynext [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [0])
+);
+defparam \fifo_inst/rptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_2_s0  (
+	.D(\fifo_inst/Equal.wbinnext [2]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [2])
+);
+defparam \fifo_inst/wptr_2_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_1_s0  (
+	.D(\fifo_inst/Equal.wgraynext [1]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [1])
+);
+defparam \fifo_inst/wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_0_s0  (
+	.D(\fifo_inst/Equal.wgraynext [0]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [0])
+);
+defparam \fifo_inst/wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_1_s0  (
+	.D(\fifo_inst/Equal.wbinnext [1]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [1])
+);
+defparam \fifo_inst/Equal.wbin_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_0_s0  (
+	.D(\fifo_inst/Equal.wbinnext_0_7 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [0])
+);
+defparam \fifo_inst/Equal.wbin_0_s0 .INIT=1'b0;
+DFFP \fifo_inst/Empty_s0  (
+	.D(\fifo_inst/rempty_val ),
+	.CLK(RdClk),
+	.PRESET(\fifo_inst/reset_r [1]),
+	.Q(Empty)
+);
+defparam \fifo_inst/Empty_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_r_1_s0  (
+	.D(\fifo_inst/reset_r [0]),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [1])
+);
+defparam \fifo_inst/reset_r_1_s0 .INIT=1'b1;
+DFFC \fifo_inst/wfull_val1_s0  (
+	.D(\fifo_inst/wfull_val ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wfull_val1_2 )
+);
+defparam \fifo_inst/wfull_val1_s0 .INIT=1'b0;
+DFFP \fifo_inst/wfull_val1_s1  (
+	.D(\fifo_inst/wfull_val ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n335_6 ),
+	.Q(\fifo_inst/wfull_val1_3 )
+);
+defparam \fifo_inst/wfull_val1_s1 .INIT=1'b1;
+DFFC \fifo_inst/Full_s0  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Full_1_2 )
+);
+defparam \fifo_inst/Full_s0 .INIT=1'b0;
+DFFP \fifo_inst/Full_s1  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n335_6 ),
+	.Q(\fifo_inst/Full_2 )
+);
+defparam \fifo_inst/Full_s1 .INIT=1'b1;
+SDPB \fifo_inst/Equal.mem_Equal.mem_0_0_s  (
+	.CLKA(WrClk),
+	.CEA(\fifo_inst/n21_5 ),
+	.RESETA(GND),
+	.CLKB(RdClk),
+	.CEB(\fifo_inst/n27_4 ),
+	.RESETB(\fifo_inst/reset_r [1]),
+	.OCE(GND),
+	.BLKSELA({GND, GND, GND}),
+	.BLKSELB({GND, GND, GND}),
+	.DI({Data[31:0]}),
+	.ADA({GND, GND, GND, GND, GND, GND, GND, \fifo_inst/Equal.wbin [1:0], GND, VCC, VCC, VCC, VCC}),
+	.ADB({GND, GND, GND, GND, GND, GND, GND, \fifo_inst/rbin_num_next [1:0], GND, GND, GND, GND, GND}),
+	.DO({Q[31:0]})
+);
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .READ_MODE=1'b0;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_0=32;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_1=32;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .RESET_MODE="ASYNC";
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_0=3'b000;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_1=3'b000;
+ALU \fifo_inst/n158_s0  (
+	.I0(\fifo_inst/Equal.rgraynext [0]),
+	.I1(\fifo_inst/Equal.rq2_wptr [0]),
+	.I3(GND),
+	.CIN(GND),
+	.COUT(\fifo_inst/n158_3 ),
+	.SUM(\fifo_inst/n158_1_SUM )
+);
+defparam \fifo_inst/n158_s0 .ALU_MODE=3;
+ALU \fifo_inst/n159_s0  (
+	.I0(\fifo_inst/Equal.rgraynext [1]),
+	.I1(\fifo_inst/Equal.rq2_wptr [1]),
+	.I3(GND),
+	.CIN(\fifo_inst/n158_3 ),
+	.COUT(\fifo_inst/n159_3 ),
+	.SUM(\fifo_inst/n159_1_SUM )
+);
+defparam \fifo_inst/n159_s0 .ALU_MODE=3;
+INV \fifo_inst/n4_s2  (
+	.I(RdClk),
+	.O(\fifo_inst/n4_6 )
+);
+INV \fifo_inst/n9_s2  (
+	.I(WrClk),
+	.O(\fifo_inst/n9_6 )
+);
+endmodule

+ 24 - 0
src/src/WrapFifoChain/FifoMax2870/FifoMax2870_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:07:36 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoMax2870 your_instance_name(
+		.Data(Data_i), //input [31: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 [31:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 20 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FIFOHS.prj

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW1N-9" package="PBGA256" speed="6" partNumber="GW1N-LV9PG256C6/I5"/>
+    <FileList>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data"/>
+        <Option type="include_path" value="C:/Projects/QuestaProjects/main_tb/fifo_hs/FifoMax2870/temp/FIFOHS"/>
+        <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>

+ 45 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870.log

@@ -0,0 +1,45 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Analyzing included file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\static_macro_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Compiling module 'FifoMax2870'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":4)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+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
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoMax2870\temp\FIFOHS\FifoMax2870.vg" completed
+Generate template file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoMax2870\temp\FIFOHS\FifoMax2870_tmp.v" completed
+[100%] Generate report file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoMax2870\temp\FIFOHS\FifoMax2870_syn.rpt.html" completed
+GowinSynthesis finish

+ 222 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870.vg

@@ -0,0 +1,222 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:07:36 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+Da6ePPXJ0x1Zkr3+qduAM8J+kvtpawq4mD4KNKBETeC4EH7Szs6BzQt56oavp90RuKDAboLkt4Jg
++G92rwctBdMEwq+eB6c7QPHl/H1uRLQVqlR4yx0r3BOVYQPjoymqLzmZv8veGRBC1kdMpZB80yUK
+zmz+xkaf5+Uj2LoGUbWb2pOECph91GIFDeF+RqGJtZTKyt08qFT8oijjiMTL0Xb+qn22EE7E1RFY
+OllWGiYHO4QEEG6qgweiS5shJRiL6+3Pxmw7CJNrKZ/zyFyC0a6pFdp6mTM2DN5SkKBIq/YzyLXr
+XKL3+73PMXlMajN6EcsM4S1BTp7fXxaHLIWB1w==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=8352)
+`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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
+`pragma protect end_protected
+module FifoMax2870 (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [31:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [31: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[31:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[31:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoMax2870 */

Plik diff jest za duży
+ 1340 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870_syn.rpt.html


+ 46 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870_syn_resource.html

@@ -0,0 +1,46 @@
+<!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>
+<th class="label">ROM16 NUMBER</th>
+</tr>
+<tr>
+<td class="label">FifoMax2870 (C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v)</td>
+<td align = "center">25</td>
+<td align = "center">2</td>
+<td align = "center">23</td>
+<td align = "center">-</td>
+<td align = "center">1</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="FifoMax2870" Register="25" Alu="2" Lut="23" Bsram="1" T_Register="25(25)" T_Alu="2(2)" T_Lut="23(23)" T_Bsram="1(1)"/>

+ 24 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/FifoMax2870_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:07:36 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoMax2870 your_instance_name(
+		.Data(Data_i), //input [31: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 [31:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 5 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/fifo_define.v

@@ -0,0 +1,5 @@
+`define module_name FifoMax2870
+`define EBR_BASED
+`define FWFT
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/fifo_parameter.v

@@ -0,0 +1,6 @@
+parameter WDEPTH = 4;
+parameter ASIZE = 2;
+parameter WDSIZE = 32;
+parameter RDEPTH = 4;
+parameter RASIZE = 2;
+parameter RDSIZE = 32;

+ 1 - 0
src/src/WrapFifoChain/FifoMax2870/temp/FIFOHS/project.ini

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

+ 35 - 0
src/src/WrapFifoChain/FifoShiftReg/FifoShiftReg.ipc

@@ -0,0 +1,35 @@
+[General]
+ipc_version=4
+file=FifoShiftReg
+module=FifoShiftReg
+target_device=gw1n9-014
+type=fifo_hs
+version=1.0
+
+[Config]
+AlmostEmptyFlag=false
+AlmostEmptyFlagItem=Empty_Single Threshold Constant Parameter
+AlmostFullFlag=false
+AlmostFullFlagItem=Full_Single Threshold Constant Parameter
+BSRAM=true
+ControlledByRdEn=false
+ECCSelected=false
+EmptyClear=1
+EmptySet=1
+EnReset=true
+FirstWordFallThrough=true
+FullClear=1
+FullSet=1
+LANG=0
+OutputRegistersSelected=false
+REG=false
+ReadDataNum=false
+ReadDataWidth=8
+ReadDepth=2
+ResetSynchronization=true
+SSRAM=false
+StandardFIFO=false
+Synthesis_tool=GowinSynthesis
+WriteDataNum=false
+WriteDataWidth=8
+WriteDepth=2

+ 188 - 0
src/src/WrapFifoChain/FifoShiftReg/FifoShiftReg.v

@@ -0,0 +1,188 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:08:18 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+rE66WtNKtc22HlKA/X4eJurtJEnvZemh7Zi9pohq7hHdYu15Y21d8CKvWJizh8HxY9I0OT+eTJYe
+eqAmDwscz3d6gWPx0ty1wAovCUkRxoMRBOBCmiJBj1FAq23KXlKei5tCXIQQG+7uAA9Mz6Jr+6hd
++siV1FTOW4hlWZSMlHvcc5M3QH2IpgONxuKpGtgigAjcxFHeL61jOKWUafSHFW6bf8j2J5rsbwqY
+ArJzg7FAyvR/3aNkWyNra/6lK47Ld15z5DXOp6Qw4yowJyzNpUIg7BGTwuT5hvVdE8HU5+LAGBLC
+8DM4h8FNMqFHubE/tetwFYOqKFxGclYw1Xqrhw==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=6400)
+`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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
+BrWHDjSsnheYikR4eooDlA==
+`pragma protect end_protected
+module FifoShiftReg (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [7:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [7:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.FifoShiftReg  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[7:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[7:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoShiftReg */

+ 353 - 0
src/src/WrapFifoChain/FifoShiftReg/FifoShiftReg.vo

@@ -0,0 +1,353 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Post-PnR Simulation Model file
+//Tool Version: V1.9.9.02
+//Created Time: Thu Apr 25 16:08:18 2024
+
+`timescale 100 ps/100 ps
+module FifoShiftReg(
+	Data,
+	Reset,
+	WrClk,
+	RdClk,
+	WrEn,
+	RdEn,
+	Q,
+	Empty,
+	Full
+);
+input [7:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [7:0] Q;
+output Empty;
+output Full;
+wire [7:0] Data;
+wire Empty;
+wire Full;
+wire GND;
+wire [7:0] Q;
+wire RdClk;
+wire RdEn;
+wire Reset;
+wire VCC;
+wire WrClk;
+wire WrEn;
+wire \fifo_inst/n20_5 ;
+wire \fifo_inst/n26_4 ;
+wire \fifo_inst/n177_4 ;
+wire \fifo_inst/rempty_val ;
+wire \fifo_inst/wfull_val_7 ;
+wire \fifo_inst/wfull_val1 ;
+wire \fifo_inst/wfull_val1_0 ;
+wire \fifo_inst/Full_1 ;
+wire \fifo_inst/Equal.wbinnext_0_7 ;
+wire \fifo_inst/rempty_val_8 ;
+wire \fifo_inst/wfull_val1_2 ;
+wire \fifo_inst/wfull_val1_3 ;
+wire \fifo_inst/Full_1_2 ;
+wire \fifo_inst/Full_2 ;
+wire \fifo_inst/n4_6 ;
+wire \fifo_inst/n9_6 ;
+wire [0:0] \fifo_inst/Equal.rgraynext ;
+wire [0:0] \fifo_inst/Equal.wgraynext ;
+wire [1:0] \fifo_inst/rbin_num_next ;
+wire [1:1] \fifo_inst/Equal.wbinnext ;
+wire [1:0] \fifo_inst/reset_r ;
+wire [1:0] \fifo_inst/reset_w ;
+wire [1:0] \fifo_inst/rbin_num ;
+wire [1:0] \fifo_inst/Equal.rq1_wptr ;
+wire [1:0] \fifo_inst/Equal.rq2_wptr ;
+wire [0:0] \fifo_inst/rptr ;
+wire [1:0] \fifo_inst/wptr ;
+wire [0:0] \fifo_inst/Equal.wbin ;
+wire [31:8] \fifo_inst/DO ;
+VCC VCC_cZ (
+  .V(VCC)
+);
+GND GND_cZ (
+  .G(GND)
+);
+GSR GSR (
+	.GSRI(VCC)
+);
+LUT4 \fifo_inst/n20_s1  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.I3(WrEn),
+	.F(\fifo_inst/n20_5 )
+);
+defparam \fifo_inst/n20_s1 .INIT=16'h5300;
+LUT3 \fifo_inst/n26_s1  (
+	.I0(RdEn),
+	.I1(Empty),
+	.I2(\fifo_inst/rempty_val ),
+	.F(\fifo_inst/n26_4 )
+);
+defparam \fifo_inst/n26_s1 .INIT=8'h0E;
+LUT3 \fifo_inst/Equal.rgraynext_0_s0  (
+	.I0(\fifo_inst/rbin_num [0]),
+	.I1(\fifo_inst/rbin_num_next [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/Equal.rgraynext [0])
+);
+defparam \fifo_inst/Equal.rgraynext_0_s0 .INIT=8'h1E;
+LUT3 \fifo_inst/Equal.wgraynext_0_s0  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.I2(\fifo_inst/wptr [1]),
+	.F(\fifo_inst/Equal.wgraynext [0])
+);
+defparam \fifo_inst/Equal.wgraynext_0_s0 .INIT=8'h1E;
+LUT2 \fifo_inst/n177_s1  (
+	.I0(\fifo_inst/reset_w [1]),
+	.I1(\fifo_inst/wfull_val_7 ),
+	.F(\fifo_inst/n177_4 )
+);
+defparam \fifo_inst/n177_s1 .INIT=4'h4;
+LUT4 \fifo_inst/rempty_val_s3  (
+	.I0(\fifo_inst/Equal.rq2_wptr [1]),
+	.I1(\fifo_inst/rempty_val_8 ),
+	.I2(\fifo_inst/Equal.rq2_wptr [0]),
+	.I3(\fifo_inst/rbin_num_next [0]),
+	.F(\fifo_inst/rempty_val )
+);
+defparam \fifo_inst/rempty_val_s3 .INIT=16'h4221;
+LUT4 \fifo_inst/wfull_val_s3  (
+	.I0(\fifo_inst/wptr [0]),
+	.I1(\fifo_inst/wptr [1]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.I3(\fifo_inst/rptr [0]),
+	.F(\fifo_inst/wfull_val_7 )
+);
+defparam \fifo_inst/wfull_val_s3 .INIT=16'h1428;
+LUT3 \fifo_inst/wfull_val1_s9  (
+	.I0(\fifo_inst/wfull_val1_3 ),
+	.I1(\fifo_inst/wfull_val1_2 ),
+	.I2(\fifo_inst/wfull_val1_0 ),
+	.F(\fifo_inst/wfull_val1 )
+);
+defparam \fifo_inst/wfull_val1_s9 .INIT=8'hAC;
+LUT3 \fifo_inst/wfull_val1_s10  (
+	.I0(\fifo_inst/wfull_val_7 ),
+	.I1(\fifo_inst/wfull_val1_0 ),
+	.I2(\fifo_inst/reset_w [1]),
+	.F(\fifo_inst/wfull_val1_0 )
+);
+defparam \fifo_inst/wfull_val1_s10 .INIT=8'h0E;
+LUT3 \fifo_inst/Full_d_s  (
+	.I0(\fifo_inst/Full_2 ),
+	.I1(\fifo_inst/Full_1_2 ),
+	.I2(\fifo_inst/Full_1 ),
+	.F(Full)
+);
+defparam \fifo_inst/Full_d_s .INIT=8'hAC;
+LUT3 \fifo_inst/Full_s8  (
+	.I0(\fifo_inst/wfull_val_7 ),
+	.I1(\fifo_inst/Full_1 ),
+	.I2(\fifo_inst/reset_w [1]),
+	.F(\fifo_inst/Full_1 )
+);
+defparam \fifo_inst/Full_s8 .INIT=8'h0E;
+LUT3 \fifo_inst/rbin_num_next_0_s5  (
+	.I0(Empty),
+	.I1(RdEn),
+	.I2(\fifo_inst/rbin_num [0]),
+	.F(\fifo_inst/rbin_num_next [0])
+);
+defparam \fifo_inst/rbin_num_next_0_s5 .INIT=8'hB4;
+LUT3 \fifo_inst/rbin_num_next_1_s2  (
+	.I0(\fifo_inst/rbin_num_next [0]),
+	.I1(\fifo_inst/rbin_num [0]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.F(\fifo_inst/rbin_num_next [1])
+);
+defparam \fifo_inst/rbin_num_next_1_s2 .INIT=8'hB4;
+LUT2 \fifo_inst/Equal.wbinnext_0_s3  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.F(\fifo_inst/Equal.wbinnext_0_7 )
+);
+defparam \fifo_inst/Equal.wbinnext_0_s3 .INIT=4'h6;
+LUT3 \fifo_inst/Equal.wbinnext_1_s2  (
+	.I0(\fifo_inst/Equal.wbin [0]),
+	.I1(\fifo_inst/n20_5 ),
+	.I2(\fifo_inst/wptr [1]),
+	.F(\fifo_inst/Equal.wbinnext [1])
+);
+defparam \fifo_inst/Equal.wbinnext_1_s2 .INIT=8'h78;
+LUT4 \fifo_inst/rempty_val_s4  (
+	.I0(\fifo_inst/Equal.rq2_wptr [0]),
+	.I1(\fifo_inst/Equal.rq2_wptr [1]),
+	.I2(\fifo_inst/rbin_num [1]),
+	.I3(\fifo_inst/rbin_num [0]),
+	.F(\fifo_inst/rempty_val_8 )
+);
+defparam \fifo_inst/rempty_val_s4 .INIT=16'h871E;
+DFFP \fifo_inst/reset_r_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [0])
+);
+defparam \fifo_inst/reset_r_0_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_1_s0  (
+	.D(\fifo_inst/reset_w [0]),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [1])
+);
+defparam \fifo_inst/reset_w_1_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_w_0_s0  (
+	.D(GND),
+	.CLK(\fifo_inst/n9_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_w [0])
+);
+defparam \fifo_inst/reset_w_0_s0 .INIT=1'b1;
+DFFC \fifo_inst/rbin_num_1_s0  (
+	.D(\fifo_inst/rbin_num_next [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [1])
+);
+defparam \fifo_inst/rbin_num_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/rbin_num_0_s0  (
+	.D(\fifo_inst/rbin_num_next [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rbin_num [0])
+);
+defparam \fifo_inst/rbin_num_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_1_s0  (
+	.D(\fifo_inst/wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [1])
+);
+defparam \fifo_inst/Equal.rq1_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq1_wptr_0_s0  (
+	.D(\fifo_inst/wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq1_wptr [0])
+);
+defparam \fifo_inst/Equal.rq1_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_1_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [1]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [1])
+);
+defparam \fifo_inst/Equal.rq2_wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.rq2_wptr_0_s0  (
+	.D(\fifo_inst/Equal.rq1_wptr [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/Equal.rq2_wptr [0])
+);
+defparam \fifo_inst/Equal.rq2_wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/rptr_0_s0  (
+	.D(\fifo_inst/Equal.rgraynext [0]),
+	.CLK(RdClk),
+	.CLEAR(\fifo_inst/reset_r [1]),
+	.Q(\fifo_inst/rptr [0])
+);
+defparam \fifo_inst/rptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_1_s0  (
+	.D(\fifo_inst/Equal.wbinnext [1]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [1])
+);
+defparam \fifo_inst/wptr_1_s0 .INIT=1'b0;
+DFFC \fifo_inst/wptr_0_s0  (
+	.D(\fifo_inst/Equal.wgraynext [0]),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wptr [0])
+);
+defparam \fifo_inst/wptr_0_s0 .INIT=1'b0;
+DFFC \fifo_inst/Equal.wbin_0_s0  (
+	.D(\fifo_inst/Equal.wbinnext_0_7 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Equal.wbin [0])
+);
+defparam \fifo_inst/Equal.wbin_0_s0 .INIT=1'b0;
+DFFP \fifo_inst/Empty_s0  (
+	.D(\fifo_inst/rempty_val ),
+	.CLK(RdClk),
+	.PRESET(\fifo_inst/reset_r [1]),
+	.Q(Empty)
+);
+defparam \fifo_inst/Empty_s0 .INIT=1'b1;
+DFFP \fifo_inst/reset_r_1_s0  (
+	.D(\fifo_inst/reset_r [0]),
+	.CLK(\fifo_inst/n4_6 ),
+	.PRESET(Reset),
+	.Q(\fifo_inst/reset_r [1])
+);
+defparam \fifo_inst/reset_r_1_s0 .INIT=1'b1;
+DFFC \fifo_inst/wfull_val1_s0  (
+	.D(\fifo_inst/wfull_val_7 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/wfull_val1_2 )
+);
+defparam \fifo_inst/wfull_val1_s0 .INIT=1'b0;
+DFFP \fifo_inst/wfull_val1_s1  (
+	.D(\fifo_inst/wfull_val_7 ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n177_4 ),
+	.Q(\fifo_inst/wfull_val1_3 )
+);
+defparam \fifo_inst/wfull_val1_s1 .INIT=1'b1;
+DFFC \fifo_inst/Full_s0  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.CLEAR(\fifo_inst/reset_w [1]),
+	.Q(\fifo_inst/Full_1_2 )
+);
+defparam \fifo_inst/Full_s0 .INIT=1'b0;
+DFFP \fifo_inst/Full_s1  (
+	.D(\fifo_inst/wfull_val1 ),
+	.CLK(WrClk),
+	.PRESET(\fifo_inst/n177_4 ),
+	.Q(\fifo_inst/Full_2 )
+);
+defparam \fifo_inst/Full_s1 .INIT=1'b1;
+SDPB \fifo_inst/Equal.mem_Equal.mem_0_0_s  (
+	.CLKA(WrClk),
+	.CEA(\fifo_inst/n20_5 ),
+	.RESETA(GND),
+	.CLKB(RdClk),
+	.CEB(\fifo_inst/n26_4 ),
+	.RESETB(\fifo_inst/reset_r [1]),
+	.OCE(GND),
+	.BLKSELA({GND, GND, GND}),
+	.BLKSELB({GND, GND, GND}),
+	.DI({GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, Data[7:0]}),
+	.ADA({GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, \fifo_inst/Equal.wbin [0], GND, GND, GND}),
+	.ADB({GND, GND, GND, GND, GND, GND, GND, GND, GND, GND, \fifo_inst/rbin_num_next [0], GND, GND, GND}),
+	.DO({\fifo_inst/DO [31:8], Q[7:0]})
+);
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .READ_MODE=1'b0;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_0=8;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BIT_WIDTH_1=8;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .RESET_MODE="ASYNC";
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_0=3'b000;
+defparam \fifo_inst/Equal.mem_Equal.mem_0_0_s .BLK_SEL_1=3'b000;
+INV \fifo_inst/n4_s2  (
+	.I(RdClk),
+	.O(\fifo_inst/n4_6 )
+);
+INV \fifo_inst/n9_s2  (
+	.I(WrClk),
+	.O(\fifo_inst/n9_6 )
+);
+endmodule

+ 24 - 0
src/src/WrapFifoChain/FifoShiftReg/FifoShiftReg_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:08:18 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoShiftReg your_instance_name(
+		.Data(Data_i), //input [7: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 [7:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 20 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FIFOHS.prj

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE gowin-synthesis-project>
+<Project>
+    <Version>beta</Version>
+    <Device id="GW1N-9" package="PBGA256" speed="6" partNumber="GW1N-LV9PG256C6/I5"/>
+    <FileList>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v" type="verilog"/>
+        <File path="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v" type="verilog"/>
+    </FileList>
+    <OptionList>
+        <Option type="disable_insert_pad" value="1"/>
+        <Option type="include_path" value="C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data"/>
+        <Option type="include_path" value="C:/Projects/QuestaProjects/main_tb/fifo_hs/FifoShiftReg/temp/FIFOHS"/>
+        <Option type="output_file" value="FifoShiftReg.vg"/>
+        <Option type="output_template" value="FifoShiftReg_tmp.v"/>
+        <Option type="ram_balance" value="1"/>
+        <Option type="ram_rw_check" value="1"/>
+        <Option type="verilog_language" value="sysv-2017"/>
+    </OptionList>
+</Project>

+ 45 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg.log

@@ -0,0 +1,45 @@
+GowinSynthesis start
+Running parser ...
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v'
+Analyzing included file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Back to file '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Undeclared symbol '**', assumed default net type '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Analyzing Verilog file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'
+Analyzing included file 'fifo_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":1)
+Analyzing included file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\static_macro_define.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":2)
+Analyzing included file 'fifo_parameter.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Back to file 'C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":57)
+Compiling module 'FifoShiftReg'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs_top.v":4)
+Compiling module '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+Extracting RAM for identifier '**'("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+NOTE  (EX0101) : Current top module is "FifoShiftReg"
+[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
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/wfull_val1_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s6"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0100) : Find logical loop signal : "fifo_inst/Full_s3"("C:\Gowin\Gowin_V1.9.9.02_x64\IDE\ipcore\FIFO_HS\data\fifo_hs.v":15293)
+WARN  (AG0101) : The netlist is not one directed acyclic graph
+[80%] Tech-Mapping Phase 3 completed
+[90%] Tech-Mapping Phase 4 completed
+[95%] Generate netlist file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoShiftReg\temp\FIFOHS\FifoShiftReg.vg" completed
+Generate template file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoShiftReg\temp\FIFOHS\FifoShiftReg_tmp.v" completed
+[100%] Generate report file "C:\Projects\QuestaProjects\main_tb\fifo_hs\FifoShiftReg\temp\FIFOHS\FifoShiftReg_syn.rpt.html" completed
+GowinSynthesis finish

+ 188 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg.vg

@@ -0,0 +1,188 @@
+//
+//Written by GowinSynthesis
+//Tool Version "V1.9.9.02"
+//Thu Apr 25 16:08:18 2024
+
+//Source file index table:
+//file0 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs.v"
+//file1 "\C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_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
+rE66WtNKtc22HlKA/X4eJurtJEnvZemh7Zi9pohq7hHdYu15Y21d8CKvWJizh8HxY9I0OT+eTJYe
+eqAmDwscz3d6gWPx0ty1wAovCUkRxoMRBOBCmiJBj1FAq23KXlKei5tCXIQQG+7uAA9Mz6Jr+6hd
++siV1FTOW4hlWZSMlHvcc5M3QH2IpgONxuKpGtgigAjcxFHeL61jOKWUafSHFW6bf8j2J5rsbwqY
+ArJzg7FAyvR/3aNkWyNra/6lK47Ld15z5DXOp6Qw4yowJyzNpUIg7BGTwuT5hvVdE8HU5+LAGBLC
+8DM4h8FNMqFHubE/tetwFYOqKFxGclYw1Xqrhw==
+
+`pragma protect encoding=(enctype="base64", line_length=76, bytes=6400)
+`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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
+BrWHDjSsnheYikR4eooDlA==
+`pragma protect end_protected
+module FifoShiftReg (
+  Data,
+  Reset,
+  WrClk,
+  RdClk,
+  WrEn,
+  RdEn,
+  Q,
+  Empty,
+  Full
+)
+;
+input [7:0] Data;
+input Reset;
+input WrClk;
+input RdClk;
+input WrEn;
+input RdEn;
+output [7:0] Q;
+output Empty;
+output Full;
+wire VCC;
+wire GND;
+  \~fifo.FifoShiftReg  fifo_inst (
+    .Reset(Reset),
+    .RdClk(RdClk),
+    .WrClk(WrClk),
+    .WrEn(WrEn),
+    .RdEn(RdEn),
+    .Data(Data[7:0]),
+    .Empty(Empty),
+    .Full(Full),
+    .Q(Q[7:0])
+);
+  VCC VCC_cZ (
+    .V(VCC)
+);
+  GND GND_cZ (
+    .G(GND)
+);
+  GSR GSR (
+    .GSRI(VCC) 
+);
+endmodule /* FifoShiftReg */

Plik diff jest za duży
+ 1300 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg_syn.rpt.html


+ 46 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg_syn_resource.html

@@ -0,0 +1,46 @@
+<!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>
+<th class="label">ROM16 NUMBER</th>
+</tr>
+<tr>
+<td class="label">FifoShiftReg (C:/Gowin/Gowin_V1.9.9.02_x64/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v)</td>
+<td align = "center">19</td>
+<td align = "center">-</td>
+<td align = "center">18</td>
+<td align = "center">-</td>
+<td align = "center">1</td>
+<td align = "center">-</td>
+<td align = "center">-</td>
+</tr>
+</table>
+</div><!-- content -->
+</div><!-- main_wrapper -->
+</body>
+</html>

+ 2 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg_syn_rsc.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module name="FifoShiftReg" Register="19" Lut="18" Bsram="1" T_Register="19(19)" T_Lut="18(18)" T_Bsram="1(1)"/>

+ 24 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/FifoShiftReg_tmp.v

@@ -0,0 +1,24 @@
+//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
+//All rights reserved.
+//File Title: Template file for instantiation
+//Tool Version: V1.9.9.02
+//Part Number: GW1N-LV9PG256C6/I5
+//Device: GW1N-
+//Created Time: Thu Apr 25 16:08:18 2024
+
+//Change the instance name and port connections to the signal names
+//--------Copy here to design--------
+
+	FifoShiftReg your_instance_name(
+		.Data(Data_i), //input [7: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 [7:0] Q
+		.Empty(Empty_o), //output Empty
+		.Full(Full_o) //output Full
+	);
+
+//--------Copy end-------------------

+ 5 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/fifo_define.v

@@ -0,0 +1,5 @@
+`define module_name FifoShiftReg
+`define EBR_BASED
+`define FWFT
+`define En_Reset
+`define Reset_Synchronization

+ 6 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/fifo_parameter.v

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

+ 1 - 0
src/src/WrapFifoChain/FifoShiftReg/temp/FIFOHS/project.ini

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

+ 95 - 0
src/src/WrapFifoChain/LmxWrapper.v

@@ -0,0 +1,95 @@
+// Company:         TAIR
+// Engineer:        Chigrinskiy A.  
+// 
+// Create Date:     18/04/2024 
+// Design Name: 
+// Module Name:     LmxWrapper
+// Project Name:    SB_TMSG44V1_FPGA
+// Target Devices:  Board: SB_TMSG44v1. FPGA: GW1N-LV9PG256C6/I5
+// Tool versions:
+// Description:    This module is a wrapper for the LMX Fifo, LMX Fifo Controller and SPI Master modules.
+//
+// Dependencies:  
+// Revision: 
+// Revision 1.0 - File Created
+// Additional Comments: 
+//
+////////////////////////////////////////////////////////////////////////////////////////////
+module LmxWrapper #(
+    parameter IN_WIDTH = 24,
+    parameter WR_NUM = 1,
+    parameter OUT_WIDTH = 24,
+    parameter DATA_WIDTH = 24
+)(
+    input WrClk_i,
+    input RdClk_i,
+    input Rst_i,
+    input [IN_WIDTH-1:0] Data_i,
+    input Val_i,
+
+    output Ss_o,
+    output Sck_o,
+    output Mosi_o
+
+);
+//================================================================================
+//	                                REG/WIRE
+//================================================================================    
+wire [OUT_WIDTH-1:0] dataFromLmxFifoCtrl;
+wire [OUT_WIDTH-1:0] dataFromLmxFifo;
+wire readEnLmx;
+wire writeEnLmx;
+wire valRdDataLMX;
+wire busySpiMLmx;
+wire lmxFifoFull;
+wire lmxFifoEmpty;
+
+//==========================================================================//
+//									CODING									//
+//==========================================================================//
+FifoCtrl #(
+	.IN_WIDTH		(IN_WIDTH),
+	.WR_NUM			(WR_NUM),
+	.OUT_WIDTH		(OUT_WIDTH)
+) FifoCtrlLmx
+(
+	.WrClk_i		(WrClk_i),
+	.RdClk_i		(RdClk_i),
+	.Rst_i			(Rst_i),
+	.Data_i			(Data_i),
+	.Val_i			(Val_i),
+	.BusySpiM_i		(busySpiMLmx),
+	.FifoFull_i		(lmxFifoFull),
+	.FifoEmpty_i	(lmxFifoEmpty),
+	.Data_o			(dataFromLmxFifoCtrl),
+	.ReadEn_o		(readEnLmx),
+	.WriteEn_o		(writeEnLmx),
+	.ValRdData_o	(valRdDataLMX)
+);
+
+FifoLMX FifoLMX_inst (
+	.Data	(dataFromLmxFifoCtrl),
+	.WrClk	(WrClk_i),
+	.RdClk	(RdClk_i),
+	.Reset	(Rst_i),
+	.WrEn	(writeEnLmx),
+	.RdEn	(readEnLmx),
+	.Full	(lmxFifoFull),
+	.Empty	(lmxFifoEmpty),
+	.Q		(dataFromLmxFifo)
+);
+
+SpiM #(
+	.DATA_WIDTH	(DATA_WIDTH)
+)SpiMLmx(
+	.Clk_i		(RdClk_i),
+	.Rst_i		(Rst_i),
+	.Val_i		(valRdDataLMX),
+	.SpiData_i	(dataFromLmxFifo),
+	.Busy_o	    (busySpiMLmx),
+	.Ss_o		(Ss_o),
+	.Mosi_o		(Mosi_o),
+	.Sck_o		(Sck_o)
+);
+
+endmodule

+ 95 - 0
src/src/WrapFifoChain/Max2870Wrapper.v

@@ -0,0 +1,95 @@
+// Company:         TAIR
+// Engineer:        Chigrinskiy A.  
+// 
+// Create Date:     18/04/2024 
+// Design Name: 
+// Module Name:     Max2870Wrapper
+// Project Name:    SB_TMSG44V1_FPGA
+// Target Devices:  Board: SB_TMSG44v1. FPGA: GW1N-LV9PG256C6/I5
+// Tool versions:
+// Description:    This module is a wrapper for the Fifo, Fifo Controller and SPI Master modules.
+//
+// Dependencies:  
+// Revision: 
+// Revision 1.0 - File Created
+// Additional Comments: 
+//
+////////////////////////////////////////////////////////////////////////////////////////////
+module Max2870Wrapper #(
+    parameter IN_WIDTH = 24,
+    parameter WR_NUM = 2,
+    parameter OUT_WIDTH = 32,
+    parameter DATA_WIDTH = 32
+)(
+    input WrClk_i,
+    input RdClk_i,
+    input Rst_i,
+    input [IN_WIDTH-1:0] Data_i,
+    input Val_i,
+
+    output Ss_o,
+    output Sck_o,
+    output Mosi_o
+
+);
+//================================================================================
+//	                                REG/WIRE
+//================================================================================    
+wire [OUT_WIDTH-1:0] dataFromMaxFifoCtrl;
+wire [OUT_WIDTH-1:0] dataFromMaxFifo;
+wire readEnMax;
+wire writeEnMax;
+wire valRdDataMAX;
+wire busySpiMMax;
+wire maxFifoFull;
+wire maxFifoEmpty;
+
+//==========================================================================//
+//									CODING									//
+//==========================================================================//
+FifoCtrl #(
+	.IN_WIDTH		(IN_WIDTH),
+	.WR_NUM			(WR_NUM),
+	.OUT_WIDTH		(OUT_WIDTH)
+) FifoCtrlMax
+(
+	.WrClk_i		(WrClk_i),
+	.RdClk_i		(RdClk_i),
+	.Rst_i			(Rst_i),
+	.Data_i			(Data_i),
+	.Val_i			(Val_i),
+	.BusySpiM_i		(busySpiMMax),
+	.FifoFull_i		(maxFifoFull),
+	.FifoEmpty_i	(maxFifoEmpty),
+	.Data_o			(dataFromMaxFifoCtrl),
+	.ReadEn_o		(readEnMax),
+	.WriteEn_o		(writeEnMax),
+	.ValRdData_o	(valRdDataMAX)
+);
+
+FifoMax2870 FifoMax2870_inst (
+	.Data	(dataFromMaxFifoCtrl),
+	.WrClk	(WrClk_i),
+	.RdClk	(RdClk_i),
+	.Reset	(Rst_i),
+	.WrEn	(writeEnMax),
+	.RdEn	(readEnMax),
+	.Full	(maxFifoFull),
+	.Empty	(maxFifoEmpty),
+	.Q		(dataFromMaxFifo)
+);
+
+SpiM #(
+	.DATA_WIDTH	(DATA_WIDTH)
+)SpiMMax(
+	.Clk_i		(RdClk_i),
+	.Rst_i		(Rst_i),
+	.Val_i		(valRdDataMAX),
+	.SpiData_i	(dataFromMaxFifo),
+	.Busy_o	    (busySpiMMax),
+	.Ss_o		(Ss_o),
+	.Mosi_o		(Mosi_o),
+	.Sck_o		(Sck_o)
+);
+
+endmodule

+ 95 - 0
src/src/WrapFifoChain/PotWrapper.v

@@ -0,0 +1,95 @@
+// Company:         TAIR
+// Engineer:        Chigrinskiy A.  
+// 
+// Create Date:     18/04/2024 
+// Design Name: 
+// Module Name:     DDSWrapper
+// Project Name:    SB_TMSG44V1_FPGA
+// Target Devices:  Board: SB_TMSG44v1. FPGA: GW1N-LV9PG256C6/I5
+// Tool versions:
+// Description:    This module is a wrapper for the Fifo, Fifo Controller and SPI Master modules.
+//
+// Dependencies:  
+// Revision: 
+// Revision 1.0 - File Created
+// Additional Comments: 
+//
+////////////////////////////////////////////////////////////////////////////////////////////
+module PotWrapper #(
+    parameter IN_WIDTH = 24,
+    parameter WR_NUM = 1,
+    parameter OUT_WIDTH = 16,
+    parameter DATA_WIDTH = 16
+)(
+    input WrClk_i,
+    input RdClk_i,
+    input Rst_i,
+    input [IN_WIDTH-1:0] Data_i,
+    input Val_i,
+
+    output Ss_o,
+    output Sck_o,
+    output Mosi_o
+
+);
+//================================================================================
+//	                                REG/WIRE
+//================================================================================    
+wire [OUT_WIDTH-1:0] dataFromPotFifoCtrl;
+wire [OUT_WIDTH-1:0] dataFromPotFifo;
+wire readEnPot;
+wire writeEnPot;
+wire valRdDataPOT;
+wire busySpiMPot;
+wire potFifoFull;
+wire potFifoEmpty;
+
+//==========================================================================//
+//									CODING									//
+//==========================================================================//
+FifoCtrl #(
+	.IN_WIDTH		(IN_WIDTH),
+	.WR_NUM			(WR_NUM),
+	.OUT_WIDTH		(OUT_WIDTH)
+) FifoCtrlPot
+(
+	.WrClk_i		(WrClk_i),
+	.RdClk_i		(RdClk_i),
+	.Rst_i			(Rst_i),
+	.Data_i			(Data_i),
+	.Val_i			(Val_i),
+	.BusySpiM_i		(busySpiMPot),
+	.FifoFull_i		(potFifoFull),
+	.FifoEmpty_i	(potFifoEmpty),
+	.Data_o			(dataFromPotFifoCtrl),
+	.ReadEn_o		(readEnPot),
+	.WriteEn_o		(writeEnPot),
+	.ValRdData_o	(valRdDataPOT)
+);
+
+Fifo16x3 FifoPot_inst (
+	.Data	(dataFromPotFifoCtrl),
+	.WrClk	(WrClk_i),
+	.RdClk	(RdClk_i),
+	.Reset	(Rst_i),
+	.WrEn	(writeEnPot),
+	.RdEn	(readEnPot),
+	.Full	(potFifoFull),
+	.Empty	(potFifoEmpty),
+	.Q		(dataFromPotFifo)
+);
+
+SpiM #(
+	.DATA_WIDTH	(DATA_WIDTH)
+)SpiMPot(
+	.Clk_i		(RdClk_i),
+	.Rst_i		(Rst_i),
+	.Val_i		(valRdDataPOT),
+	.SpiData_i	(dataFromPotFifo),
+	.Busy_o	    (busySpiMPot),
+	.Ss_o		(Ss_o),
+	.Mosi_o		(Mosi_o),
+	.Sck_o		(Sck_o)
+);
+
+endmodule

+ 94 - 0
src/src/WrapFifoChain/ShifRegWrapper.v

@@ -0,0 +1,94 @@
+// Company:         TAIR
+// Engineer:        Chigrinskiy A.  
+// 
+// Create Date:     18/04/2024 
+// Design Name: 
+// Module Name:     ShiftRegWrapper
+// Project Name:    SB_TMSG44V1_FPGA
+// Target Devices:  Board: SB_TMSG44v1. FPGA: GW1N-LV9PG256C6/I5
+// Tool versions:
+// Description:    This module is a wrapper for the Fifo, Fifo Controller and SPI Master modules.
+//
+// Dependencies:  
+// Revision: 
+// Revision 1.0 - File Created
+// Additional Comments: 
+//
+////////////////////////////////////////////////////////////////////////////////////////////
+module ShiftRegWrapper #(
+    parameter IN_WIDTH = 24,
+    parameter WR_NUM = 1,
+    parameter OUT_WIDTH = 8,
+    parameter DATA_WIDTH = 8
+)(
+    input WrClk_i,
+    input RdClk_i,
+    input Rst_i,
+    input [IN_WIDTH-1:0] Data_i,
+    input Val_i,
+
+    output Ss_o,
+    output Sck_o,
+    output Mosi_o
+);
+//================================================================================
+//	                                REG/WIRE
+//================================================================================    
+wire [OUT_WIDTH-1:0] dataFromShRegFifoCtrl;
+wire [OUT_WIDTH-1:0] dataFromShRegFifo;
+wire readEnShReg;
+wire writeEnShReg;
+wire valRdDataShReg;
+wire busySpiMShReg;
+wire shRegFifoFull;
+wire shRegFifoEmpty;
+
+//==========================================================================//
+//									CODING									//
+//==========================================================================//
+FifoCtrl #(
+	.IN_WIDTH		(IN_WIDTH),
+	.WR_NUM			(WR_NUM),
+	.OUT_WIDTH		(OUT_WIDTH)
+) FifoCtrlShReg
+(
+	.WrClk_i		(WrClk_i),
+	.RdClk_i		(RdClk_i),
+	.Rst_i			(Rst_i),
+	.Data_i			(Data_i),
+	.Val_i			(Val_i),
+	.BusySpiM_i		(busySpiMShReg),
+	.FifoFull_i		(shRegFifoFull),
+	.FifoEmpty_i	(shRegFifoEmpty),
+	.Data_o			(dataFromShRegFifoCtrl),
+	.ReadEn_o		(readEnShReg),
+	.WriteEn_o		(writeEnShReg),
+	.ValRdData_o	(valRdDataShReg)
+);
+
+FifoShiftReg FifoShReg_inst (
+	.Data	(dataFromShRegFifoCtrl),
+	.WrClk	(WrClk_i),
+	.RdClk	(RdClk_i),
+	.Reset	(Rst_i),
+	.WrEn	(writeEnShReg),
+	.RdEn	(readEnShReg),
+	.Full	(shRegFifoFull),
+	.Empty	(shRegFifoEmpty),
+	.Q		(dataFromShRegFifo)
+);
+
+SpiM #(
+	.DATA_WIDTH	(DATA_WIDTH)
+)SpiMShReg(
+	.Clk_i		(RdClk_i),
+	.Rst_i		(Rst_i),
+	.Val_i		(valRdDataShReg),
+	.SpiData_i	(dataFromShRegFifo),
+	.Busy_o	    (busySpiMShReg),
+	.Ss_o		(Ss_o),
+	.Mosi_o		(Mosi_o),
+	.Sck_o		(Sck_o)
+);
+
+endmodule

BIN
src/src/WrapFifoChain/WrapFifoChain.docx