diff --git a/controller/verilog/socdebug_ahb.v b/controller/verilog/socdebug_ahb.v index cb071deac27c52660a0125bf6beb36d5906a5fd4..9676a36789bbf944c643600a21cc93a04aff2b89 100644 --- a/controller/verilog/socdebug_ahb.v +++ b/controller/verilog/socdebug_ahb.v @@ -10,10 +10,7 @@ //----------------------------------------------------------------------------- module socdebug_ahb #( - parameter PROMPT_CHAR = "]", - parameter integer FT1248_WIDTH = 1, // FTDI Interface 1,2,4 width supported - parameter integer FT1248_CLKON = 1, // FTDI clock always on - else quiet when no access - parameter [7:0] FT1248_CLKDIV = 8'd03 // Clock Division Ratio + parameter PROMPT_CHAR = "]" )( // AHB-lite Master Interface - ADP input wire HCLK, @@ -30,124 +27,29 @@ module socdebug_ahb #( input wire HREADY_i, input wire HRESP_i, - // APB Slave Interface - USRT - input wire PCLK, // Clock - input wire PCLKG, // Gated Clock - input wire PRESETn, // Reset - - input wire PSEL_i, // Device select - input wire [11:2] PADDR_i, // Address - input wire PENABLE_i, // Transfer control - input wire PWRITE_i, // Write control - input wire [31:0] PWDATA_i, // Write data - - output wire [31:0] PRDATA_o, // Read data - output wire PREADY_o, // Device ready - output wire PSLVERR_o, // Device error response + // USRT0 TXD axi byte stream + output wire ADP_RXD_TVALID_o, + output wire [ 7:0] ADP_RXD_TDATA_o , + input wire ADP_RXD_TREADY_i, + // USRT0 RXD axi byte stream + input wire ADP_TXD_TVALID_i, + input wire [ 7:0] ADP_TXD_TDATA_i , + output wire ADP_TXD_TREADY_o, - // FT1248 Interace - FT1248 - output wire FT_CLK_O, // SCLK - output wire FT_SSN_O, // SS_N - input wire FT_MISO_I, // MISO - output wire [FT1248_WIDTH-1:0] FT_MIOSIO_O, // MIOSIO tristate output when enabled - output wire [FT1248_WIDTH-1:0] FT_MIOSIO_E, // MIOSIO tristate output enable (active hi) - output wire [FT1248_WIDTH-1:0] FT_MIOSIO_Z, // MIOSIO tristate output enable (active lo) - input wire [FT1248_WIDTH-1:0] FT_MIOSIO_I, // MIOSIO tristate input + // USRT0 TXD axi byte stream + output wire STD_RXD_TVALID_o, + output wire [ 7:0] STD_RXD_TDATA_o , + input wire STD_RXD_TREADY_i, + // USRT0 RXD axi byte stream + input wire STD_TXD_TVALID_i, + input wire [ 7:0] STD_TXD_TDATA_i , + output wire STD_TXD_TREADY_o, // GPIO interface output wire [7:0] GPO8_o, input wire [7:0] GPI8_i ); - // FT1248 to ADP Bus - wire FT1248_ADP_TVALID; - wire [ 7:0] FT1248_ADP_TDATA; - wire FT1248_ADP_TREADY; - - // ADP to FT1248 Bus - wire ADP_FT1248_TVALID; - wire [ 7:0] ADP_FT1248_TDATA; - wire ADP_FT1248_TREADY; - - // USRT to ADP Bus - wire USRT_ADP_TVALID; - wire [ 7:0] USRT_ADP_TDATA; - wire USRT_ADP_TREADY; - - // ADP to USRT Bus - wire ADP_USRT_TVALID; - wire [ 7:0] ADP_USRT_TDATA; - wire ADP_USRT_TREADY; - - // Clock Divsion Ratio - wire [7:0] FT_CLKDIV; - assign FT_CLKDIV = FT1248_CLKDIV; - - // Instantiation of USRT Controller - socdebug_usrt_control u_usrt_control ( - // APB Clock and Reset Signals - .PCLK (PCLK), - .PCLKG (PCLKG), // Gated PCLK for bus - .PRESETn (PRESETn), - - // APB Interface Signals - .PSEL (PSEL_i), - .PADDR (PADDR_i), - .PENABLE (PENABLE_i), - .PWRITE (PWRITE_i), - .PWDATA (PWDATA_i), - .PRDATA (PRDATA_o), - .PREADY (PREADY_o), - .PSLVERR (PSLVERR_o), - - .ECOREVNUM (4'h0), - - // ADP Interface - From USRT to ADP - .TX_VALID_o (USRT_ADP_TVALID), - .TX_DATA8_o (USRT_ADP_TDATA), - .TX_READY_i (USRT_ADP_TREADY), - - // ADP Interface - From ADP to USRT - .RX_VALID_i (ADP_USRT_TVALID), - .RX_DATA8_i (ADP_USRT_TDATA), - .RX_READY_o (ADP_USRT_TREADY), - - // Interrupt Interfaces - .TXINT ( ), // Transmit Interrupt - .RXINT ( ), // Receive Interrupt - .TXOVRINT ( ), // Transmit Overrun Interrupt - .RXOVRINT ( ), // Receive Overrun Interrupt - .UARTINT ( ) // Combined Interrupt - ); - - // Instantiation of FT1248 Controller - socdebug_ft1248_control #( - .FT1248_WIDTH (FT1248_WIDTH), - .FT1248_CLKON (FT1248_CLKON) - ) u_ft1248_control ( - .clk (HCLK), - .resetn (HRESETn), - .ft_clkdiv (FT_CLKDIV), - .ft_clk_o (FT_CLK_O), - .ft_ssn_o (FT_SSN_O), - .ft_miso_i (FT_MISO_I), - .ft_miosio_o (FT_MIOSIO_O), - .ft_miosio_e (FT_MIOSIO_E), - .ft_miosio_z (FT_MIOSIO_Z), - .ft_miosio_i (FT_MIOSIO_I), - - // ADP Interface - FT1248 to ADP - .txd_tvalid (FT1248_ADP_TVALID), - .txd_tdata (FT1248_ADP_TDATA), - .txd_tready (FT1248_ADP_TREADY), - .txd_tlast ( ), - - // ADP Interface - ADP to FT1248 - .rxd_tvalid (ADP_FT1248_TVALID), - .rxd_tdata (ADP_FT1248_TDATA), - .rxd_tready (ADP_FT1248_TREADY), - .rxd_tlast (1'b0) - ); // Instantiation of ADP AHB Controller socdebug_adp_control #( @@ -173,25 +75,25 @@ module socdebug_ahb #( .GPI8_i (GPI8_i), // USRT Interface - From ADP to USRT - .STDTX_TVALID_o (ADP_USRT_TVALID), - .STDTX_TDATA_o (ADP_USRT_TDATA), - .STDTX_TREADY_i (ADP_USRT_TREADY), + .STDTX_TVALID_o (STD_RXD_TVALID_o), + .STDTX_TDATA_o (STD_RXD_TDATA_o ), + .STDTX_TREADY_i (STD_RXD_TREADY_i), // USRT Interface - From USRT to ADP - .STDRX_TVALID_i (USRT_ADP_TVALID), - .STDRX_TDATA_i (USRT_ADP_TDATA), - .STDRX_TREADY_o (USRT_ADP_TREADY), + .STDRX_TVALID_i (STD_TXD_TVALID_i), + .STDRX_TDATA_i (STD_TXD_TDATA_i ), + .STDRX_TREADY_o (STD_TXD_TREADY_o), // FT1248 Interface - From FT1248 to ADP - .COMRX_TVALID_i (FT1248_ADP_TVALID), - .COMRX_TDATA_i (FT1248_ADP_TDATA), - .COMRX_TREADY_o (FT1248_ADP_TREADY), + .COMRX_TVALID_i (ADP_TXD_TVALID_i), + .COMRX_TDATA_i (ADP_TXD_TDATA_i ), + .COMRX_TREADY_o (ADP_TXD_TREADY_o), // FT1248 Interface - From ADP to FT1248 - .COMTX_TVALID_o (ADP_FT1248_TVALID), - .COMTX_TDATA_o (ADP_FT1248_TDATA), - .COMTX_TREADY_i (ADP_FT1248_TREADY) + .COMTX_TVALID_o (ADP_RXD_TVALID_o), + .COMTX_TDATA_o (ADP_RXD_TDATA_o ), + .COMTX_TREADY_i (ADP_RXD_TREADY_i) ); -endmodule \ No newline at end of file +endmodule diff --git a/controller/verilog/socdebug_usrt_control.v b/controller/verilog/socdebug_usrt_control.v index 7222fbd5e53c54c49c71aaf66bbedf184d3d8aa2..e65041d581d60f79f648c5c1b4b555fc1f1b5571 100644 --- a/controller/verilog/socdebug_usrt_control.v +++ b/controller/verilog/socdebug_usrt_control.v @@ -39,24 +39,24 @@ // 0x00 R RXD[7:0] Received Data // W TXD[7:0] Transmit data // 0x04 RW STAT[3:0] -// [3] RX buffer overrun (write 1 to clear) -// [2] TX buffer overrun (write 1 to clear) +// [3] RX buffer overrun (write 1 to clear) // 0 for USRT +// [2] TX buffer overrun (write 1 to clear) // 0 for USRT // [1] RX buffer full (Read only) // [0] TX buffer full (Read only) // 0x08 RW CTRL[3:0] TxIntEn, RxIntEn, TxEn, RxEn // [6] High speed test mode Enable -// [5] RX overrun interrupt enable -// [4] TX overrun interrupt enable +// [5] RX overrun interrupt enable // N/A for USRT +// [4] TX overrun interrupt enable // N/A for USRT // [3] RX Interrupt Enable // [2] TX Interrupt Enable // [1] RX Enable // [0] TX Enable // 0x0C R/Wc intr_status/INTCLEAR -// [3] RX overrun interrupt -// [2] TX overrun interrupt +// [3] RX overrun interrupt // 0 for USRT +// [2] TX overrun interrupt // 0 for USRT // [1] RX interrupt // [0] TX interrupt -// 0x10 RW BAUDDIV[19:0] Baud divider +// 0x10 RW BAUDDIV[19:0] Baud divider // Not Used for USRT // (minimum value is 16) // 0x3E0 - 0x3FC ID registers //------------------------------------- @@ -101,13 +101,13 @@ localparam ARM_CMSDK_APB_UART_PID5 = 8'h00; localparam ARM_CMSDK_APB_UART_PID6 = 8'h00; localparam ARM_CMSDK_APB_UART_PID7 = 8'h00; localparam ARM_CMSDK_APB_UART_PID0 = 8'h21; -localparam ARM_CMSDK_APB_UART_PID1 = 8'hB8; -localparam ARM_CMSDK_APB_UART_PID2 = 8'h1B; +localparam ARM_CMSDK_APB_UART_PID1 = 8'hb8; +localparam ARM_CMSDK_APB_UART_PID2 = 8'h1b; localparam ARM_CMSDK_APB_UART_PID3 = 4'h0; -localparam ARM_CMSDK_APB_UART_CID0 = 8'h0D; -localparam ARM_CMSDK_APB_UART_CID1 = 8'hF0; +localparam ARM_CMSDK_APB_UART_CID0 = 8'h0d; +localparam ARM_CMSDK_APB_UART_CID1 = 8'hf0; localparam ARM_CMSDK_APB_UART_CID2 = 8'h05; -localparam ARM_CMSDK_APB_UART_CID3 = 8'hB1; +localparam ARM_CMSDK_APB_UART_CID3 = 8'hb1; // original external IOs wire RXD = 1'b1; // Serial input @@ -411,7 +411,7 @@ assign write_enable10 = write_enable & (PADDR[11:2] == 10'h004); begin if (~PRESETn) tx_buf_full <= 1'b0; - else if (write_enable00) // | tx_buf_clear) + else if (write_enable00 & reg_ctrl[0]) // | tx_buf_clear) tx_buf_full <= write_enable00; else if (tx_buf_full & TX_READY_i) // AXI stream ack tx_buf_full <= 0; @@ -619,7 +619,7 @@ assign RX_READY_o = !rx_buf_full; begin if (~PRESETn) rx_buf_full <= 1'b0; - else if (rxbuf_sample | rx_data_read) + else if ( & reg_ctrl[1] & (rxbuf_sample | rx_data_read)) rx_buf_full <= nxt_rx_buf_full; end