mirror of
https://github.com/UzixLS/TSConf_MiST.git
synced 2025-07-19 07:11:22 +03:00
63 lines
1.4 KiB
Verilog
63 lines
1.4 KiB
Verilog
|
|
// This module maps z80 memory accesses into FPGA RAM and ports
|
|
|
|
`include "tune.v"
|
|
|
|
module zmaps
|
|
(
|
|
// Z80 controls
|
|
input wire clk,
|
|
input wire memwr_s,
|
|
input wire [15:0] a,
|
|
input wire [7:0] d,
|
|
|
|
// config data
|
|
input wire [4:0] fmaddr,
|
|
|
|
// FPRAM data
|
|
output wire [15:0] zmd,
|
|
output wire [7:0] zma,
|
|
|
|
// DMA
|
|
input wire [15:0] dma_data,
|
|
input wire [7:0] dma_wraddr,
|
|
input wire dma_cram_we,
|
|
input wire dma_sfile_we,
|
|
|
|
// write strobes
|
|
output wire cram_we,
|
|
output wire sfile_we,
|
|
output wire regs_we
|
|
);
|
|
|
|
// addresses of files withing zmaps
|
|
localparam CRAM = 3'b000;
|
|
localparam SFIL = 3'b001;
|
|
localparam REGS = 4'b0100;
|
|
|
|
// DMA
|
|
wire dma_req = dma_cram_we || dma_sfile_we;
|
|
|
|
// control signals
|
|
wire hit = (a[15:12] == fmaddr[3:0]) && fmaddr[4] && memwr_s;
|
|
wire cram_hit = (a[11:9] == CRAM) && hit;
|
|
wire sfile_hit = (a[11:9] == SFIL) && hit;
|
|
|
|
// write enables
|
|
wire lower_byte_we = (cram_hit || sfile_hit) && !a[0];
|
|
assign cram_we = dma_req ? dma_cram_we : cram_hit && a[0];
|
|
assign sfile_we = dma_req ? dma_sfile_we : sfile_hit && a[0];
|
|
assign regs_we = (a[11:8] == REGS) && hit;
|
|
|
|
// LSB fetching
|
|
reg [7:0] lower_byte;
|
|
|
|
assign zma = dma_req ? dma_wraddr : a[8:1];
|
|
assign zmd = dma_req ? dma_data : {d, lower_byte};
|
|
|
|
always @(posedge clk)
|
|
if (lower_byte_we)
|
|
lower_byte <= d;
|
|
|
|
endmodule
|