2014-12-14 17:18:53 -05:00
|
|
|
module erx (/*AUTOARG*/
|
|
|
|
// Outputs
|
2015-05-13 23:29:18 -04:00
|
|
|
rx_clk_pll, rxo_wr_wait_p, rxo_wr_wait_n, rxo_rd_wait_p,
|
2015-05-01 17:58:16 -04:00
|
|
|
rxo_rd_wait_n, rxwr_access, rxwr_packet, rxrd_access, rxrd_packet,
|
|
|
|
rxrr_access, rxrr_packet, erx_cfg_wait, timeout, mailbox_full,
|
|
|
|
mailbox_not_empty,
|
2014-12-14 17:18:53 -05:00
|
|
|
// Inputs
|
2015-05-13 23:29:18 -04:00
|
|
|
reset, ioreset, sys_clk, rx_lclk, rx_lclk_div4, rxi_lclk_p,
|
|
|
|
rxi_lclk_n, rxi_frame_p, rxi_frame_n, rxi_data_p, rxi_data_n,
|
|
|
|
rxwr_wait, rxrd_wait, rxrr_wait, erx_cfg_access, erx_cfg_packet
|
2014-12-14 17:18:53 -05:00
|
|
|
);
|
|
|
|
|
2015-04-23 23:16:03 -04:00
|
|
|
parameter AW = 32;
|
|
|
|
parameter DW = 32;
|
|
|
|
parameter PW = 104;
|
2015-05-01 17:58:16 -04:00
|
|
|
parameter RFAW = 6;
|
2015-04-23 23:16:03 -04:00
|
|
|
parameter ID = 12'h800;
|
2015-05-01 17:58:16 -04:00
|
|
|
|
2015-05-13 23:29:18 -04:00
|
|
|
//Clocks,reset,config
|
|
|
|
input reset; // reset for core logic
|
|
|
|
input ioreset; // reset for io
|
|
|
|
input sys_clk; // system clock for rx fifos
|
|
|
|
input rx_lclk; // fast clock for io
|
|
|
|
input rx_lclk_div4; // slow clock for rest of logic
|
|
|
|
output rx_clk_pll; // clock output for pll
|
2015-05-10 23:38:08 -04:00
|
|
|
|
2015-04-23 18:04:39 -04:00
|
|
|
//FROM IO Pins
|
2015-05-13 23:29:18 -04:00
|
|
|
input rxi_lclk_p, rxi_lclk_n; // rx clock input
|
|
|
|
input rxi_frame_p, rxi_frame_n; // rx frame signal
|
|
|
|
input [7:0] rxi_data_p, rxi_data_n; // rx data
|
|
|
|
output rxo_wr_wait_p,rxo_wr_wait_n; // rx write pushback output
|
|
|
|
output rxo_rd_wait_p,rxo_rd_wait_n; // rx read pushback output
|
2014-12-14 17:18:53 -05:00
|
|
|
|
2015-04-23 18:04:39 -04:00
|
|
|
//Master write
|
|
|
|
output rxwr_access;
|
|
|
|
output [PW-1:0] rxwr_packet;
|
|
|
|
input rxwr_wait;
|
|
|
|
|
|
|
|
//Master read request
|
|
|
|
output rxrd_access;
|
|
|
|
output [PW-1:0] rxrd_packet;
|
|
|
|
input rxrd_wait;
|
|
|
|
|
|
|
|
//Slave read response
|
|
|
|
output rxrr_access;
|
|
|
|
output [PW-1:0] rxrr_packet;
|
|
|
|
input rxrr_wait;
|
2015-04-13 23:35:21 -04:00
|
|
|
|
2015-05-01 17:58:16 -04:00
|
|
|
//Configuration Interface (from ETX)
|
|
|
|
input erx_cfg_access;
|
|
|
|
input [PW-1:0] erx_cfg_packet;
|
|
|
|
output erx_cfg_wait;
|
2015-04-29 11:55:01 -04:00
|
|
|
|
2015-05-01 17:58:16 -04:00
|
|
|
//Readback timeout (synchronized to sys_c
|
2015-04-27 15:11:56 -04:00
|
|
|
output timeout;
|
2015-05-01 17:58:16 -04:00
|
|
|
output mailbox_full;
|
|
|
|
output mailbox_not_empty;
|
2015-04-27 15:11:56 -04:00
|
|
|
|
2014-12-14 17:18:53 -05:00
|
|
|
/*AUTOOUTPUT*/
|
|
|
|
/*AUTOINPUT*/
|
2015-04-13 23:35:21 -04:00
|
|
|
|
2014-12-14 17:18:53 -05:00
|
|
|
/*AUTOWIRE*/
|
|
|
|
// Beginning of automatic wires (for undeclared instantiated-module outputs)
|
2015-05-13 23:29:18 -04:00
|
|
|
wire rx_access; // From erx_io of erx_io.v
|
|
|
|
wire rx_burst; // From erx_io of erx_io.v
|
|
|
|
wire [PW-1:0] rx_packet; // From erx_io of erx_io.v
|
2015-05-10 23:38:08 -04:00
|
|
|
wire rx_rd_wait; // From erx_core of erx_core.v
|
|
|
|
wire rx_wr_wait; // From erx_core of erx_core.v
|
|
|
|
wire rxrd_fifo_access; // From erx_core of erx_core.v
|
|
|
|
wire [PW-1:0] rxrd_fifo_packet; // From erx_core of erx_core.v
|
|
|
|
wire rxrd_fifo_wait; // From erx_fifo of erx_fifo.v
|
|
|
|
wire rxrr_fifo_access; // From erx_core of erx_core.v
|
|
|
|
wire [PW-1:0] rxrr_fifo_packet; // From erx_core of erx_core.v
|
|
|
|
wire rxrr_fifo_wait; // From erx_fifo of erx_fifo.v
|
|
|
|
wire rxwr_fifo_access; // From erx_core of erx_core.v
|
|
|
|
wire [PW-1:0] rxwr_fifo_packet; // From erx_core of erx_core.v
|
|
|
|
wire rxwr_fifo_wait; // From erx_fifo of erx_fifo.v
|
2014-12-14 17:18:53 -05:00
|
|
|
// End of automatics
|
2014-12-14 22:24:16 -05:00
|
|
|
|
2015-05-01 17:58:16 -04:00
|
|
|
/***********************************************************/
|
|
|
|
/*RECEIVER I/O LOGIC */
|
|
|
|
/***********************************************************/
|
|
|
|
erx_io erx_io (
|
|
|
|
/*AUTOINST*/
|
|
|
|
// Outputs
|
2015-05-13 23:29:18 -04:00
|
|
|
.rx_clk_pll (rx_clk_pll),
|
2015-05-01 17:58:16 -04:00
|
|
|
.rxo_wr_wait_p (rxo_wr_wait_p),
|
|
|
|
.rxo_wr_wait_n (rxo_wr_wait_n),
|
|
|
|
.rxo_rd_wait_p (rxo_rd_wait_p),
|
|
|
|
.rxo_rd_wait_n (rxo_rd_wait_n),
|
2015-05-13 23:29:18 -04:00
|
|
|
.rx_access (rx_access),
|
|
|
|
.rx_burst (rx_burst),
|
|
|
|
.rx_packet (rx_packet[PW-1:0]),
|
2015-05-01 17:58:16 -04:00
|
|
|
// Inputs
|
|
|
|
.reset (reset),
|
2015-05-13 23:29:18 -04:00
|
|
|
.rx_lclk (rx_lclk),
|
|
|
|
.rx_lclk_div4 (rx_lclk_div4),
|
2015-05-01 17:58:16 -04:00
|
|
|
.rxi_lclk_p (rxi_lclk_p),
|
|
|
|
.rxi_lclk_n (rxi_lclk_n),
|
|
|
|
.rxi_frame_p (rxi_frame_p),
|
|
|
|
.rxi_frame_n (rxi_frame_n),
|
|
|
|
.rxi_data_p (rxi_data_p[7:0]),
|
|
|
|
.rxi_data_n (rxi_data_n[7:0]),
|
2015-05-10 23:38:08 -04:00
|
|
|
.rx_wr_wait (rx_wr_wait),
|
|
|
|
.rx_rd_wait (rx_rd_wait));
|
2015-05-13 23:29:18 -04:00
|
|
|
|
2015-05-01 17:58:16 -04:00
|
|
|
/**************************************************************/
|
2015-05-10 23:38:08 -04:00
|
|
|
/*ELINK CORE LOGIC */
|
2015-05-01 17:58:16 -04:00
|
|
|
/**************************************************************/
|
2015-05-13 23:29:18 -04:00
|
|
|
/*erx_core AUTO_TEMPLATE ( .rx_packet (rx_packet[PW-1:0]),
|
|
|
|
.rx_access (rx_access),
|
2015-05-10 23:38:08 -04:00
|
|
|
.erx_cfg_access (erx_cfg_access),
|
|
|
|
.erx_cfg_packet (erx_cfg_packet[PW-1:0]),
|
|
|
|
.erx_cfg_wait (erx_cfg_wait),
|
|
|
|
.rx_rd_wait (rx_rd_wait),
|
|
|
|
.rx_wr_wait (rx_wr_wait),
|
|
|
|
.\(.*\)_packet (\1_fifo_packet[PW-1:0]),
|
|
|
|
.\(.*\)_access (\1_fifo_access),
|
|
|
|
.\(.*\)_wait (\1_fifo_wait),
|
2015-05-01 17:58:16 -04:00
|
|
|
);
|
|
|
|
*/
|
|
|
|
|
2015-05-12 07:41:48 -04:00
|
|
|
defparam erx_core.ID=ID;
|
2015-05-10 23:38:08 -04:00
|
|
|
erx_core erx_core ( .clk (rx_lclk_div4),
|
2015-05-13 23:29:18 -04:00
|
|
|
/*AUTOINST*/
|
2015-05-03 23:29:32 -04:00
|
|
|
// Outputs
|
2015-05-10 23:38:08 -04:00
|
|
|
.rx_rd_wait (rx_rd_wait), // Templated
|
|
|
|
.rx_wr_wait (rx_wr_wait), // Templated
|
|
|
|
.rxrd_access (rxrd_fifo_access), // Templated
|
|
|
|
.rxrd_packet (rxrd_fifo_packet[PW-1:0]), // Templated
|
|
|
|
.rxrr_access (rxrr_fifo_access), // Templated
|
|
|
|
.rxrr_packet (rxrr_fifo_packet[PW-1:0]), // Templated
|
|
|
|
.rxwr_access (rxwr_fifo_access), // Templated
|
|
|
|
.rxwr_packet (rxwr_fifo_packet[PW-1:0]), // Templated
|
|
|
|
.erx_cfg_wait (erx_cfg_wait), // Templated
|
|
|
|
.mailbox_full (mailbox_full),
|
|
|
|
.mailbox_not_empty(mailbox_not_empty),
|
2015-05-03 23:29:32 -04:00
|
|
|
// Inputs
|
|
|
|
.reset (reset),
|
2015-05-13 23:29:18 -04:00
|
|
|
.rx_packet (rx_packet[PW-1:0]), // Templated
|
|
|
|
.rx_access (rx_access), // Templated
|
|
|
|
.rx_burst (rx_burst),
|
2015-05-10 23:38:08 -04:00
|
|
|
.rxrd_wait (rxrd_fifo_wait), // Templated
|
|
|
|
.rxrr_wait (rxrr_fifo_wait), // Templated
|
|
|
|
.rxwr_wait (rxwr_fifo_wait), // Templated
|
|
|
|
.erx_cfg_access (erx_cfg_access), // Templated
|
|
|
|
.erx_cfg_packet (erx_cfg_packet[PW-1:0])); // Templated
|
2015-05-01 17:58:16 -04:00
|
|
|
|
|
|
|
/************************************************************/
|
2015-05-10 23:38:08 -04:00
|
|
|
/*FIFOs */
|
|
|
|
/************************************************************/
|
|
|
|
erx_fifo erx_fifo (
|
|
|
|
/*AUTOINST*/
|
2015-05-01 17:58:16 -04:00
|
|
|
// Outputs
|
2015-05-10 23:38:08 -04:00
|
|
|
.rxwr_access (rxwr_access),
|
|
|
|
.rxwr_packet (rxwr_packet[PW-1:0]),
|
|
|
|
.rxrd_access (rxrd_access),
|
|
|
|
.rxrd_packet (rxrd_packet[PW-1:0]),
|
|
|
|
.rxrr_access (rxrr_access),
|
|
|
|
.rxrr_packet (rxrr_packet[PW-1:0]),
|
|
|
|
.rxrd_fifo_wait (rxrd_fifo_wait),
|
|
|
|
.rxrr_fifo_wait (rxrr_fifo_wait),
|
|
|
|
.rxwr_fifo_wait (rxwr_fifo_wait),
|
|
|
|
// Inputs
|
|
|
|
.reset (reset),
|
|
|
|
.rx_lclk_div4 (rx_lclk_div4),
|
|
|
|
.sys_clk (sys_clk),
|
|
|
|
.rxwr_wait (rxwr_wait),
|
|
|
|
.rxrd_wait (rxrd_wait),
|
|
|
|
.rxrr_wait (rxrr_wait),
|
2015-05-01 17:58:16 -04:00
|
|
|
.rxrd_fifo_access(rxrd_fifo_access),
|
|
|
|
.rxrd_fifo_packet(rxrd_fifo_packet[PW-1:0]),
|
|
|
|
.rxrr_fifo_access(rxrr_fifo_access),
|
|
|
|
.rxrr_fifo_packet(rxrr_fifo_packet[PW-1:0]),
|
2015-05-10 23:38:08 -04:00
|
|
|
.rxwr_fifo_access(rxwr_fifo_access),
|
|
|
|
.rxwr_fifo_packet(rxwr_fifo_packet[PW-1:0]));
|
2014-12-14 17:18:53 -05:00
|
|
|
|
2015-03-25 19:25:12 -04:00
|
|
|
endmodule // erx
|
2014-12-14 17:18:53 -05:00
|
|
|
// Local Variables:
|
2015-04-23 18:04:39 -04:00
|
|
|
// verilog-library-directories:("." "../../emmu/hdl" "../../edma/hdl" "../../memory/hdl" "../../emailbox/hdl")
|
2014-12-14 17:18:53 -05:00
|
|
|
// End:
|
|
|
|
|
2015-04-11 00:04:18 -04:00
|
|
|
/*
|
|
|
|
Copyright (C) 2014 Adapteva, Inc.
|
|
|
|
|
|
|
|
Contributed by Andreas Olofsson <andreas@adapteva.com>
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.This program is distributed in the hope
|
|
|
|
that it will be useful,but WITHOUT ANY WARRANTY; without even the implied
|
|
|
|
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details. You should have received a copy
|
|
|
|
of the GNU General Public License along with this program (see the file
|
|
|
|
COPYING). If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2014-12-14 17:18:53 -05:00
|
|
|
|