mirror of
https://github.com/rdolbeau/NuBusFPGA.git
synced 2024-11-15 13:05:30 +00:00
73 lines
2.3 KiB
Coq
73 lines
2.3 KiB
Coq
|
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
|