2021-10-29 10:04:59 +00:00
|
|
|
module FSB(
|
|
|
|
/* MC68HC000 interface */
|
2023-04-07 03:11:11 +00:00
|
|
|
input FCLK, input nAS, output reg nDTACK, output reg nVPA,
|
2021-10-29 10:04:59 +00:00
|
|
|
/* AS cycle detection */
|
2024-10-09 11:59:55 +00:00
|
|
|
output reg ASrf, output BACT, output reg BACTr,
|
2021-10-29 10:04:59 +00:00
|
|
|
/* Ready inputs */
|
2024-10-20 23:51:05 +00:00
|
|
|
input ROMCS, input ROMReady,
|
2023-04-07 03:11:11 +00:00
|
|
|
input RAMCS, input RAMReady,
|
2023-07-16 03:21:44 +00:00
|
|
|
input IOPWCS, input IOPWReady, input IONPReady,
|
2024-10-11 20:41:31 +00:00
|
|
|
input QoSEN,
|
2023-04-08 09:49:29 +00:00
|
|
|
/* Interrupt acknowledge select */
|
2024-10-11 20:41:31 +00:00
|
|
|
input IACKCS);
|
2024-09-29 07:29:49 +00:00
|
|
|
|
2021-10-29 10:04:59 +00:00
|
|
|
/* AS cycle detection */
|
2023-04-07 03:11:11 +00:00
|
|
|
always @(negedge FCLK) begin ASrf <= !nAS; end
|
2024-10-03 09:51:10 +00:00
|
|
|
assign BACT = !nAS || ASrf; // BACT - bus active
|
2024-09-06 10:05:06 +00:00
|
|
|
always @(posedge FCLK) BACTr <= BACT;
|
2023-04-07 03:11:11 +00:00
|
|
|
|
2021-10-29 10:04:59 +00:00
|
|
|
/* DTACK/VPA control */
|
2024-10-20 23:51:05 +00:00
|
|
|
wire Ready = (RAMCS && RAMReady && !QoSEN && !IOPWCS) ||
|
|
|
|
(RAMCS && RAMReady && !QoSEN && IOPWCS && IOPWReady) ||
|
|
|
|
(ROMCS && ROMReady && !QoSEN) || (IONPReady);
|
2024-10-07 05:04:37 +00:00
|
|
|
always @(posedge FCLK, posedge nAS) begin
|
|
|
|
if (nAS) nDTACK <= 1;
|
2024-10-15 07:29:31 +00:00
|
|
|
else if (!IACKCS && Ready) nDTACK <= 0;
|
2024-10-07 05:04:37 +00:00
|
|
|
end
|
2023-04-07 03:11:11 +00:00
|
|
|
always @(posedge FCLK, posedge nAS) begin
|
|
|
|
if (nAS) nVPA <= 1;
|
2024-10-15 07:29:31 +00:00
|
|
|
else if (IACKCS && IOPWReady) nVPA <= 0;
|
2021-10-29 10:04:59 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
endmodule
|