OpenCores
URL https://opencores.org/ocsvn/Aquarius/Aquarius/trunk

Subversion Repositories Aquarius

[/] [Aquarius/] [trunk/] [verilog/] [pio.v] - Rev 12

Compare with Previous | Blame | View Log

//======================================================
// Aquarius Project
//    SuperH-2 ISA Compatible RISC CPU
//------------------------------------------------------
// Module      : Parallel Input / Output Port
//------------------------------------------------------
// File        : pio.v
// Library     : none
// Description : Parallel Input / Output Port
// Simulator   : Icarus Verilog (Cygwin)
// Synthesizer : Xilinx XST (Windows XP)
// Author      : Thorn Aitch
//------------------------------------------------------
// Revision Number : 1
// Date of Change  : 14th October 2002
// Creator         : Thorn Aitch
// Description     : Initial Design				  
//------------------------------------------------------
// Revision Number : 2
// Date of Change  : 30th April 2003
// Modifier        : Thorn Aitch
// Description     : Release Version 1.0
//======================================================
// Copyright (C) 2002-2003, Thorn Aitch
//
// Designs can be altered while keeping list of
// modifications "the same as in GNU" No money can
// be earned by selling the designs themselves, but
// anyone can get money by selling the implementation
// of the design, such as ICs based on some cores, 
// boards based on some schematics or Layouts, and
// even GUI interfaces to text mode drivers.
// "The same as GPL SW" Any update to the design
// should be documented and returned to the design. 
// Any derivative work based on the IP should be free
// under OpenIP License. Derivative work means any
// update, change or improvement on the design. 
// Any work based on the design can be either made
// free under OpenIP license or protected by any other
// license. Work based on the design means any work uses
// the OpenIP Licensed core as a building black without
// changing anything on it with any other blocks to
// produce larger design.  There is NO WARRANTY on the
// functionality or performance of the design on the
// real hardware implementation.
// On the other hand, the SuperH-2 ISA (Instruction Set
// Architecture) executed by Aquarius is rigidly
// the property of Renesas Corp. Then you have all 
// responsibility to judge if there are not any 
// infringements to Renesas's rights regarding your 
// Aquarius adoption into your design. 
// By adopting Aquarius, the user assumes all 
// responsibility for its use.
// This project may cause any damages around you, for 
// example, loss of properties, data, money, profits,
// life, or business etc. By adopting this source, 
// the user assumes all responsibility for its use.
//======================================================
 
`include "timescale.v"
`include "defines.v"
 
//======================================================
// PIO : PORT IN/OUT Module
//
//      [PIODATA] 32bit register
//        bit31        bit16 bit15        bit0
//       --------------------------------------
//       |PIO31|......|PIO16|PIO15|......|PIO00|
//       --------------------------------------
//   init   0   ......   0     0   ......   0
//   R/W   R/W          R/W   R/W          R/W
//======================================================
 
//*************************************************
// Module Definition
//*************************************************
module pio (
               CLK, RST, 
               CE, WE, SEL, 
               DATI, DATO,
               PI, PO
           );
 
//-------------------
// Module I/O Signals
//-------------------
    input CLK;          // clock
    input RST;          // reset
    input CE;           // chip enable
    input WE;           // write enable (read = 0, write = 1)
    input [3:0]SEL;     // data valid position
    input [31:0] DATI;  // write data
    output [31:0] DATO; // read data
    input  [31:0] PI;   // PORT input
    output [31:0] PO;   // PORT output
 
//-----------------
// Internal Signals
//-----------------
    reg    [31:0] PIODATA;
    reg    [31:0] DATO;
    wire   [31:0] PO;
 
    assign PO = PIODATA;
 
//----------------------
// PIODATA R/W Operation
//----------------------
    always @(posedge CLK or posedge RST) begin
        if (RST == 1'b1)
            PIODATA[31:24] <= 8'h00;
        else if ((CE == 1'b1) && (WE == 1'b1) && (SEL[3] == 1'b1))
            PIODATA[31:24] <= DATI[31:24];
    end
 
    always @(posedge CLK or posedge RST) begin
        if (RST == 1'b1)
            PIODATA[23:16] <= 8'h00;
        else if ((CE == 1'b1) && (WE == 1'b1) && (SEL[2] == 1'b1))
            PIODATA[23:16] <= DATI[23:16];
    end
 
    always @(posedge CLK or posedge RST) begin
        if (RST == 1'b1)
            PIODATA[15: 8] <= 8'h00;
        else if ((CE == 1'b1) && (WE == 1'b1) && (SEL[1] == 1'b1))
            PIODATA[15: 8] <= DATI[15: 8];
    end
 
    always @(posedge CLK or posedge RST) begin
        if (RST == 1'b1)
            PIODATA[ 7: 0] <= 8'h00;
        else if ((CE == 1'b1) && (WE == 1'b1) && (SEL[0] == 1'b1))
            PIODATA[ 7: 0] <= DATI[ 7: 0];
    end
 
    always @(CE or PI) begin
        if (CE == 1'b1)
            begin
                DATO[31:24] <= PI[31:24];
                DATO[23:16] <= PI[23:16];
                DATO[15: 8] <= PI[15: 8];
                DATO[ 7: 0] <= PI[ 7: 0];
            end
        else
            begin
                DATO[31:0] <= 32'h00000000;
            end
    end
 
//======================================================
  endmodule
//======================================================

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.