/* * Copyright (c) 2015 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall * not be construed as granting a license to any other intellectual * property including but not limited to intellectual property relating * to a hardware implementation of the functionality of the software * licensed hereunder. You may use the software subject to the license * terms below provided that you ensure that this notice is replicated * unmodified and in its entirety in all distributions of the software, * modified or unmodified, in source code or in binary form. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer; * redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution; * neither the name of the copyright holders nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Authors: Andreas Sandberg */ #ifndef __DEV_PIXELPUMP_HH__ #define __DEV_PIXELPUMP_HH__ #include "base/framebuffer.hh" #include "sim/clocked_object.hh" struct BasePixelPumpParams; struct DisplayTimings : public Serializable { /** * Create a display timing configuration struct * * @param width Width of the visible area of the screen. * @param height Height of the visible area of the screen. * @param hfp Horizontal front porch in pixel clocks. * @param h_sync Horizontal sync in pixel clocks. * @param hbp Horizontal back porch in pixel clocks. * @param vfp Vertical front porch in scan lines. * @param v_sync Vertical sync in scan lines. * @param vbp Vertical back porch in scan lines. */ DisplayTimings(unsigned width, unsigned height, unsigned hbp, unsigned h_sync, unsigned hfp, unsigned vbp, unsigned v_sync, unsigned vfp); void serialize(CheckpointOut &cp) const override; void unserialize(CheckpointIn &cp) override; /** How many pixel clocks are required for one line? */ Cycles cyclesPerLine() const { return Cycles(hSync + hBackPorch + width + hBackPorch); } /** How many pixel clocks are required for one frame? */ Cycles cyclesPerFrame() const { return Cycles(cyclesPerLine() * linesPerFrame()); } /** Calculate the first line of the vsync signal */ unsigned lineVSyncStart() const { return 0; } /** Calculate the first line of the vertical back porch */ unsigned lineVBackPorchStart() const { return lineVSyncStart() + vSync; } /** Calculate the first line of the visible region */ unsigned lineFirstVisible() const { return lineVBackPorchStart() + vBackPorch; } /** Calculate the first line of the back porch */ unsigned lineFrontPorchStart() const { return lineFirstVisible() + height; } /** Calculate the total number of lines in a frame */ unsigned linesPerFrame() const { return lineFrontPorchStart() + vFrontPorch; } /** Display width in pixels */ unsigned width; /** Display height in pixels */ unsigned height; /** Horizontal back porch in pixels */ unsigned hBackPorch; /** Horizontal front porch in pixels */ unsigned hFrontPorch; /** Horizontal sync signal length in pixels */ unsigned hSync; /** Vertical back porch in lines */ unsigned vBackPorch; /** Vertical front porch in lines */ unsigned vFrontPorch; /** Vertical sync signal in lines */ unsigned vSync; static const DisplayTimings vga; }; /** * Timing generator for a pixel-based display. * * Pixels are ordered relative to the top left corner of the * display. Scan lines appear in the following order: *