Create yonga_lz4_decoder_top.v
diff --git a/verilog/rtl/yonga_lz4_decoder_top.v b/verilog/rtl/yonga_lz4_decoder_top.v
new file mode 100644
index 0000000..e37bf93
--- /dev/null
+++ b/verilog/rtl/yonga_lz4_decoder_top.v
@@ -0,0 +1,197 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+
+module yonga_lz4_decoder_top (
+ input clk,
+ input rst,
+
+ input valid,
+ output reg [31:0] rdata,
+ input [31:0] wdata,
+ output reg ready,
+ input wr_en,
+
+ input [7:0] compressed_data1,
+ output [7:0] decompressed_data1,
+
+ input rx,
+ output tx
+);
+
+wire rstn;
+reg select;
+
+reg decompress_data_read_en1;
+reg i_fifo_wr_en1;
+reg [7:0] i_fifo_w_data1;
+reg decompress_fifo_data_ready1;
+
+reg uart_tx_full_flag_control1;
+reg [2:0] uart_tx_full_flag_count1;
+
+wire decompress_fifo_empty1;
+
+wire o_in_fifo_full1;
+wire [7:0] decompress_data1;
+wire idle1;
+
+reg lz4_o_fifo_read_request1;
+wire rx_fifo_not_empty1;
+wire rx_empty1;
+wire [7:0] uart_r_data1;
+wire tx_full1;
+wire [5:0] decompress_fifo_data_count1;
+
+assign rstn = !rst;
+assign rx_fifo_not_empty1 = !rx_empty1;
+
+always@(*) begin
+ rdata = 32'b0;
+ rdata[0] = idle1;
+ rdata[4] = decompress_fifo_empty1;
+ rdata[8] = decompress_fifo_data_ready1;
+ rdata[12] = o_in_fifo_full1;
+end
+
+ yonga_lz4_decoder U1 // LZ4-CORE-1
+ (
+ .clk (clk),
+ .rstn (rstn),
+
+ .i_lz4_decompress_enable (1'b0),
+ .lz4_decompress_start (1'b0),
+
+ .i_compress_data_write (i_fifo_wr_en1),
+ .o_compress_fifo_full (o_in_fifo_full1),
+ .i_compress_data (i_fifo_w_data1),
+
+ .i_decompress_data_read (decompress_data_read_en1),
+ .o_decompress_fifo_empty (decompress_fifo_empty1),
+ .o_fifo2_data_count (decompress_fifo_data_count1),
+ .o_decompress_data (decompressed_data1),
+
+ .o_idle (idle1)
+ );
+
+ // ------------------------------UART------------------
+ uart // UART-1
+ #(
+ .DBIT(8),
+ .SB_TICK(16),
+ .DVSR(163),
+ .DVSR_BIT(8),
+ .FIFO_W(2)
+ )
+ U5(
+ .clk(clk),
+ .reset(!rstn),
+ .tx(tx),
+ .rx(rx),
+ .rd_uart(rx_fifo_not_empty1),
+ .wr_uart(lz4_o_fifo_read_request1),
+ .r_data(uart_r_data1),
+ .w_data(decompressed_data1),
+ .tx_full(tx_full1),
+ .rx_empty(rx_empty1)
+ );
+
+//------------------------------------------------------------------------------------------------------------//
+//-----------------Uart or Logic Analyzer Select--------------------------------------------------------------//
+ always @(posedge clk) begin
+ if(rstn == 1'b0)
+ select <= 1'b1;
+ else begin
+ if(valid && !ready) begin
+ if(wr_en ==1'b1 && wdata[8] == 1'b1) // uart enable
+ select <= 1'b0;
+ else if(wr_en ==1'b1 && wdata[9] == 1'b1) // Logic Analyzer enable
+ select <= 1'b1;
+ end
+ end
+ end
+//------------------------------------------------------------------------------------------------------------//
+//-----------------Decompress Fifo Data Ready Control---------------------------------------------------------//
+ always @(posedge clk) begin
+ if(rstn == 1'b0) begin
+ decompress_fifo_data_ready1 <= 1'b0;
+ end else begin
+ if(decompress_fifo_data_count1> 20)
+ decompress_fifo_data_ready1 <= 1'b1;
+ else
+ decompress_fifo_data_ready1 <= 1'b0;
+ end
+ end
+//------------------------------------------------------------------------------------------------------------//
+
+ always @(posedge clk) begin
+ if(rstn == 1'b0) begin
+ ready <= 1'b0;
+ i_fifo_wr_en1 <= 1'b0;
+ decompress_data_read_en1 <= 1'b0;
+ lz4_o_fifo_read_request1 <= 1'b0;
+ i_fifo_w_data1 <= 0;
+ uart_tx_full_flag_control1 <= 1'b1;
+ uart_tx_full_flag_count1 <= 0;
+ end else begin
+ ready <= 1'b0;
+ i_fifo_wr_en1 <= 1'b0;
+ decompress_data_read_en1 <= 1'b0;
+
+ if(valid && !ready)
+ ready <= 1'b1;
+//------------------------------------------Uart---------------------------------------------------------------//
+ if(select == 1'b0) begin // uart enable
+// Write fifo data
+ lz4_o_fifo_read_request1 <= decompress_data_read_en1;
+
+ if(rx_fifo_not_empty1 == 1'b1)begin
+ i_fifo_wr_en1 <= 1'b1;
+ i_fifo_w_data1 <= uart_r_data1;
+ end
+//------------------------------------------------------------------------------------------------------------//
+// Read fifo data
+ if(!decompress_fifo_empty1 && uart_tx_full_flag_control1 == 1 && tx_full1 == 1'b0)begin
+ decompress_data_read_en1 <= 1'b1;
+ uart_tx_full_flag_control1 <= 1'b0;
+ end
+//------------------------------------------------------------------------------------------------------------//
+// uart_tx_full_flag_control
+ if(uart_tx_full_flag_control1 == 1'b0 )begin
+ if(uart_tx_full_flag_count1 == 2)begin
+ uart_tx_full_flag_count1 <= 0;
+ uart_tx_full_flag_control1 <= 1'b1;
+ end else
+ uart_tx_full_flag_count1 <= uart_tx_full_flag_count1+1;
+ end
+//------------------------------------------------------------------------------------------------------------//
+//-------------------------------------------Logic Analyzer---------------------------------------------------//
+ end else begin
+ if(valid && !ready) begin // Logic Analyzer enable
+// Write fifo data
+ if(wr_en ==1'b1 && wdata[0]) begin
+ i_fifo_wr_en1 <= 1'b1;
+ i_fifo_w_data1 <= compressed_data1;
+ end
+//------------------------------------------------------------------------------------------------------------//
+// Read fifo data
+ if(wr_en ==1'b1 && wdata[4])
+ decompress_data_read_en1 <= 1'b1;
+ end
+//------------------------------------------------------------------------------------------------------------//
+ end
+ end
+ end
+
+endmodule