前进3

123 阅读17分钟

1 HDMI接口和DVI接口协议

HDMI 向下兼容DVI。

DVI和HDMI 接口协议在物理层 均使用TMDS标准传输音视频数据。

TMDS标准:最小化传输差分信号,TMDS是一项高速数据传输技术,在DVI和HDMI视频接口中使用 差分信号 传输高速串行数据。

DVI或HDMI视频传输所使用的的TMDS连接通过四个串行通道实现。

同时传输 blue green red三个通道,时钟信号通道。 四个通道

DVI编码:

8bit - 10bit 编码过程

10bit并行数据到差分数据串行 转换

并行转串行通过移位实现。移位寄存器,控制输出。

单端到差分: 单端输入指信号有一个参考端和一个信号端构成,参考端一般为地端,差分是将单端信号进行差分变换,输出两个信号,一个和原信号同相,一个和原信号反相。

差分信号两根线传输,对单端信号取反,然后分别传输。

2 图像格式

1 RAW

图像传感器中,感光阵列由红,绿,蓝三种感光点组成,假如这种每个感光像素点转换成数字信号后直接输出就得到了RAW格式的图像数据。

这种数据保留了很多原始信息,数据量大。保存了更多的细节。

2 RGB

RGB是RAW格式经一系列处理后得到的图像格式,三原色组合的图像格式。

3 YCrCb 即YUV

YcrCb,Y代表亮度分量 灰度值,Cb代表蓝色色度分量,Cr代表红色色度分量。

Cr反映了RGB输入信号红色部分和RGB信号亮度值的差异

Cb反映了RGB输入信号蓝色部分和亮度值之间的差异。

3 SDRAM

SDRAM采取单端信号,数据采集只在上升沿进行采样

地址线分时复用 (行列地址),需要刷新。- 所以对时序要求严格。

SDRAM容量计算:bank数x存储单元位宽x存储单元数

SDRAM的设计: 写模块,读模块,初始化模块,自动刷新模块 : 电容会放电,需要刷新, 仲裁模块 : 判断处理优先级

对于初始化模块: sdram初始化至少两次自动刷新,上电后 必须进行初始化。

初始化命令: 预充电命令+自动刷新命令+寄存器配置命令

自动刷新模块: 由于电容存储电荷会随时间流逝,所以要对电容进行刷新也就是充电,防止数据丢失。

开始自刷新时,要对所有bank进行预充电,写入预充电指令后等待一段时间tRP,写入刷新指令,这时候时钟使能信号为低电平,进入自刷新模式,时钟信号拉高,退出自刷新模式。随后就可以进行正常操作。

预充电、刷新指令、进入自刷新模式。

数据写模块: sdram完成其他操作前必须初始化结束

数据读模块

仲裁模块:其中初始化模块优先级最高。初始化之后才可以进行数据读写,同时为了保持数据就需要间隔进行自动刷新。多个操作同时请求,或者如果某一操作正在执行,其他操作请求执行,我们需要仲裁模块。

优先级: 自动刷新 数据写 数据读。 每一路请求信号只有在仲裁状态才会被响应,保证每一路信号正在响应不会被其他信号所打断。

4 为什么使用格雷码? 二进制转格雷码,格雷码转二进制?

由于异步fifo读指针和写指针分别属于不同的时钟域,这样指针在进行同步的过程中容易出错,采用格雷码,相邻每位只有一位发生变化,这样在进行指针同步的时候们就会产生同步正确。 即使同步出错,出错的也是写指针的跳变不变,对于读空判断,最多导致fifo不是真空的时候产生读空,而不会出现读空。格雷码保证即使读写指针同步后出错,也不影响fifo功能的正确性。

二进制转格雷码: 最高位不变,其余位与前一位做异或运算。

格雷码转二进制: 最高位不变,次高位为高位二进制和格雷码的异或。

5 什么是竞争和冒险? 怎么避免?

竞争: 在组合电路中,当某一个变量经过两条路径到达输出端时候,由于每条路径延迟时间不同,到达终点的时间就有先后,这一现象称为竞争。

冒险:由于竞争现象所引起电路输出发生瞬间错误的现象,如输出端的尖峰脉冲的现象,称为冒险。

FPGA中最简单的避免方法就是使用时序同步逻辑 同步输入输出。 采用可靠性编码如格雷码。 加滤波电容。

滤波电容

增加冗余项

6 什么是亚稳态? 建立时间和保持时间? 怎么解决?

信号的传输都会有时序要求,从而保证每个寄存器捕获输入信号正常输出。为了保证可靠的操作,输入寄存器的信号必须在寄存器建立时间之前保持稳定,并且持续到是时钟沿之后的某段时间-保持时间。 而该寄存器的输入到输出需要经过一定的延时,这个时间为时钟到输出的时间。 如果数据信号的变化违反了建立时间或者保持时间的要求,那么寄存器的就会处于亚稳态,此时寄存器大输出在高电平和低电平之间盘旋一段时间。 这意味着寄存器的输出达到一个稳定的高或者低电平的时间大于时钟到输出的时间。 此时输出的数据不稳定。

建立时间: 触发器时钟上升沿到来之前,数据稳定不变的时间。

保持时间: 触发器时钟上升沿到来之后,数据稳定不变的时间。

7 乒乓操作、串并转换、流水线思想?

乒乓操作对数据流进行控制处理,一般通过多个数据缓冲区实现对数据的无缝缓冲和处理。 比如在输入和输出之间加入两个ram进行数据缓冲,这样就可以实现数据的无缝缓冲和处理。

串并转换是一种高速数据流处理方法,其原理为通过移位寄存器将数据缓存,比需要同时输出三行数据,在原先输出一行数据的基础上增加两个寄存器,通过移位的方式,延迟两拍,等第四行数据到来时,同时输出三个寄存器上的数据,实现并行输出。

流水线思想将设计拆分为多个步骤来实现,整个数据的处理是单向的,没有反馈和迭代。通过加入寄存器进行时钟控制实现流水线思想。 比如我们完成一个操作需要四个步骤,而采用流水线思想,我们在每个步骤后加入寄存器进行时钟控制,这样第一个数据的处理和正常一样需要四个时钟周期,而第五个时钟周期的时候就可以完成第二个数据的处理,不考虑第一个数据的处理,后续数据处理的速度是之前的四倍。

8 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是时钟驱动协议,无时钟无法正常工作。

9 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数据串行发送。单端到差分部分,差分信号是将单端信号进行差分变换,输出两个信号一个与原信号同相,一个与原信号反相。

10 以太网 UDP?将UDP数据打包成以太网数据帧格式。

UDP为用户数据报协议,UDP处于IP协议上一层。

局域网中,硬件地址又称为物理地址或者MAC地址,UDP都是以IP数据包的格式传输数据的,而IP数据报基于以太网数据帧格式,UDP关键在于将UDP数据打包成以太网数据帧格式。

以太网的数据帧格式为前同步码、SFD标识帧、目标地址、源地址、长度/类型、数据和填充、FSC帧校验。 在以太网数据帧格式中长度和数据填充中,包含ip数据包,ip数据包在长度/类型中为0x0800,在数据和填充中为ip报文的头部和ip报文数据,在ip报文数据中为udp报文头部和udp报文数据组成。

以太网检验字段FCS计算: CRC冗余循环校验。 ip头部校验,udp头部校验为可选,全填充为0表示不检验。

11 AHB,APB

AHBA总线规范,AHB属于其中一部分。AHB用于高性能,高时钟频率的系统结构,如ARM核和内部ram,DMA之间的连线。APB用于慢速外设模块。

AXI可以在高时钟频率下运行,实现高数据吞吐量。 AXI总线将读写请求和读写结果分离,将数据写入和数据读出信号分离,可以同时读出和写入,最大限度提高总线的数据吞吐率。

12 VDMA

VDMA实现图像数据的搬运,该软核可以高效的在内存和数据流之间切换,VDMA自带有帧缓存机制。 VDMA中的AXI4-stream协议负责完成VDMA和其他外部ip,如摄像头之间的数据通信。 AXI4-memory map协议负责VDMA读写DDR操作。所以VDMA在FPGA与arm之间搬运数据实际是通过AXI4-memory-map这个子协议来实现的,而AXI4-stream负责PL的VDMA和其他FPGA模块数据流通信。

STA静态时序分析

13 关键路径 及解决办法

关键路径是指同步逻辑电路中,组合逻辑时间延迟最大路径。

1 流水线:在组合逻辑中插入寄存器,流水线思想,额外插入寄存器在保持吞吐量不变的情况下,改善了设计的时序性能。

2 寄存器平衡:在不增加寄存器个数的前提下,通过改变寄存器的位置优化关键路径。将关键路径的组合逻辑移动到相邻路径。

3 并行化

14 时间余量slack分析,最大时钟频率的计算

时间余量slack = 数据需求时间 - 数据到达时间

数据需求时间为 Tclk + Tclk2 - Tsu

Tsu为建立时间。 其中Tclk2 为时钟信号从时钟源端口出发,到达目的寄存器时钟端口的时间。

数据到达时间为TClk1+ Tco+ Tdata

其中Tclk1为时钟信号从时钟源端口出发,到达源寄存器时钟端口的时间。

