HierarchyFilesModulesSignalsTasksFunctionsHelp

/******************************************************************************/ 
/*                                                                            */ 
/* Copyright (c) 1999 Sun Microsystems, Inc. All rights reserved.             */ 
/*                                                                            */ 
/* The contents of this file are subject to the current version of the Sun    */ 
/* Community Source License, microSPARCII ("the License"). You may not use    */ 
/* this file except in compliance with the License.  You may obtain a copy    */ 
/* of the License by searching for "Sun Community Source License" on the      */ 
/* World Wide Web at http://www.sun.com. See the License for the rights,      */ 
/* obligations, and limitations governing use of the contents of this file.   */ 
/*                                                                            */ 
/* Sun Microsystems, Inc. has intellectual property rights relating to the    */ 
/* technology embodied in these files. In particular, and without limitation, */ 
/* these intellectual property rights may include one or more U.S. patents,   */ 
/* foreign patents, or pending applications.                                  */ 
/*                                                                            */ 
/* Sun, Sun Microsystems, the Sun logo, all Sun-based trademarks and logos,   */ 
/* Solaris, Java and all Java-based trademarks and logos are trademarks or    */ 
/* registered trademarks of Sun Microsystems, Inc. in the United States and   */ 
/* other countries. microSPARC is a trademark or registered trademark of      */ 
/* SPARC International, Inc. All SPARC trademarks are used under license and  */ 
/* are trademarks or registered trademarks of SPARC International, Inc. in    */ 
/* the United States and other countries. Products bearing SPARC trademarks   */ 
/* are based upon an architecture developed by Sun Microsystems, Inc.         */ 
/*                                                                            */ 
/******************************************************************************/ 
/***************************************************************************
****************************************************************************
***
***  Program File:  @(#)read_data.v
***
***  Description:
***    Implements the afx read data reg capture, includes endian conversion.
*** 
****************************************************************************
****************************************************************************/

[Up: f_afx_slave read_data]
module read_data(	
		pcim_big_endian,	// big endian mode
		little_endian,		// processor little_endian
		fifo_bm_out,
		reset,			//reset
		clock,			//clock
		load_afx_read_data_lo,	//
		load_afx_read_data_hi,	//
		select_config_add,	// selects config address for
					// afx reads
		select_falcon_data,	// selects falcon config regs from core
		select_error,		// select all f's for error case
		mas_rcv1_dataout,	// ls word from pci
		mas_rcv2_dataout,	// ms word from pci
		config_add,		// configuration address
		config_data,		// falcon configuration data
		read_data_parity,	// read data parity		
		read_data);		//AFX data bus (big endian)

//  This module generates the AFX data bus for reads and also
//  converts from big-endian to little endian in the
//  connectivity.  (read_data will be big endian.)

	parameter WIDTH = 63;

input		pcim_big_endian;
input		little_endian;
input [3:0]	fifo_bm_out;
input 		reset;
input 		clock;
input		load_afx_read_data_lo;
input		load_afx_read_data_hi;
input		select_config_add;
input		select_falcon_data;
input		select_error;

input 	[31:0]	mas_rcv1_dataout;
input 	[31:0]	mas_rcv2_dataout;
input 	[31:0]	config_add;
input	[31:0]	config_data;

output	[1:0] 	read_data_parity;
output	[WIDTH:0] read_data;

wire [WIDTH:0] read_data;

reg [1:0] read_data_parity;
wire [1:0] read_data_parity_in;
wire [WIDTH:0] read_data_in;

assign #1 read_data_parity_in[1] = ^read_data_in[63:32];
assign #1 read_data_parity_in[0] = ^read_data_in[31:0];

wire spread_lo = load_afx_read_data_lo & ~ load_afx_read_data_hi;
wire spread_hi = ~load_afx_read_data_lo &  load_afx_read_data_hi;

wire load_afx_read_data = load_afx_read_data_lo | load_afx_read_data_hi;

// duplicate config_data in both words
assign read_data_in = select_config_add ? 
	{config_add,config_add} :
	select_falcon_data ? {config_data,config_data} : 
	(select_error | reset) ? 64'hffffffffffffffff : 
	spread_lo ? {mas_rcv1_dataout, mas_rcv1_dataout} :
	spread_hi ? {mas_rcv2_dataout, mas_rcv2_dataout} :
	{mas_rcv2_dataout,mas_rcv1_dataout};

// big endian bytes are the same as little endian
// words and dwords just word swapped
// half words must be twisted and then byte adjusted

// big words and dwords
wire [63:0] read_data_mux = pcim_big_endian & fifo_bm_out[3] & fifo_bm_out[0] ? 
	{read_data_in[31:0], read_data_in[63:32]} :
// big half words
	pcim_big_endian & fifo_bm_out[3] & ~fifo_bm_out[0] ?
	{read_data_in[15:8],read_data_in[7:0],
        read_data_in[31:24],read_data_in[23:16],
        read_data_in[47:40],read_data_in[39:32],
        read_data_in[63:56],read_data_in[55:48]} :
// big and little bytes and all other little sizes	
	{read_data_in[7:0],read_data_in[15:8],
        read_data_in[23:16],read_data_in[31:24],
        read_data_in[39:32],read_data_in[47:40],
        read_data_in[55:48],read_data_in[63:56]};

REG64 reg0(read_data,clock,load_afx_read_data, read_data_mux);

//wire [1:0] read_parity_mux = pcim_big_endian ? read_data_parity_in :
// always swap word parity, irregardless of endian
wire [1:0] read_parity_mux = {read_data_parity_in[0], read_data_parity_in[1]};

always @(posedge clock)
  begin
// word parity must be swapped same as the data above!!
    if(load_afx_read_data == 1'b1)
      begin
      read_data_parity <= #1 read_parity_mux;
      end
  end
endmodule

HierarchyFilesModulesSignalsTasksFunctionsHelp

This page: Created:Thu Aug 19 12:00:01 1999
From: ../../../sparc_v8/ssparc/pcic/afx_slave/rtl/read_data.v

Verilog converted to html by v2html 5.0 (written by Costas Calamvokis).Help