All pastes #1903676 Raw Edit

Stuff

public text v1 · immutable
#1903676 ·published 2010-07-19 14:46 UTC
rendered paste body
module memory (clk, clk2, reset, addr, rd, wr, io, vma, data_in, data_out, output_port, floppy_input_port, floppy_output_port,
	uart_txd);

input clk, clk2;
input reset;
input [15:0] addr;
input rd, wr, io, vma;
input [7:0] data_in;
output reg [7:0] data_out;
output reg [7:0] output_port;
output reg [7:0] floppy_output_port;
input [7:0] floppy_input_port;

output	uart_txd;

/*
	.floppy_input_port ({nINDEX, nCHANGE, nRDY, nRDATA, nTRK0, nWPROT, 2'b0}),
	.floppy_output_port ({nSEL0, nSEL1, nMTRON, DIR, nSTEP, nWDATA, nWGATE, nSIDE})

*/

parameter	LED_PORT		= 8'hF0;
parameter	FLOPPY_PORT_OUT	= 8'hF1;
parameter	FLOPPY_PORT_IN	= 8'hF1;
parameter	UART_DATA		= 8'hF2;

//
//		bit 7	bit 6	bit 5	bit 4	bit 3	bit 2	bit 1	bit 0
//		-------	-------	-------	-------	-------	-------	-------	-------
//		BUSY
//
parameter	UART_CTRL		= 8'hF3;



reg [7:0] txdata;
reg txstart;
wire uart_txd_busy;

async_transmitter uart (.clk (clk), .TxD_start (txstart), .TxD_data (txdata [7:0]), .TxD (uart_txd), .TxD_busy (uart_txd_busy));




always @(posedge clk or posedge reset) begin		
	if (reset) begin
		data_out [7:0] <= 8'h00;
		output_port [7:0] <= 8'h00;
		floppy_output_port [7:0] <= 8'hff;
				
		txstart <= 1'b0;
	end
	else begin
		if (io) begin
		// ---------------------------- I/O ---------------------------------
			if (wr) begin
			// ------------------------ write -------------------------------
				case (addr [7:0])
					LED_PORT:			output_port [7:0] <= data_in [7:0];
					FLOPPY_PORT_OUT:	floppy_output_port [7:0] <= data_in [7:0];
					UART_DATA:	begin
										txdata [7:0] <= data_in [7:0];
										txstart <= 1'b1;
					end
				endcase
			end
			else begin
			// ------------------------ read --------------------------------							
			
				case (addr [7:0])
					LED_PORT:			data_out [7:0] <= output_port [7:0];
					FLOPPY_PORT_OUT:	data_out [7:0] <= floppy_output_port [7:0];
					FLOPPY_PORT_IN:		data_out [7:0] <= floppy_input_port [7:0];
					UART_CTRL:			data_out [7:0] <= {uart_txd_busy, 7'b0};
				endcase
			end
		end
		else begin
		// ----------------------------- memory -----------------------------
		
			txstart <= 1'b0;
			
			if (rd) begin
				data_out [7:0] <= mem_q [7:0];

			end
		end
	end
end





wire [7:0] mem_q;

mem mem_i (
	.address (addr [15:0]),
	
//	.clock (clk2),
	.clock (~clk),
	.data (data_in [7:0]),
	.wren (wr),
	.q (mem_q [7:0])
);


endmodule