blob: ec854bf9e188c15a4b835e1a84ba316c0148c18f [file] [log] [blame]
// File name: CAN_receiver.sv
// Created: 12/1/2020
// Author: Zachary Ellis
// Version: 2.0 Integration into full controller
// Description: Top module of CAN receiver project
module CAN_receiver (
input clk,
input nRST,
input [3:0] TS1,
input [3:0] TS2,
input CANRX,
input tx_busy,
input [1:0] error_state,
input fifo_clear,
input enable_overrun,
input [19:0] mask_enable,
input [30:0] filter_0, //this is a yosys thing since you cant do input [31:0] [19:0]
input [30:0] mask_0,
input [30:0] filter_1,
input [30:0] mask_1,
input [30:0] filter_2,
input [30:0] mask_2,
input [30:0] filter_3,
input [30:0] mask_3,
input [30:0] filter_4,
input [30:0] mask_4,
input [30:0] filter_5,
input [30:0] mask_5,
input [30:0] filter_6,
input [30:0] mask_6,
input [30:0] filter_7,
input [30:0] mask_7,
input [30:0] filter_8,
input [30:0] mask_8,
input [30:0] filter_9,
input [30:0] mask_9,
input [30:0] filter_10,
input [30:0] mask_10,
input [30:0] filter_11,
input [30:0] mask_11,
input [30:0] filter_12,
input [30:0] mask_12,
input [30:0] filter_13,
input [30:0] mask_13,
input [30:0] filter_14,
input [30:0] mask_14,
input [30:0] filter_15,
input [30:0] mask_15,
input [30:0] filter_16,
input [30:0] mask_16,
input [30:0] filter_17,
input [30:0] mask_17,
input [30:0] filter_18,
input [30:0] mask_18,
input [30:0] filter_19,
input [30:0] mask_19,
input read_fifo,
output ACK,
output busy,
output bitstuff_error,
output form_error,
output [1:0] rx_err_code,
output CRC_Error,
output bitstrobe,
output tx_strobe,
output curr_sample,
output [3:0] occupancy,
output full,
output empty,
output overrun,
output [31:0] data_L,
output [31:0] data_H,
output [28:0] ID_out,
output [3:0] pkt_size_out,
output RTR_out,
output EXT_out,
output [4:0] fmi_out,
output fifo_read
);
wire SOF, bitstuff, dataphase, end_data, load_byte, endCRC, edgedet;
wire [3:0] pkt_size, byte_num, byte_select;
wire [7:0] payload;
wire [28:0] CAN_ID;
wire stopCRC;
wire RTR, EXT;
wire pkt_done, new_ID;
edgedetect U1 (
.clk(clk),
.nRST(nRST),
.CANRX(CANRX),
.edgedet(edgedet)
);
timer U2 (
.clk(clk),
.nRST(nRST),
.TS1(TS1),
.TS2(TS2),
.edgedet(edgedet),
.bitstuff(bitstuff),
.dataphase(dataphase),
.pkt_size(pkt_size),
.bitstrobe(bitstrobe),
.tx_strobe(tx_strobe),
.byte_complete(load_byte),
.byte_num(byte_num),
.end_data(end_data)
);
CRCcheck U3 (
.clk(clk),
.bitstrobe(bitstrobe),
.tx_strobe(tx_strobe),
.endCRC(endCRC),
.stopCRC(stopCRC),
.nRST(nRST),
.bitstuff(bitstuff),
.pkt_size(pkt_size),
.SOF(SOF),
.CANRX(CANRX),
.ACK(ACK),
.CRCerror(CRC_Error)
);
RCU U4 (
.clk(clk),
.bitstrobe(bitstrobe),
.nRST(nRST),
.CANRX(CANRX),
.tx_busy(tx_busy),
.error_state(error_state),
.CRC_err(CRC_Error),
.enddata(end_data),
.endCRC(endCRC),
.stopCRC(stopCRC),
.busy(busy),
.Dataphase(dataphase),
.bitstuff(bitstuff),
.bitstuff_error(bitstuff_error),
.form_error(form_error),
.rx_err_code(rx_err_code),
.pkt_size(pkt_size),
.msg_id(CAN_ID),
.payload(payload),
.RTR(RTR),
.EXT(EXT),
.curr_sample(curr_sample),
.SOF(SOF),
.pkt_done(pkt_done),
.new_ID(new_ID)
);
fifo U5 (
.clk(clk),
.nRST(nRST),
.clear(fifo_clear),
.ID(CAN_ID),
.data(payload),
.data_index(byte_num),
.load_data(load_byte),
.pkt_size(pkt_size),
.RTR(RTR),
.EXT(EXT),
.pkt_done(pkt_done),
.enable_overrun(enable_overrun),
.new_ID(new_ID),
.mask_enable(mask_enable),
.filter_0(filter_0),
.mask_0(mask_0),
.filter_1(filter_1),
.mask_1(mask_1),
.filter_2(filter_2),
.mask_2(mask_2),
.filter_3(filter_3),
.mask_3(mask_3),
.filter_4(filter_4),
.mask_4(mask_4),
.filter_5(filter_5),
.mask_5(mask_5),
.filter_6(filter_6),
.mask_6(mask_6),
.filter_7(filter_7),
.mask_7(mask_7),
.filter_8(filter_8),
.mask_8(mask_8),
.filter_9(filter_9),
.mask_9(mask_9),
.filter_10(filter_10),
.mask_10(mask_10),
.filter_11(filter_11),
.mask_11(mask_11),
.filter_12(filter_12),
.mask_12(mask_12),
.filter_13(filter_13),
.mask_13(mask_13),
.filter_14(filter_14),
.mask_14(mask_14),
.filter_15(filter_15),
.mask_15(mask_15),
.filter_16(filter_16),
.mask_16(mask_16),
.filter_17(filter_17),
.mask_17(mask_17),
.filter_18(filter_18),
.mask_18(mask_18),
.filter_19(filter_19),
.mask_19(mask_19),
.read_fifo(read_fifo),
.occupancy(occupancy),
.full(full),
.empty(empty),
.overrun(overrun),
.data_L(data_L),
.data_H(data_H),
.ID_out(ID_out),
.pkt_size_out(pkt_size_out),
.RTR_out(RTR_out),
.EXT_out(EXT_out),
.fmi_out(fmi_out),
.fifo_read(fifo_read)
);
endmodule