.. role:: raw-html-m2r(raw)
:format: html
VGA
===
VGA bus
-------
An VGA bus definition is available via the Vga bundle.
.. code-block:: scala
case class Vga (rgbConfig: RgbConfig) extends Bundle with IMasterSlave{
val vSync = Bool()
val hSync = Bool()
val colorEn = Bool() //High when the frame is inside the color area
val color = Rgb(rgbConfig)
override def asMaster() = this.asOutput()
}
VGA timings
-----------
VGA timings could be modeled in hardware by using an VgaTimings bundle :
.. code-block:: scala
case class VgaTimingsHV(timingsWidth: Int) extends Bundle {
val colorStart = UInt(timingsWidth bit)
val colorEnd = UInt(timingsWidth bit)
val syncStart = UInt(timingsWidth bit)
val syncEnd = UInt(timingsWidth bit)
}
case class VgaTimings(timingsWidth: Int) extends Bundle {
val h = VgaTimingsHV(timingsWidth)
val v = VgaTimingsHV(timingsWidth)
def setAs_h640_v480_r60 = ...
def driveFrom(busCtrl : BusSlaveFactory,baseAddress : Int) = ...
}
VGA controller
--------------
An VGA controller is available. It's definition is the following :
.. code-block:: scala
case class VgaCtrl(rgbConfig: RgbConfig, timingsWidth: Int = 12) extends Component {
val io = new Bundle {
val softReset = in Bool()
val timings = in(VgaTimings(timingsWidth))
val frameStart = out Bool()
val pixels = slave Stream (Rgb(rgbConfig))
val vga = master(Vga(rgbConfig))
val error = out Bool()
}
// ...
}
| ``frameStart`` is a signals that pulse one cycle at the beginning of each new frame.
| ``pixels`` is a stream of color used to feed the VGA interface when needed.
| ``error`` is high when a transaction on the pixels is needed, but nothing is present.