1
0
mirror of https://github.com/aolofsson/oh.git synced 2025-01-30 02:32:53 +08:00
oh/mio/hdl/mtx.v
2020-01-28 18:12:57 -05:00

96 lines
3.3 KiB
Verilog

//#############################################################################
//# Purpose: MIO Transmit Datapath #
//#############################################################################
//# Author: Andreas Olofsson #
//# License: MIT (see LICENSE file in OH! repository) #
//#############################################################################
module mtx # ( parameter PW = 104, // fifo width
parameter AW = 32, // fifo width
parameter IOW = 8, // I./O data width
parameter FIFO_DEPTH = 16, // fifo depth
parameter TARGET = "GENERIC" // fifo target
)
(// reset, clk, cfg
input clk, // main core clock
input io_clk, // clock for tx logic
input nreset, // async active low reset
input tx_en, // transmit enable
input ddr_mode, // configure mio in ddr mode
input lsbfirst, // send bits lsb first
input emode, //emesh mode
input [1:0] iowidth,//input width
// status
output tx_empty, // tx fifo is empty
output tx_full, // tx fifo is full (should never happen!)
output tx_prog_full,// tx is getting full (stop sending!)
// data to transmit
input access_in, // fifo data valid
input [PW-1:0] packet_in, // fifo packet
output wait_out, // wait pushback for fifo
// IO interface (90 deg clock supplied outside this block)
output tx_access, // access signal for IO
output [IOW-1:0] tx_packet, // packet for IO
input tx_wait // pushback from IO
);
//###############
//# LOCAL WIRES
//###############
// End of automatics
/*AUTOINPUT*/
/*AUTOWIRE*/
// Beginning of automatic wires (for undeclared instantiated-module outputs)
wire [63:0] io_packet; // From mtx_fifo of mtx_fifo.v
wire [7:0] io_valid; // From mtx_fifo of mtx_fifo.v
wire io_wait; // From mtx_io of mtx_io.v
// End of automatics
//########################################
//# Synchronization FIFO
//########################################
mtx_fifo #(.PW(PW),
.AW(AW),
.FIFO_DEPTH(FIFO_DEPTH),
.TARGET(TARGET))
mtx_fifo (/*AUTOINST*/
// Outputs
.wait_out (wait_out),
.io_packet (io_packet[63:0]),
.io_valid (io_valid[7:0]),
// Inputs
.clk (clk),
.io_clk (io_clk),
.nreset (nreset),
.tx_en (tx_en),
.emode (emode),
.access_in (access_in),
.packet_in (packet_in[PW-1:0]),
.io_wait (io_wait));
//########################################
//# IO Logic (DDR, shift register)
//########################################
mtx_io #(.IOW(IOW))
mtx_io (/*AUTOINST*/
// Outputs
.tx_packet (tx_packet[IOW-1:0]),
.tx_access (tx_access),
.io_wait (io_wait),
// Inputs
.nreset (nreset),
.io_clk (io_clk),
.ddr_mode (ddr_mode),
.iowidth (iowidth[1:0]),
.tx_wait (tx_wait),
.io_valid (io_valid[7:0]),
.io_packet (io_packet[IOW-1:0]));
endmodule // mtx
// Local Variables:
// verilog-library-directories:("." "../../common/hdl")
// End: