1 为什么使用格雷码? 二进制转格雷码,格雷码转二进制?
由于异步fifo读指针和写指针分别属于不同的时钟域,这样指针在进行同步的过程中容易出错,采用格雷码,相邻每位只有一位发生变化,这样在进行指针同步的时候们就会产生同步正确。 即使同步出错,出错的也是写指针的跳变不变,对于读空判断,最多导致fifo不是真空的时候产生读空,而不会出现读空。格雷码保证即使读写指针同步后出错,也不影响fifo功能的正确性。
二进制转格雷码: 最高位不变,其余位与前一位做异或运算。
格雷码转二进制: 最高位不变,次高位为高位二进制和格雷码的异或。
2 什么是竞争和冒险? 怎么避免?
竞争: 在组合电路中,当某一个变量经过两条路径到达输出端时候,由于每条路径延迟时间不同,到达终点的时间就有先后,这一现象称为竞争。
冒险:由于竞争现象所引起电路输出发生瞬间错误的现象,如输出端的尖峰脉冲的现象,称为冒险。
FPGA中最简单的避免方法就是使用时序同步逻辑 同步输入输出。 采用可靠性编码如格雷码。 加滤波电容。
3 什么是亚稳态? 建立时间和保持时间? 怎么解决?
信号的传输都会有时序要求,从而保证每个寄存器捕获输入信号正常输出。为了保证可靠的操作,输入寄存器的信号必须在寄存器建立时间之前保持稳定,并且持续到是时钟沿之后的某段时间-保持时间。 而该寄存器的输入到输出需要经过一定的延时,这个时间为时钟到输出的时间。 如果数据信号的变化违反了建立时间或者保持时间的要求,那么寄存器的就会处于亚稳态,此时寄存器大输出在高电平和低电平之间盘旋一段时间。 这意味着寄存器的输出达到一个稳定的高或者低电平的时间大于时钟到输出的时间。 此时输出的数据不稳定。
建立时间: 触发器时钟上升沿到来之前,数据稳定不变的时间。
保持时间: 触发器时钟上升沿到来之后,数据稳定不变的时间。
在同步系统中,输入信号总是可以达到寄存器的要求,亚稳态不会发生。跨时钟信号传输中,由于数据信号能在任何时间到达异步时钟域的目的寄存器,设计者无法保证建立时间和保持时间的要求。解决方法采用两级的同步寄存器链。
4 跨时钟域信号处理?
在FPGA多个时钟域信号通信时,可能存在异步时钟域的问题,异步时钟域涉及两个时钟可能存在相位差,也可能不同频不同相。 如果两个时钟域频率关系不确定,那么寄存器之间的建立时间和保持时间也无法保证吗,如果违法了建立时间或者保持时间,接收域就会出现亚稳态的数据。 对于异步时钟域的通信,要实现同步。 1 采用专用的握手信号,握手信号协议方式处理跨时钟域数据传输 2 使用逻辑同步机制,采用两级同步寄存器 3 借助于存储器,存储器内部有一套完整的同步处理机制,如dram控制器的读写各使用一个异步fifo,既解决了数据缓存问题,也解决了跨时钟域的信号传输。
5 乒乓操作、串并转换、流水线思想?
乒乓操作对数据流进行控制处理,一般通过多个数据缓冲区实现对数据的无缝缓冲和处理。 比如在输入和输出之间加入两个ram进行数据缓冲,这样就可以实现数据的无缝缓冲和处理。
串并转换是一种高速数据流处理方法,其原理为通过移位寄存器将数据缓存,比需要同时输出三行数据,在原先输出一行数据的基础上增加两个寄存器,通过移位的方式,延迟两拍,等第四行数据到来时,同时输出三个寄存器上的数据,实现并行输出。
流水线思想将设计拆分为多个步骤来实现,整个数据的处理是单向的,没有反馈和迭代。通过加入寄存器进行时钟控制实现流水线思想。 比如我们完成一个操作需要四个步骤,而采用流水线思想,我们在每个步骤后加入寄存器进行时钟控制,这样第一个数据的处理和正常一样需要四个时钟周期,而第五个时钟周期的时候就可以完成第二个数据的处理,不考虑第一个数据的处理,后续数据处理的速度是之前的四倍。
6 spi uart iic sccb?
常见的通信协议有uart 通用异步收发传输器,uart为全双工的异步通信,所谓异步通信是发送方发送数据后,不等待接收方发回响应,接着发送下一个数据包。RS232常用八个数据位和一个stop停止位。
iic为半双工同步通信,双向两线总线sda和scl,所谓半双工是允许数据在两个方向上传输,但在某一时刻,允许数据在一个方向上传输。 iic是有响应信号的,数据写入的时候是 起始位、器件地址 、响应 、从机地址、响应 、写入数据、响应、stop。 数据读出的时候是 起始位、器件地址、响应、从机地址、响应、起始位、器件地址、响应、数据读出、no ack 不响应、stop。
sccb串行相机总线。 sscb和iic是类似的,区别在于是用do not care信号信号替代了ack响应信号,同时在进行数据读操作时候,是多加一个stop信号的。
spi 串行外围设备,全双工同步通信总线,广泛用于ADC,LCD等设备。四线制,MOSI主输出从输入,MISO主输入从输出,SCLK时钟信号、cs片选信号。 无应答机制,通过片选信号控制多个从机。 spi是时钟驱动协议,无时钟无法正常工作。
7 TFT/ VGA ,DVI/HDMI
RBG接口的TFT显示屏,对数据实时性要求高,但接口时序简单,与VGA显示器时序兼容。 都是通过行列扫描的方式,VGA通过阴极射线产生像素,扫描从屏幕左上方开始,从左到右,从上到下。每扫描完一行,电子束回到屏幕下一行开始的起始位置,扫描完一帧图像回到屏幕左上方起始位置。 在换行和换帧期间,要对电子束进行消隐,也就是存在对行信号和场信号的消隐期。 在时序上存在消隐期和边界期,在此之间为有效数据。对于消隐期和边界期输出0即可。 TFT和VGA显示原理差不多,但扫描方式和时序参数有差异,需要针对不同硬件进行查找时序参数。
HDMI是高清多媒体接口,HDMI向下兼容DVI,DVI只能用来传输视频,不能传输音频,只传输视频的时候。HDMI和DVI实现是相同的。 DVI和HDMI接口协议均使用TMDS标准传输音视频。TMDS是一项高速的数据传输接口,使用差分信号来传输串行数据。 要实现一个HDMI控制器需要在类似VGA产生行场同步信号基础上,完成 8bit数据到10bit数据的编码模块和10bit并行数据到差分数据的串行转换模块。
8bit到10bit数据的编码,通过调用官方文档实现TMDS编码,此外需要完成通过调用ip核实现单沿采样到双沿采样,通过移位寄存器完成10bit数据串行发送。单端到差分部分,差分信号是将单端信号进行差分变换,输出两个信号一个与原信号同相,一个与原信号反相。
8 以太网 UDP?
UDP为用户数据报协议,UDP处于IP协议上一层。
局域网中,硬件地址又称为物理地址或者MAC地址,UDP都是以IP数据包的格式传输数据的,而IP数据报基于以太网数据帧格式,UDP关键在于将UDP数据打包成以太网数据帧格式。 以太网的数据帧格式为前同步码、SFD标识帧、目标地址、源地址、长度/类型、数据和填充、FSC帧校验。 在以太网数据帧格式中长度和数据填充中,包含ip数据包,ip数据包在长度/类型中为0x0800,在数据和填充中为ip报文的头部和ip报文数据,在ip报文数据中为udp报文头部和udp报文数据组成。
以太网检验字段FCS计算: CRC冗余循环校验。 ip头部校验,udo头部校验为可选,全填充为0表示不检验。
9 AHB,APB
AHBA总线规范,AHB属于其中一部分。AHB用于高性能,高时钟频率的系统结构,如ARM核和内部ram,DMA之间的连线。APB用于慢速外设模块。
AXI可以在高时钟频率下运行,实现高数据吞吐量。 AXI总线将读写请求和读写结果分离,将数据写入和数据读出信号分离,可以同时读出和写入,最大限度提高总线的数据吞吐率。
10 简述下图像去雾模块
OB5640采集到的rgb565格式的图像数据,通过sccb控制端口传入图像去雾模块,经过图像处理模块,将rgb565转换为rgb888的视频流数据格式,再通过ip核AXI4-stream 将数据转换为VDMA所能接收的AXI4-stream格式,VDMA将数据转化为memory-map存储到DDR3中,从DDR3中读取出AXI4-stream的数据格式,转化为rgb888,再通过rgb2lcd ip核显示到lcd屏幕上。
图像去雾模块是基于暗通道先验去雾,粗透射率估算和基于引导滤波的透射率细化。
图像去雾模块是基于暗通道先验去雾,根据雾天退化模型:待去雾图像等于清晰图像乘以透射率+大气光值乘以(1-透射率)。
暗通道先验理论:是无雾图像中,在不包含天空的区域通常有一些像素在至少一个颜色通道有非常低的强度值。
大气光值是取暗通道前百分之0.1的像素点进行平均计算得到,利用雾天退化模型和暗通道先验知识,对透射率进行估计。
基于引导滤波的透射率细化。
11 VDMA ?
VDMA实现图像数据的搬运,该软核可以高效的在内存和数据流之间切换,VDMA自带有帧缓存机制。 VDMA中的AXI4-stream协议负责完成VDMA和其他外部ip,如摄像头之间的数据通信。 AXI4-memory map协议负责VDMA读写DDR操作。所以VDMA在FPGA与arm之间搬运数据实际是通过AXI4-memory-map这个子协议来实现的,而AXI4-stream负责PL的VDMA和其他FPGA模块数据流通信。