Entity: xpu
- File: xpu.v
Diagram
Description
Xianjun jiao. putaoshu@msn.com; xianjun.jiao@imec.be; `define DEBUG_PREFIX (mark_debug="true",DONT_TOUCH="TRUE")
Generics
| Generic name | Type | Value | Description |
|---|---|---|---|
| GPIO_STATUS_WIDTH | integer | 8 | |
| DELAY_CTL_WIDTH | integer | 7 | |
| RSSI_HALF_DB_WIDTH | integer | 11 | |
| IQ_RSSI_HALF_DB_WIDTH | integer | 9 | |
| C_S00_AXIS_TDATA_WIDTH | integer | 64 | |
| IQ_DATA_WIDTH | integer | 16 | |
| WIFI_TX_BRAM_DATA_WIDTH | integer | 64 | |
| C_S00_AXI_DATA_WIDTH | integer | 32 | |
| C_S00_AXI_ADDR_WIDTH | integer | 8 | |
| TSF_TIMER_WIDTH | integer | 64 | according to 802.11 standard |
| WIFI_TX_BRAM_ADDR_WIDTH | integer | 10 |
Ports
| Port name | Direction | Type | Description |
|---|---|---|---|
| git_rev | input | wire [31:0] | |
| gpio_status | input | wire [(GPIO_STATUS_WIDTH-1):0] | ad9361 status and ctrl |
| ddc_i | input | wire signed [(IQ_DATA_WIDTH-1):0] | Ports to rx_intf |
| ddc_q | input | wire signed [(IQ_DATA_WIDTH-1):0] | |
| ddc_iq_valid | input | wire | |
| mute_adc_out_to_bb | output | wire | when tx, mute self rx |
| block_rx_dma_to_ps | output | wire | should valid from filter on to fcs valid |
| block_rx_dma_to_ps_valid | output | wire | should valid from filter on to fcs valid |
| rssi_half_db_lock_by_sig_valid | output | wire signed [(RSSI_HALF_DB_WIDTH-1):0] | |
| gpio_status_lock_by_sig_valid | output | wire [(GPIO_STATUS_WIDTH-1):0] | |
| tsf_runtime_val | output | wire [(TSF_TIMER_WIDTH-1):0] | |
| tsf_pulse_1M | output | wire | |
| rssi_half_db | output | wire signed [(RSSI_HALF_DB_WIDTH-1):0] | Ports to openofdm rx |
| demod_is_ongoing | input | wire | |
| pkt_header_valid | input | wire | input wire pkt_begin,input wire pkt_ht, |
| pkt_header_valid_strobe | input | wire | |
| ht_unsupport | input | wire | |
| pkt_rate | input | wire [7:0] | |
| pkt_len | input | wire [15:0] | |
| byte_in_strobe | input | wire | input wire [15:0] pkt_len_total, // for interface to byte_to_word.v in rx_intf.v |
| byte_in | input | wire [7:0] | |
| byte_count | input | wire [15:0] | input wire [15:0] byte_count_total, // for interface to byte_to_word.v in rx_intf.v |
| fcs_in_strobe | input | wire | |
| fcs_ok | input | wire | |
| phy_tx_started | input | wire | Ports to phy_tx |
| phy_tx_done | input | wire | |
| tx_status | output | wire [4:0] | Ports to tx_intf |
| mac_addr | output | wire [47:0] | |
| retrans_in_progress | output | wire | |
| start_retrans | output | wire | |
| start_tx_ack | output | wire | |
| tx_try_complete | output | wire | |
| tx_iq_fifo_empty | input | wire | |
| high_tx_allowed0 | output | wire | |
| high_tx_allowed1 | output | wire | |
| high_tx_allowed2 | output | wire | |
| high_tx_allowed3 | output | wire | |
| tx_bb_is_ongoing | output | wire | |
| tx_rf_is_ongoing | output | wire | |
| ack_tx_flag | output | wire | |
| wea | output | wire | |
| addra | output | wire [9:0] | |
| dina | output | wire [(C_S00_AXIS_TDATA_WIDTH-1):0] | |
| tx_pkt_need_ack | input | wire | |
| tx_pkt_retrans_limit | input | wire [3:0] | |
| douta | input | wire [(WIFI_TX_BRAM_DATA_WIDTH-1):0] | from dpram of tx_intf, for tx_control changing some bits to indicate it is the 1st pkt or retransmitted pkt |
| cts_toself_bb_is_ongoing | input | wire | this should rise before the phy tx end valid of phy tx IP core to avoid tx_control waiting ack for this tx |
| cts_toself_rf_is_ongoing | input | wire | just need to cover the SIFS gap between cts tx and following packet tx |
| bram_addr | input | wire [(WIFI_TX_BRAM_ADDR_WIDTH-1):0] | |
| band | output | wire [3:0] | |
| channel | output | wire [7:0] | |
| quit_retrans | input | wire | |
| tx_control_state_idle | output | wire | |
| num_slot_random | output | wire [9:0] | |
| cw | output | wire [3:0] | |
| high_trigger | input | wire | |
| tx_queue_idx | input | wire [1:0] | |
| FC_DI | output | wire [31:0] | to side channel |
| FC_DI_valid | output | wire | |
| addr1 | output | wire [47:0] | |
| addr1_valid | output | wire | |
| addr2 | output | wire [47:0] | |
| addr2_valid | output | wire | |
| addr3 | output | wire [47:0] | |
| addr3_valid | output | wire | |
| s00_axi_aclk | input | wire | Ports of Axi Slave Bus Interface S00_AXI |
| s00_axi_aresetn | input | wire | |
| s00_axi_awaddr | input | wire [C_S00_AXI_ADDR_WIDTH-1 : 0] | |
| s00_axi_awprot | input | wire [2 : 0] | |
| s00_axi_awvalid | input | wire | |
| s00_axi_awready | output | wire | |
| s00_axi_wdata | input | wire [C_S00_AXI_DATA_WIDTH-1 : 0] | |
| s00_axi_wstrb | input | wire [(C_S00_AXI_DATA_WIDTH/8)-1 : 0] | |
| s00_axi_wvalid | input | wire | |
| s00_axi_wready | output | wire | |
| s00_axi_bresp | output | wire [1 : 0] | |
| s00_axi_bvalid | output | wire | |
| s00_axi_bready | input | wire | |
| s00_axi_araddr | input | wire [C_S00_AXI_ADDR_WIDTH-1 : 0] | |
| s00_axi_arprot | input | wire [2 : 0] | |
| s00_axi_arvalid | input | wire | |
| s00_axi_arready | output | wire | |
| s00_axi_rdata | output | wire [C_S00_AXI_DATA_WIDTH-1 : 0] | |
| s00_axi_rresp | output | wire [1 : 0] | |
| s00_axi_rvalid | output | wire | |
| s00_axi_rready | input | wire |
Signals
| Name | Type | Description |
|---|---|---|
| slv_reg_wren_signal | wire | |
| slv_reg0 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | rst |
| slv_reg1 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | some source selection |
| slv_reg2 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | tsf load value low |
| slv_reg3 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | tsf load value high (the rising edge of msb will trigger loading) |
| slv_reg4 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | 19:16 band; 15:0 channel |
| slv_reg5 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | |
| slv_reg6 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | some static config: duration after fcs_strobe to force ch idle |
| slv_reg7 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | rssi report offset, and gpio delay ctrl for rssi calculation, and reset the fifo delay |
| slv_reg8 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | lbt rssi threshold [11:0] |
| slv_reg9 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | xIFS and slot time override for debug |
| slv_reg10 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | tx bb RF delay in number of clock |
| slv_reg11 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | max number of tx re-transmission |
| slv_reg16 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | receive ack time count top -- 2.4GHz |
| slv_reg17 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | receive ack time count top -- 5GHz |
| slv_reg18 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | before actual ack sending, wait until counter reach this value -- related to SIFS in different band. low 16bit 2.4GHz, high 16bit 5GHz |
| slv_reg19 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | |
| slv_reg20 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | slice count_total in bit [19:0]; slice selection in bit [21:20] |
| slv_reg21 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | slice count_start in bit [19:0]; slice selection in bit [21:20] |
| slv_reg22 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | slice count_end in bit [19:0]; slice selection in bit [21:20] |
| slv_reg26 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | extra duration in CTS frame (response to RTS) |
| slv_reg27 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | filter flags |
| slv_reg28 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | self bssid and filter enable |
| slv_reg29 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | self bssid and filter enable |
| slv_reg30 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | mac addr and filter enable |
| slv_reg31 | wire [(C_S00_AXI_DATA_WIDTH-1):0] | mac addr and filter enable |
| slv_reg58 | wire [C_S00_AXI_DATA_WIDTH-1:0] | tsf timer low |
| slv_reg59 | wire [C_S00_AXI_DATA_WIDTH-1:0] | tsf timer high |
| slv_reg63 | wire [C_S00_AXI_DATA_WIDTH-1:0] | FPGA version info |
| block_rx_dma_to_ps_internal | wire | |
| high_tx_allowed_internal0 | wire | |
| high_tx_allowed_internal1 | wire | |
| high_tx_allowed_internal2 | wire | |
| high_tx_allowed_internal3 | wire | |
| ch_idle | wire | |
| retrans_trigger | wire | |
| FC_version | wire [1:0] | wire [31:0] FC_DI; wire FC_DI_valid; |
| FC_type | wire [1:0] | |
| FC_subtype | wire [3:0] | |
| FC_to_ds | wire | |
| FC_from_ds | wire | |
| FC_more_frag | wire | |
| FC_retry | wire | |
| FC_power_manage | wire | |
| FC_more_data | wire | |
| FC_protected_frame | wire | |
| FC_order | wire | |
| duration | wire [15:0] | |
| SC | wire [15:0] | wire [47:0] addr1; wire addr1_valid; wire [47:0] addr2; wire addr2_valid; wire [47:0] addr3; wire addr3_valid; |
| SC_valid | wire | |
| SC_fragment_number | wire [3:0] | |
| SC_sequence_number | wire [11:0] | |
| addr4 | wire [47:0] | |
| addr4_valid | wire | |
| pulse_tx_bb_end | wire | |
| iq_rssi_half_db | wire [(IQ_RSSI_HALF_DB_WIDTH-1):0] | |
| iq_rssi_half_db_valid | wire | |
| rssi_half_db_valid | wire | |
| slice_en0 | wire | wire [4:0] tx_status; |
| slice_en1 | wire | |
| slice_en2 | wire | |
| slice_en3 | wire | |
| fcs_valid | wire | |
| sig_valid | wire | |
| ack_cts_is_ongoing | wire | |
| send_ack_wait_top | wire [14:0] | |
| recv_ack_timeout_top_adj | wire [14:0] | |
| recv_ack_sig_valid_timeout_top | wire [14:0] | |
| recv_ack_fcs_valid_disable | wire | |
| erp_short_slot | wire | |
| preamble_sig_time | wire [6:0] | |
| ofdm_symbol_time | wire [4:0] | |
| slot_time | wire [4:0] | |
| sifs_time | wire [6:0] | |
| phy_rx_start_delay_time | wire [6:0] | |
| cw_exp_used | wire [3:0] | |
| cw_exp_dynamic | wire [3:0] | |
| tx_try_complete_int | wire | |
| backoff_done | wire | |
| increase_cw | wire | |
| cw_used | wire |
Instantiations
- tx_on_detection_i: tx_on_detection
Description
assign slv_reg60 = rssi_half_db;
assign slv_reg61 = iq_rssi_half_db;
- csma_ca_i: csma_ca
- cw_exp_i: cw_exp
- tx_control_i: tx_control
- pkt_filter_ctl_i: pkt_filter_ctl
- phy_rx_parse_i: phy_rx_parse
- time_slice_gen_i: time_slice_gen
- xpu_s_axi_i: xpu_s_axi
Description
Instantiation of Axi Bus Interface S00_AXI