SpinalHDL之图形

本文作为SpinalHDL学习笔记第二十六篇,介绍SpinalHDL图形相关API。

目录:

1.颜色

2.VGA

1.颜色

RGB

可以使用 Rgb 线束在硬件中建模颜色。该 Rgb 线束采用 RgbConfg 类作为参数,该类指定每个通道的位数:

case class RgbConfig(rWidth : Int,gWidth : Int,bWidth : Int) {
def getWidth = rWidth + gWidth + bWidth
}
case class Rgb(c: RgbConfig) extends Bundle {
val r = UInt(c.rWidth bits)
val g = UInt(c.gWidth bits)
val b = UInt(c.bWidth bits)
}

这些类的使用如下:

val config = RgbConfig(5,6,5)
val color = Rgb(config)
color.r := 31

2.VGA

VGA 总线

VGA 总线通过 Vga 线束定义。

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 时序

VGA 时序可以使用 VgaTimings 线束在硬件中建模:

case class VgaTimingsHV(timingsWidth: Int) extends Bundle {
val colorStart = UInt(timingsWidth bits)
val colorEnd = UInt(timingsWidth bits)
val syncStart = UInt(timingsWidth bits)
val syncEnd = UInt(timingsWidth bits)
}
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 控制器

现有 VGA 控制器,其定义如下:

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 是一个在每个新帧开始时脉冲一个周期的信号。

pixels 是一种颜色反压流,用于在需要时为 VGA 接口提供数据。

当需要传输像素但没有对象时, error 为高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千穹凌帝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值