mirror of
https://github.com/retroSoC/retroSoC.git
synced 2026-11-04 22:32:36 +00:00
- Updated test files to change instances of ribp_if to apb4_if in various test cases, ensuring consistency with the new APB4 interface. - Modified assertions and checks in tests to reflect the new APB4 naming conventions, including changes in expected output and input files. - Adjusted the test descriptions to accurately represent the APB4 functionality being tested, particularly in timer, UART, and GPIO tests. - Ensured that all relevant paths and file names in the tests are updated to point to the new APB4 implementations, maintaining the integrity of the test suite.
178 lines
6.7 KiB
Systemverilog
178 lines
6.7 KiB
Systemverilog
// Copyright (c) 2026 Yuchi Miao <miaoyuchi@ict.ac.cn>
|
|
// retroSoC is licensed under Mulan PSL v2.
|
|
|
|
module apb4_i2c #(
|
|
parameter int CmdFifoDepth = 16,
|
|
parameter int RxFifoDepth = 16
|
|
) (
|
|
// verilog_format: off -- preserve reviewed column alignment
|
|
input logic clk_i,
|
|
input logic rst_n_i,
|
|
output logic dma_tx_stall_o,
|
|
output logic dma_rx_stall_o,
|
|
apb4_if.slave apb4,
|
|
i2c_if.dut i2c
|
|
// verilog_format: on
|
|
);
|
|
|
|
logic s_en;
|
|
logic [15:0] s_scl_low_cycles;
|
|
logic [15:0] s_scl_high_cycles;
|
|
logic [15:0] s_start_hold_cycles;
|
|
logic [15:0] s_start_setup_cycles;
|
|
logic [15:0] s_data_hold_cycles;
|
|
logic [15:0] s_data_setup_cycles;
|
|
logic [15:0] s_stop_setup_cycles;
|
|
logic [15:0] s_bus_free_cycles;
|
|
logic [ 3:0] s_scl_filter_cycles;
|
|
logic [ 3:0] s_sda_filter_cycles;
|
|
logic [23:0] s_stretch_timeout;
|
|
logic [23:0] s_bus_idle_timeout;
|
|
logic [23:0] s_cmd_timeout;
|
|
logic [ 9:0] s_target_addr;
|
|
logic s_ten_bit;
|
|
logic s_abort;
|
|
logic s_recover;
|
|
logic s_cmd_valid;
|
|
logic [11:0] s_cmd_data;
|
|
logic s_cmd_pop;
|
|
logic s_rx_push;
|
|
logic [ 7:0] s_rx_data;
|
|
logic s_rx_full;
|
|
logic s_busy;
|
|
logic s_recovery_active;
|
|
logic s_scl_filtered;
|
|
logic s_sda_filtered;
|
|
logic s_scl_pull_low;
|
|
logic s_sda_pull_low;
|
|
logic s_done_event;
|
|
logic s_addr_nack_event;
|
|
logic s_data_nack_event;
|
|
logic s_arb_lost_event;
|
|
logic s_stretch_timeout_event;
|
|
logic s_bus_timeout_event;
|
|
logic s_cmd_timeout_event;
|
|
logic s_cmd_err_event;
|
|
logic s_rx_overflow_event;
|
|
logic s_aborted_event;
|
|
logic s_recovery_done_event;
|
|
logic s_recovery_failed_event;
|
|
logic s_core_cmd_flush;
|
|
|
|
assign i2c.scl_o = 1'b0;
|
|
assign i2c.sda_o = 1'b0;
|
|
assign i2c.scl_oe_o = s_scl_pull_low;
|
|
assign i2c.sda_oe_o = s_sda_pull_low;
|
|
|
|
i2c_filter u_i2c_filter (
|
|
.clk_i (clk_i),
|
|
.rst_n_i (rst_n_i),
|
|
.scl_filter_cycles_i(s_scl_filter_cycles),
|
|
.sda_filter_cycles_i(s_sda_filter_cycles),
|
|
.scl_async_i (i2c.scl_i),
|
|
.sda_async_i (i2c.sda_i),
|
|
.scl_o (s_scl_filtered),
|
|
.sda_o (s_sda_filtered)
|
|
);
|
|
|
|
i2c_reg #(
|
|
.CmdFifoDepth(CmdFifoDepth),
|
|
.RxFifoDepth (RxFifoDepth)
|
|
) u_i2c_reg (
|
|
.clk_i (clk_i),
|
|
.rst_n_i (rst_n_i),
|
|
.apb4 (apb4),
|
|
.enable_o (s_en),
|
|
.scl_low_cycles_o (s_scl_low_cycles),
|
|
.scl_high_cycles_o (s_scl_high_cycles),
|
|
.start_hold_cycles_o (s_start_hold_cycles),
|
|
.start_setup_cycles_o (s_start_setup_cycles),
|
|
.data_hold_cycles_o (s_data_hold_cycles),
|
|
.data_setup_cycles_o (s_data_setup_cycles),
|
|
.stop_setup_cycles_o (s_stop_setup_cycles),
|
|
.bus_free_cycles_o (s_bus_free_cycles),
|
|
.scl_filter_cycles_o (s_scl_filter_cycles),
|
|
.sda_filter_cycles_o (s_sda_filter_cycles),
|
|
.stretch_timeout_o (s_stretch_timeout),
|
|
.bus_idle_timeout_o (s_bus_idle_timeout),
|
|
.command_timeout_o (s_cmd_timeout),
|
|
.target_addr_o (s_target_addr),
|
|
.ten_bit_o (s_ten_bit),
|
|
.abort_o (s_abort),
|
|
.recover_o (s_recover),
|
|
.cmd_valid_o (s_cmd_valid),
|
|
.cmd_data_o (s_cmd_data),
|
|
.cmd_pop_i (s_cmd_pop),
|
|
.core_cmd_flush_i (s_core_cmd_flush),
|
|
.rx_push_i (s_rx_push),
|
|
.rx_data_i (s_rx_data),
|
|
.rx_full_o (s_rx_full),
|
|
.busy_i (s_busy),
|
|
.recovery_active_i (s_recovery_active),
|
|
.scl_i (s_scl_filtered),
|
|
.sda_i (s_sda_filtered),
|
|
.done_event_i (s_done_event),
|
|
.addr_nack_event_i (s_addr_nack_event),
|
|
.data_nack_event_i (s_data_nack_event),
|
|
.arb_lost_event_i (s_arb_lost_event),
|
|
.stretch_timeout_event_i(s_stretch_timeout_event),
|
|
.bus_timeout_event_i (s_bus_timeout_event),
|
|
.command_timeout_event_i(s_cmd_timeout_event),
|
|
.command_error_event_i (s_cmd_err_event),
|
|
.rx_overflow_event_i (s_rx_overflow_event),
|
|
.aborted_event_i (s_aborted_event),
|
|
.recovery_done_event_i (s_recovery_done_event),
|
|
.recovery_failed_event_i(s_recovery_failed_event),
|
|
.dma_tx_stall_o (dma_tx_stall_o),
|
|
.dma_rx_stall_o (dma_rx_stall_o),
|
|
.irq_o (i2c.irq_o)
|
|
);
|
|
|
|
i2c_core u_i2c_core (
|
|
.clk_i (clk_i),
|
|
.rst_n_i (rst_n_i),
|
|
.enable_i (s_en),
|
|
.scl_low_cycles_i (s_scl_low_cycles),
|
|
.scl_high_cycles_i (s_scl_high_cycles),
|
|
.start_hold_cycles_i (s_start_hold_cycles),
|
|
.start_setup_cycles_i (s_start_setup_cycles),
|
|
.data_hold_cycles_i (s_data_hold_cycles),
|
|
.data_setup_cycles_i (s_data_setup_cycles),
|
|
.stop_setup_cycles_i (s_stop_setup_cycles),
|
|
.bus_free_cycles_i (s_bus_free_cycles),
|
|
.stretch_timeout_i (s_stretch_timeout),
|
|
.bus_idle_timeout_i (s_bus_idle_timeout),
|
|
.command_timeout_i (s_cmd_timeout),
|
|
.target_addr_i (s_target_addr),
|
|
.ten_bit_i (s_ten_bit),
|
|
.abort_i (s_abort),
|
|
.recover_i (s_recover),
|
|
.cmd_valid_i (s_cmd_valid),
|
|
.cmd_data_i (s_cmd_data),
|
|
.cmd_pop_o (s_cmd_pop),
|
|
.cmd_flush_o (s_core_cmd_flush),
|
|
.rx_full_i (s_rx_full),
|
|
.rx_push_o (s_rx_push),
|
|
.rx_data_o (s_rx_data),
|
|
.scl_i (s_scl_filtered),
|
|
.sda_i (s_sda_filtered),
|
|
.scl_pull_low_o (s_scl_pull_low),
|
|
.sda_pull_low_o (s_sda_pull_low),
|
|
.busy_o (s_busy),
|
|
.recovery_active_o (s_recovery_active),
|
|
.done_event_o (s_done_event),
|
|
.addr_nack_event_o (s_addr_nack_event),
|
|
.data_nack_event_o (s_data_nack_event),
|
|
.arb_lost_event_o (s_arb_lost_event),
|
|
.stretch_timeout_event_o(s_stretch_timeout_event),
|
|
.bus_timeout_event_o (s_bus_timeout_event),
|
|
.command_timeout_event_o(s_cmd_timeout_event),
|
|
.command_error_event_o (s_cmd_err_event),
|
|
.rx_overflow_event_o (s_rx_overflow_event),
|
|
.aborted_event_o (s_aborted_event),
|
|
.recovery_done_event_o (s_recovery_done_event),
|
|
.recovery_failed_event_o(s_recovery_failed_event)
|
|
);
|
|
|
|
endmodule
|