一、复杂边缘显示

像在我们写的打砖块代码里,图形显示全是手写代码进行逻辑判断,然后画出形状。但这对于图形简单的还可以,复杂边缘的图形或者汉字之类的就几乎不可能了。有一种**透明色(Color Key)或者更现代的透明通道(Alpha Channel)**的技术可以很好的解决这个问题。

先说透明色:其思想是我把需要画的,假设是个五角星,我们在比如画图工具中画出来,然后我们把其背景用油漆桶填充成一种颜色,这些多余的区域,涂成一种现实世界里几乎用不到的颜色,比如亮粉色(洋红色,RGB: 255, 0, 255)或者纯绿色,它就成为“透明色”。那么我现在就得到的是一个矩形图片,我在显示的时候,使用逻辑:加载这张矩形图片,如果判断当前像素的颜色为“透明色”,就不显示或者说跳过;如果不是“透明色”,就显示。从而复杂边缘只需非常简单的逻辑判断就自动打出来了!

现代做法是使用透明通道:以前的像素只有RGB信息,现在有RGBA,加了一个A透明度。在图形的边缘,透明度为0.5,那么显示时就把图片色和背景颜色进行混合,从而边缘更柔和,甚至能显示玻璃、烟雾、半透明阴影这种极其复杂的效果。电脑的判断逻辑仍然很简单,只需要判断当前像素的透明度即可。现代工具里的“扣图”、“去底”等,大概干的也是这么个事儿。

二、写Verilog代码时的一些好习惯

1.看到报错或警告时,我们可以在AMD社区,输入错误号,然后看别人的解决方案,来提升系统。

2.查看时序报告。可以看到关键路径等信息,从而给我们指出哪些地方需要优化。(就在project summary的timing部分)
打开implemented timing report ,可以看到更详细的信息

Image

比如上图中,WNS指建立时间的检查,如果为正就时序收敛,建立时间的Slack (裕量)充足,如果为负就没收敛,需要开发者更改比如加流水线之类的,或者降低时钟频率等;WHS对应保持时间,这个一般都不用用户改,因为如果不满足EDA工具很好解决,自动加几个缓冲器或者绕个路什么的就解决了。WPWS叫做脉宽裕量,因为我们知道数字电路中触发器、RAM这些元件它对时钟的脉冲长度也是有要求的,不能太短,那么这个指标就是在检查时钟质量,是不是超频/时钟歪斜/占空比不当之类的。

3.资源使用查看。

4.利用RTL级原理图,查看和梳理模块之间的关系。
它这个RTL级的就完全按照你封装的模块之间端口的连线绘制,很适合检查和梳理模块间的逻辑、检查输入输出端口等。而点某一个模块左上角的加号,也可以看到其内部具体的逻辑实现。

5.设计自上而下,验证自下而上。模块可以封装的稍微小一些,这样也便于实现和验证。设计前绘制大的框架图、各模块的功能和之间的配合。