mirror of
https://github.com/LIV2/A4092-dev.git
synced 2025-12-06 00:32:49 +00:00
52 lines
1.3 KiB
Verilog
52 lines
1.3 KiB
Verilog
`timescale 1ns / 1ps
|
|
|
|
module rom_access (
|
|
input wire CLK,
|
|
input wire RESET_n,
|
|
input wire rom_region,
|
|
|
|
input wire READ,
|
|
input wire FCS_n,
|
|
input wire shutup,
|
|
|
|
output reg rom_dtack,
|
|
output wire ROM_CE_n,
|
|
output wire ROM_OE_n,
|
|
output wire ROM_WE_n
|
|
);
|
|
|
|
// Match ROM space (0x000000 - 0x7FFFFF)
|
|
assign rom_selected = rom_region;
|
|
|
|
// Control ROM chip selects
|
|
assign ROM_CE_n = !(rom_selected && !shutup);
|
|
assign ROM_OE_n = !(rom_selected && READ && !FCS_n && !shutup);
|
|
assign ROM_WE_n = !(rom_selected && !READ && !FCS_n && !shutup);
|
|
|
|
// NACK timing FSM (3 state delay like U207)
|
|
reg [1:0] rom_state;
|
|
|
|
always @(posedge CLK or negedge RESET_n) begin
|
|
if (!RESET_n) begin
|
|
rom_state <= 2'd0;
|
|
rom_dtack <= 1'b0;
|
|
end else begin
|
|
case (rom_state)
|
|
2'd0: begin
|
|
rom_dtack <= 0;
|
|
if (rom_selected && !FCS_n)
|
|
rom_state <= 2'd1;
|
|
end
|
|
2'd1: rom_state <= 2'd2;
|
|
2'd2: begin
|
|
rom_dtack <= 1;
|
|
if (FCS_n)
|
|
rom_state <= 2'd0;
|
|
end
|
|
default: rom_state <= 2'd0;
|
|
endcase
|
|
end
|
|
end
|
|
|
|
endmodule
|