NuBusFPGA/nubus-to-ztex-gateware/nubus_cpldinfpga.v
Romain Dolbeau 93e7cd20c1 typos
2022-11-01 12:41:58 +01:00

73 lines
2.3 KiB
Verilog

module nubus_cpldinfpga
(
// Control
input nubus_oe, // disable all 5v drivers
input tmoen, // tm output enable
input nubus_master_dir, // direction of signals, i.e. are we in master mode
// Spares
input rqst_oe_n, // rqstoen (extra line from FPGA to CPLD)
// NuBus
input [3:0] id_n_3v3, // nubus ID of this card to FPGA
// NuBus Arbiter
input arbcy_n, // enable arbitter
input [3:0] arb_n_3v3, // NuBus arbiter's lines
output [3:0] arb_o_n, // NuBus arbiter's control lines
output grant, // Grant access
// Cycle Control (NuBus two-way)
input tm0_n_3v3, // nubus tm0 to/from FPGA
output tm0_o_n, // start from NuBus
input tm1_n_3v3, // nubus tm1 to/from FPGA
output tm1_o_n, // start from NuBus
output tmx_oe_n, // start from NuBus
input tm2_n_3v3, // nubus tm2 to/from FPGA
output tm2_o_n, // start from NuBus
output tm2_oe_n, // start from NuBus
input start_n_3v3, // start to/from FPGA
output start_o_n, // start from NuBus
output start_oe_n, // start from NuBus
input ack_n_3v3, // ack from/to FPGA
output ack_o_n, // ack to NuBus
output ack_oe_n, // ack OE NuBus
// Master Request (OC)
input rqst_n_3v3, // rqst from/to FPGA
output rqst_o_n // rqst to NuBus
);
// placeholders
assign tm2_o_n = 0;
assign tm2_oe_n = 1;
// ~nubus_master_dir-controlled signals
assign start_o_n = nubus_oe ? 1 : ( nubus_master_dir ? start_n_3v3 : 1); // master out
assign start_oe_n = nubus_oe ? 1 : ( nubus_master_dir ? 0 : 1); // master out
// rqst_o_n is always driven (the 74lvt125 wired as open collector will convert 1 to Z) and is active low
assign rqst_o_n = nubus_oe ? 1 : (~rqst_oe_n ? rqst_n_3v3 : 1); // master out
assign ack_o_n = nubus_oe ? 1 : (( ~tmoen) ? ack_n_3v3 : 1); // slave out/in
assign ack_oe_n = nubus_oe ? 1 : (( ~tmoen) ? 0 : 1); // slave out/in
assign tm0_o_n = nubus_oe ? 1 : (( ~tmoen) ? tm0_n_3v3 : 1); // slave out/in
assign tm1_o_n = nubus_oe ? 1 : (( ~tmoen) ? tm1_n_3v3 : 1); // slave out/in
assign tmx_oe_n = nubus_oe ? 1 : (( ~tmoen) ? 0 : 1); // slave out/in
nubus_arbiter UArbiter
(
.idn(id_n_3v3),
.arbn(arb_n_3v3),
.arbon(arb_o_n),
.arbcyn(arbcy_n),
.grant(grant)
);
endmodule // nubus_cpld