线性回归 - 时序处理 - 流水线

179 阅读7分钟

1 线性回归,最小二乘法

引导滤波的方法来优化去雾图像的透射率。将图像的灰度图像作为引导图像I,输入图像p进行滤波,以及一个输出图像。

image.png

为了确定ak,bk系数,需要对输入p进行约束,减去不需要的分量n,例如噪声。

image.png

为尽量减小q和p之间的差异,并且保持线性模型,构建带有正则项的岭回归:

最后一项为正则化因子,以防止过拟合。 image.png

求解上式可得: a和b在局部的值为:

image.png

uk和taok平方都是引导图像I在半径为r内,像素总数为wk的窗口内的均值和方差。

pk平均为输入图像在局部窗口内的均值。

IP的平均为,输入图像和引导图像在像素总数为wk的局部窗口内的乘积在做均值。 以上可以求出ak。

ak = pk平均 - akuk。 可以求出ak。

image.png

a = ak均值Ii+bk的均值。 可以求出单个像素

在标准线性回归中,通过最小化真实值和预测值的平方误差来训练模型。

最小二乘法即 最小化平方误差。

而岭回归在平方误差值的基础上加上了对系数的惩罚。这里是对ak系数进行惩罚。

2 复原图像质量的评价

1 主观评价: 图像亮度,清晰度,对比度等。

2 客观评价:

峰值信噪比: PSNR越大,图像的失真程序越小。

平均梯度: 平均梯度反应图像细节反差及纹理变化。

对比度

3 三级流水线和五级流水线的区别

流水线级数越多,可使得单条指令流水线并行执行指令的能力更强。

每一级的处理时间更短,可以进一步提升处理器的工作频率。

但 流水线深度受限于流水线的延迟和额外开销。 需要使用高速锁存器作为流水线的缓冲寄存器。

流水线在本质上理解为以面积换性能,以空间换时间。

五级流水线,增加了五组寄存器,每一级流水线内部都有各自的组合逻辑数据通路,但提高了数据吞吐量。

每一级流水线都由寄存器组成,更多的流水线要消耗更多的寄存器,占用更多的芯片面积。

由于每一级流水线都需要握手,流水线最后一级的反压信号可能回一直串扰到最前一级,造成严重的时序问题,因此需要高级的技巧来解决此类反压时序问题。

根据应用背景做合理的选择。

越深(正面):主频越高,性能越高,吞吐率越高。

越深(负面):面积开销增大,反压时序问题,分支预测时的浪费和损失。

为什么是三级,执行阶段之后会有三种选择, 跳转指令的跳转,访存指令的访存,算术指令的写回。 所以要不就是五级流水线分开,要不就是三级流水线。

4 流水线中的反压

若流水线越深,由于每一级都需要握手,流水线最后一级反压信号可能会一直串扰到最前一级造成严重的反压时序问题。

反压信号处理解决方法:

取消握手:杜绝反压的发生,时序表现非常好,但流水线中的每一级并不会与其下一级进行握手,可能会造成功能错误或者指令丢失。

加入向前旁路缓存---前递:也是一种用面积换时序的方法。旁路缓存仅只有一个表项,由于增加了这一个额外的缓存表项,可以将后向的握手信号时序路径砍断,但是对前向路径不受影响,因此可以广泛使用于握手接口。

加入乒乓缓存:是一种用面积换时序的方法,也是在解决反压的最简单方法。通过使用乒乓缓存(有两个表项)替换掉普通的一级流水线(只有一个表项),

可以使得此级流水线向上一级流水线的握手接收信号仅关注乒乓缓存中是否有一个以上有空的表项即可,而无需将下一级的握手接受信号串扰至上一级。

5 rom中的指令,ram中的数据

通过txt文件进行testbench验证。通过readmemb,将文本中数据和指令赋值到存储器中。

通过display打印输出信息。

//读指令,将instdata中的指令读入rom。 通过readmemh读取指令到ROM。

6 ROM

ROM是通过双端口RAM实现的,数组memory。线与的传递。

使用专门的总线访问。

ICB 供蜂鸟E203处理器核内部使用,同时可作为SOC的总线。

7 DFF搭建二分频电路

将D触发器的D端连接D触发器的输出QN端,就构成了一个由D触发器形成的2分频电路。

8 检查时序

FPGA中Tco、Tsu和Th是由FPGA的芯片工艺决定的。

Tcomb为数据延迟,包括组合逻辑延迟和走线延迟。

整个电路中,时钟频率由最差的一条时序路径决定。

我们所谓的时序约束,实际上就是对时钟延迟和Tcomb做一定的要求或者干预,其中Tcomb由组合逻辑(代码)及布局布线决定,这也决定了系统最高的工作频率。

时间裕量包括建立时间裕量和保持时间裕量。

一个FPGA工程在综合实现后,是否满足时序约束,其实就是看所有的捕获寄存器是否能正确稳定捕获到发起寄存器发出的数据。

也就是说到达捕获寄存器的数据输入端口D(regb/D)的数据要满足建立和保持时间要求,也就是说在Tsu之前,current data valid就要准备就绪,而在Th之后呢,current data valid还要多维持一段时间。

在Tsu之前以及Th之后多出的这部分时间,我们就称之为“裕量”,裕量越大,时序越宽松。

裕量的大小与时钟频率、代码设计以及布局布线有着紧密的联系

一个设计的时序报告中,裕量为负数时,表示时序约束出现违例,虽然个别违例不代表你的工程就有致命的问题,但是这是一个风险(时序报告是按照工艺、电压以及温度的上下限给出的结果)。当违例数较多,也就意味着设计在实际环境中出现问题的概率也会越大。

在综合之后,**我们需要特别关注的是建立时间的时序违例,因为可以通过增加布线长度来保证保持时间。**大多数保持时间违例在实现之后自然会被优化掉。

9 时序违例解决方法

Setup Time Violation的解决方案

  • 增大时钟周期Tcycle,即降低时钟频率

  • 减小 D->Q的传输延迟Tco,即更换更快的器件,使用更先进的器件库

  • 减小 Tcomb,即减小组合逻辑延时,主要是关键路径的处理。包括插入寄存器使其流水、重定时等。

  • 增大时钟歪斜Tskew=Tclkb-Tclka。如果时钟歪斜 Tskew 为正,对setup是有利的,对hold是有害。

Hold Time Violation的解决方案

  • 增加 Tcomb 延迟,增大数据的延迟具体表现为插入 Buffer,Xilinx 还提到可以插入 LUT1 增加延迟等方式来修复;

  • 增大 Tcomb,即增大组合逻辑延时,主要是关键路径的处理。可以增加Buffer,或者后端布局布线拉长布线以增加延时。

  • 减小时钟歪斜Tskew=Tclkb-Tclka。如果时钟歪斜 Tskew 为正,对setup是有利的,对hold是有害。