blob: a63652d1a9aa42500c25932fb544923b66f3b75d [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// Description: UART top level wrapper file
module uart (
input clk_i,
input rst_ni,
// Bus Interface
input tlul_pkg::tl_h2d_t tl_i,
output tlul_pkg::tl_d2h_t tl_o,
// Generic IO
input cio_rx_i,
output logic cio_tx_o,
output logic cio_tx_en_o,
// Interrupts
output logic intr_tx_watermark_o ,
output logic intr_rx_watermark_o ,
output logic intr_tx_overflow_o ,
output logic intr_rx_overflow_o ,
output logic intr_rx_frame_err_o ,
output logic intr_rx_break_err_o ,
output logic intr_rx_timeout_o ,
output logic intr_rx_parity_err_o
);
// TODO: same as in spi_device.sv, add input scanmode_i to module
logic scanmode_i;
assign scanmode_i = 1'b0;
import uart_reg_pkg::*;
uart_reg2hw_t reg2hw;
uart_hw2reg_t hw2reg;
uart_reg_top u_reg (
.clk_i,
.rst_ni,
.tl_i,
.tl_o,
.reg2hw,
.hw2reg,
.devmode_i (1'b1)
);
uart_core uart_core (
.clk_i,
.rst_ni,
.scanmode_i,
.reg2hw,
.hw2reg,
.rx (cio_rx_i ),
.tx (cio_tx_o ),
.intr_tx_watermark_o,
.intr_rx_watermark_o,
.intr_tx_overflow_o,
.intr_rx_overflow_o,
.intr_rx_frame_err_o,
.intr_rx_break_err_o,
.intr_rx_timeout_o,
.intr_rx_parity_err_o
);
// always enable the driving out of TX
assign cio_tx_en_o = 1'b1;
// make sure scanmode_i is never X (including during reset)
`ASSERT_KNOWN(scanmodeKnown, scanmode_i, clk_i, 0)
// Assert Known for outputs
`ASSERT_KNOWN(txenKnown, cio_tx_en_o, clk_i, !rst_ni)
`ASSERT_KNOWN(txKnown, cio_tx_o, clk_i, !rst_ni || !cio_tx_en_o)
// Assert Known for interrupts
`ASSERT_KNOWN(txWatermarkKnown, intr_tx_watermark_o, clk_i, !rst_ni)
`ASSERT_KNOWN(rxWatermarkKnown, intr_rx_watermark_o, clk_i, !rst_ni)
`ASSERT_KNOWN(txOverflowKnown, intr_tx_overflow_o, clk_i, !rst_ni)
`ASSERT_KNOWN(rxOverflowKnown, intr_rx_overflow_o, clk_i, !rst_ni)
`ASSERT_KNOWN(rxFrameErrKnown, intr_rx_frame_err_o, clk_i, !rst_ni)
`ASSERT_KNOWN(rxBreakErrKnown, intr_rx_break_err_o, clk_i, !rst_ni)
`ASSERT_KNOWN(rxTimeoutKnown, intr_rx_timeout_o, clk_i, !rst_ni)
`ASSERT_KNOWN(rxParityErrKnown, intr_rx_parity_err_o, clk_i, !rst_ni)
endmodule