Tco为时钟上升沿到达寄存器时钟端到寄存器输出端Q的时间。

Tdata为两个寄存器之间的逻辑延时

Tskew: 时钟偏斜 时钟从源端口出发,到达目的寄存器和源寄存器 时钟端口的时间差值。Tclk2 - Tclk1。

15 verilog中常量parameter 和宏定义define区别

parameter 一般用于被调用的子模块,将子模块的特定常量参数化。 参数的定义可以在模块内部,需要用defparam来对参数重定义。参数定义也可以在端口,参数的重定义类似信号的例化。

localparam模块内有效的定义,是局部变量,不可以用于参数传递,也不可以重定义。适用于当模块内的常量需要被参数化,但不需要被其他模块重定义。比如状态机的状态变量。适用于固定的本地常量。

define 作用于整个工程,适用于跨文件调用。 实质为一条编译指令,功能使用文本宏来代替常量,类似c语言中的define。 一般使用一个参数文件 统一预定义所有module被调用的参数,方便管理。

16 什么是亚稳态,为什么两级触发器可以防止亚稳态传播

亚稳态:

为了保证信号的可靠传输,输入寄存器的信号必须在建立时间之前保持稳定,并持续到时钟沿之后的某段时间-保持时间。 而该寄存器的输入到输出需要经过一定的延时,这个时间为时钟到输出的时间。 如果数据的变化违反了建立时间或者保持时间,那么寄存器就会处于亚稳态,此时寄存器的输出就会在高电平和低电平之间盘旋一段时间。这意味着寄存器的输出 达到一个稳定的高电平或者低电平的时间 大于时钟到输出的时间,此时输出的数据不稳定。

通过两级触发器的思想是给亚稳态留出足够的时间,让亚稳态变为稳定态。

一般亚稳态的持续时间很短,两级触发启动目的是给亚稳态留出一个触发器的工作时钟周期, 如果第一个触发器的输出出现亚稳态,那么在一个时钟周期内,让亚稳态变为稳定态,这样在第二级触发器在采样第一级触发器的输出时,第一级触发的输出早就稳定了,因此不会出现亚稳态的传播。 如果第二级采样时保持时间不够,第一级的输出仍未很强的亚稳态,将会导致第二级同步器也进入亚稳态,但这样的概率很小。

亚稳态其他解决方法: 专用握手协议,或者异步fifo。

17异步信号的同步处理,从控制信号和数据总线两方面回答

从单一信号(如控制信号):如果和这个输入信号来自异步时钟域,一般采用同步器进行同步,最基本的结构是两级触发器,第一拍将数据同步化,同步后的输出可能带来建立时间/保持时间的冲突,再需要寄存器延迟一拍,减少亚稳态的影响。

对于数据总线信号的处理:如果对于一组信号整体而言采用同步器,亚稳态的概率会大大提升。对于总线信号,如果这组信号是顺序变化(如存储器的地址),可以将其转化为格雷码后再发送,格雷码相邻每位只有1bit发生变化,使得同步器可以很好地发挥作用。果信号的变化是随机的(存储器的数据),这时就需要用专用的握手协议或者采用fifo等存储器进行数据缓存。

18 阻塞赋值和非阻塞赋值,适用场合

阻塞赋值=在阻塞赋值完成后,才进行下一条语句的执行,赋值一旦完成,等号左边的变量值就会发生更新。非阻塞复制<=,在赋值开始时计算表达式右边的值,赋值不会立即生效,在赋值结束后更新表达式左边的值,非阻塞赋值在块中是并行同时执行的。

适用场合:时序电路建模时,使用非阻塞赋值,用always块建立组合逻辑使用阻塞赋值。在同一个always块既使用组合逻辑又使用时序逻辑,使用非阻塞赋值。

19 多路选择器 3-8译码器设计

    input a,b,c;
    output reg [7:0]out;  
    
    always@(a,b,c) begin
        case({a,b,c}):
            3'b000: out = 8'b0000_0001;
            3'b001: out = 8'b0000_0010;
            3'b010: out = 8'b0000_0100;
            3'b011: out = 8'b0000_1000;
            3'b100: out = 8'b0001_0000;    
            3'b101: out = 8'b0010_0000;
            3'b110: out = 8'b0100_0000;
            3'b111: out = 8'b1000_0000;    
            
    endcase
    end
            
endmodule

20 二选一多路选择器

    input a,b,sel;
    output reg out;
    always@(sel or a or b)
         if(!sel)
             out  = a;
         else 
             out  = b;
    
      
    endmodule

21 FPGA设计流程

电路设计RTL - 功能仿真 - 逻辑综合 - 布局布线 - 时序仿真 - 板级仿真和验证 - 调试和加载配置 等主要步骤。