admin管理员组

文章数量:1566222

2023年12月30日发(作者:)

基于T35F324的FPGA开发板图像采集显示系统方案

1.前言

个人觉得易灵思的TriOn系列比钛金系列FPGA,就目前而言,更适合做图像显示相关应用,以T35和巨60为例,主要原因如下表所示:

系列

Trion

T35

40nm

硬核

硬核

钛金

Ti60

16nm

软核

软核

更低

工艺

DDR3

MIPI

功耗

易灵思如果专注图像细分领域,毕竟大部分客户还是用DDR和MIPI,因此我觉得钛金系列的架构真的脑袋被驴踢了,DDR和MIP1用硬核才是正确的选择!

另外,钛金系列FPGA相对推出时间不够,目前IP也不成熟。以T35为例,DDR硬核IP在EfinityInterface中直接可以调用DDRIP并设定相关参数,但是钛金系列Ti60还没有包含到工具链中,这让拿不到一手资源的FPGAer就很尴尬,虽然可以理解不集成到IDE中,可以更快的迭代前提不成熟的版本。

TSTUT20

T35TSSTBST120

■∙

1

YJM

MtIM

"3]

j。・可∙nXn,

°(Mft)

Mtauaxa

I IP11W

π

4

I

nr

»

MIM

3

Mt1)

11

I叼

ISO

■大50r

1VM(TKW1)

,IH

2J0

IUOKMfefH1

AicujetWinIM1R

∙1∙

■It

2∏

2TX JT1

m

]RX)11

兼容@01⑥MT

拨动开关BMW0V5生0等模

底板串口

DC3-40用户接口,兼容CraZyfpg>iomEfin1tyT3SF324-Cor∙V1.1一«...

M2X>S12

FPQABOa1Q

Efint

MIP1摄像头r

兼容树莓派r

OV5640

M1P1TX/RX接口,山谷0.8mm40P接口

J20230515

如上图所示,T35F324的FPGA开发板,我都做了快半年了,一直没有做一个基于视频图像的像样点的DCm0,甚是惭愧。为了给当下煎熬的大家送点福利,我打算分2步走,如下:

DVP相机+DDR3+1VDS-1CD实时显示系统

MIPI相机+DDR3+1VDS-1CD实时显示系统

前者更关注DDR3硬核、1VDSTX,以及进行并口相机的配置与图像采集,完成实时图像采集、缓存、显示系统;后者则借用1)的基础,更关注MIP1相机的开发,进一步把易灵思FPGA进行图像采集的优势,发挥一下。

当然这过程肯定还是有不少的坑,有些坑只有自己趟过,才有发言权。

设计详解

言归正传,我们开始干正事:基于T35的摄像头采集、存储、显示系统的介绍。

首先是FPGA时钟网络

这里涉及到DDR控制器的时钟,1VDSTX的快慢时钟,系统时钟,以及外设驱动时钟等,大致示意图如下:

由于Trion的P11是能输出3个时钟,因此将2个P11都用上了,一个产生IOOMHZ的系统时钟,48/168M的1VDS慢/快时钟,另一个P11产生DDR的驱动时钟400MHz,以及外部饯感圈的驱动时钟27MHz.另外,还有一个从传感器输入的像素时钟74.25MHz,作为视频流的同步时钟。

其次是硬核的配置

这里用到了DDR与1VDSTX硬核。关于DDR硬核的使用,外部使用的是三星的K4B4G1646E-BYMA,4G16bit容量。

在Interface中配置DDR控制器相关参数,如下图所示:

04⅞e1onhfiurxionAfMnced0p(•

SCirrt防M

CoeNroMrt

Se⅛(tConAgiMMtonRewf

K4H4

S

MfWMNy

IMW1S

mtK4(MG1M61

Drm1ty

∙D9

C1ose

1rwM≠MMn(FOMySen1ng

Modeeditor

me∙dOptiomContro1AHOAXII∙∙

1∙∙

g

:使融2ecooυα也可以DiSabIe(nβb*rQHibrMton

•EruiMeUtefRnK

EnabAeAesef CaHXWion

AxiOO

χ∣o

InveftAK1C1ockInput

SturedRe

MastetRM¢(RnN^n⅜e

Dddv1RSTN

UtctRMetPim

Sequent«vRpwtPinManw

Ddrα.S≡

Sequence*SU<1PinNjme

Ddrar1CFG-SeQUAin

B1ockFdHt⅛omContro1AXJoAnAddrraK)[7刈Bu⅞M«neDdrar1AO0O

AddrBRcMyPW1Niime

O

O

O

Mrar1MADY。

O

AddreuVJMPtnMMneMraf1_AVM" O

OAddrE()1X>)BusMiimeDdrCtrIAADORO

其实软件包含了颗粒的型号,因此配置还是挺简单的,对于用户接口,InterfaCe提供的是标准的AX1接口,其他的都是在硬核中,用户不需要例化,非常的简单。

关于1VDSTX的使用,主要是PORT的配置,以TXo为例,InterfaCe配置如下图所示:

4βMHz

这里特别需要注意的是,P111设置tx_fastc1k时,需要90度响铃;另外,Efinity的1VDS是1SB的,也就是先至1SB,这在InterfaCe的说明文档中有解释,如下图所示:

MngDataandC1ockRe1atk)nshφWidthof7(Para11e1C1ockDivis

另外,在1024*6001VDS手册中,1VDS时钟有一定的相位关系,如下所示,在7bit数据传输时,时钟为I1ooOI1

8bit1VDSinput

-: ______ /

i / ,

<ΞXΞXΞXΞDGDGDGΞX≡X≡)GΞ√GΞXΞΞXΞΞXΞΞXΞΞXΞΞ)GΞXΞO(ZtZDCDCZ)GDGDGDGdCΞ3

Note:SupportDEtimingmodeon1y,SYNCmodenotsupported

所以如上这部分代码,如下所示:

接着是相机的驱动

目前采用的AROI35是车规常用的130万全局曝光黑白相机,成像质量非常好,相关的参数如下所示:w1r∙w1r∙wirev

ue;

1«_“,,

9,1cd.b1ue{J

,1ed:1U<1J>1ue∣5i2]

1cd-

∙∙∙(gRa∙*1faιM∙fgWM∙1gn

1v<«_v

s1v

{c∙(e]1c∙(i](<*I0].[∙],di[i)(tf2:9]fd2(1j(O){∙1td](1)1SB

AR0135AT

1∕3∙inch1.2MpCMOSD1aIKIImaqe

SenSWitHGIobaTshuUer∣

O*∙C0pUV,

TheAIWUSATtemON!⅛*κua*iuκ1πf<∙.1∕‰-

OHS∙Eiconductoc

aκ⅛I2MPCMOSdι∣ft∙1tmageMntotw«h・e∙cu*e>pι%eiarra⅛ofI2O»QftO(V∣Ii∙4β∏pwdfarkm1⅞rfNprrfa∙mMκetndfeβ

uMHa0ota1IhUnaiorMnwf4v/KWdcamera(umitcwuaκ⅛MMMOCPmMCCaMIDI.

VMkdMk∖.acβ⅛nf1rg⅛>pmode,andhrth、idM>endMf∏0cframem«doIt»p∙t*ffwnaMMeιtv*κ^ιaM*∣⅛ħM**wwrwtu1 I⅛e

ARDI3MTpr0⅛κnr¾∙a04nan1⅜dear,∙1arpm⅝prχm1ιt>•∣M∙mIuG3tUaMMaI*⅞⅛o3MIetaaae**Aet*IhrPCdK1chnκ*iπvawt⅛αn∣rM<∣rtκa1Mna‹Inde/MMw*

oθ*t

∣∙GAM∙*∙

CAMM1AI

T∙∙1.κrtPtRFOAMAMCSRM1AMETtRS

ORDERiMOMFORMATIOM・4MM**•«*M

∙∣taφt,.

MtBr

MM⅞MM

FMtMMM

ueo(H>se(V)∙,…

0NS∙M∙M⅛dM⅛MtKIGCw

ISM ITBw*

(⅛MMwβct1

Cai*.~Arw MmcffFW

Sφcfκ∙<1(

M4IU∣MMiDa1UNKC

OtA rA

HDVa⅛α(73⅜M>

VMMr” QBMS⅝MV

2C*URange ‰4CWMf

O*

OutM*WO««ΠM∙mM∣

M2»MH1

CUM

RMMH-ta*1gpβ

Paratei

、e・iIIχ∣cπuι∣II1>∣wIM

HSP1tt-M

F*tm∙AM∙FMBR∙WMMΠg

• >I.∙.∙,..∙II;∙':r

M*∙9・

ApμMcMM>ra

4JntvM⅞>

•、-h∙1*hr

βt

• S¢aaMgMκħ∣arVMMM

8N⅝

・7。

• 79^fΛOVtdvoΛp0ιαMMNB

D∣mβa∙cA›W

H1«

我曾在《FPGA设计技巧与案例开发详解》一书中详细介绍了如何使用FPGA驱动CMOS摄像头,因此这里不再描述细节,给出框图如下:

AROI35相机

像素时钟〉

灰度图

CropSJ

1280*720视频流

像采集

1024*6∞

传感器初

始化

AX1读写

模块

这里在进行相机的初始化后,捕获输入的并行视频流数据;另外为了适配后面1024*600的1VDS1CD,再捕获数据后,直接Crop到1024*600分辨率。接着将数据送入AXI读写模块,将DVP转成AXI后写入DDRo

最后是视频流的缓存与显示

这一步其实和相机的数据缓存比较类似,无非是用一样的时序反着走一遍:即采用AX1从DDR中读取数据,转成并口后,送给后续的1CD驱动模块,再通过1vDS送给1CD显示,框图如下所示:

1024*6∞

1VDS1CD

最后,汇总整个时钟、DDR、相机、1CD驱动显示的框图,基于T35的摄像头采集、存储、显示系统,如下图所示:

一12M[

-48M-168M

P112

---- 25Mr

400M

-27M-

驱动时钟

像素时钟、

相机图像采集与CrOP

1CD时序AXI时序驱动

Pd1SOEU

*pMo-S

*p∙×E

传感器初始化

由于该趟的坑,都已经趟过一遍了,这里我们不得不再静下心来再分析讨论一下,这个设计中遇到的最大的坑一一DDR3的AXI接口竟然是SharedRead/WriteAddressChanne1,配置与接口代码如下所示:

Biodtfdftor

•Ad^anccdOpttcmContro1AWO∙∙

√Cf>3b*eTvge10AMQodIkφutRnMameAxCCk

Z6

Shared2dKmAddrettOunneI

*6t∙MpunwSsvw1KeadOtUOumRH

WivteDaiUiChAnnef

je

3S

■■

41

HZ

44

.■

47

48

output

(∏∙J

MeCtr1-WO-O

output

Ume1

.∙

OUIpUt

o<ι

(»«•1

DdrCtr1W1>sτ∙ output

output

DdrCtr1IZbfUXDθ

Input >CADY.∂

./∕(O){Wf

・/∕(0)1Wr1te)

"

//∕<0>(Wr

•//(O)JWfHe1

.//(I)IWfIWj

•〃⑴IgW1

■/∕<1)(RVM>∣

■//(1)Iβej

.//(O){ReMJ∣

■//(1>(Prαd1

ID

DaU

OJIdStrQbMT»v«i1Id)

DetβIJ1St

0«t4YdUd

ID

D3t414St

MM・VAIId

DataReedy

Re‰po∙tM

//DOftoutOQtfOf⅜PputoutpAXI4・1InejutOUtpM【11⑹(_8MEt

O∣

1AADMGMr1(M.∙

output

(soutput

IIM

ME1Wd6

Addr一W

■//(0)(Mdrc5j./∕JO)1AdAddie‰⅞

drc‰).//(O)μdth^¼!

AιM∙rSOvM⅜t1

AddressBurstsize

.//(0)iAddre5:

■〃⑼IACM31

«//(O)IAddrCTj

,/HO)IAddtes1

Addftr‰⅛6∣ιrMtyρ^

Addm¼1ocMtype

AddfessVa1id

Addt∙H∙‰81⅜dy

Oper>teType9-ReadI-WrHc

:Wr加0M4∣12h0f81ι¾M4meMtOrtJKkMAJ) O

output

[1output

1nρvtout

put

:91

DdrCtr1AIOCK.∙

1ID.Θ

MrCYf1A^∣M>V_ODdr■∕Z(1){A<¼∣C4∙fc}

X"IJTYPtJ

//(O)IMdres1

WntvIO∣H>∣0

WriteUBtAnNameOdKtrtWIΛ¼IO O

WHteBayPtnMaeetMfOΠ.VΠCADV.O O

:5加SnobM∣tSd>∣8MNMWCWfa>1wsτ*o O

WtitcViMΛΛ∙Mmr

Dd<λtO-0 O

Input

input

Input

Input

output

Input

IM

[unoj

MfCtrtPXO6

MX31M0A1AJ

DdrCtr1PYA1ID.0

DdrCtr1,WEΛDV.0

.∙

那就意味着,虽然AX1

IT:∙]

input .Θ ■"U)1*n,E1 ResponseWriteID

1πpvt

DdrCtrIjrrMIO6

Re‰0gsv41Id

∙/∕(∣)IAnwiRpf:

可以做到读写通道独立,output

•∕Z(O)fAnwRer) Re^pcn^e∙rΛdy

DdrCtr1,∣W1ADV.0

M

但我不能同时发起读命令与写命令。如果AX1读写通道是完全独立的,则我们可以这样设计,即读归读,写归写,设计相对简单。

但是现在竟然AX1的读写地址通道是Shared,我被惊讶到了,毕竟做了七八年芯片,AX1也是手抬过很多遍,Shared地址通过的阉割版,还是有点不适应,毕竟当读写冲突的时候,必须做仲裁,同时也需要更大的FIFO,还缓存读写通道的数据。

tnei

图像

视频数据

WR-FIFO

DDR3

控制器

3.总结

花了九牛二虎之力,搞定了1280*720@60HZ的AROI35采集,然后裁剪成1024*600后,与1024*600的1CD显示数据仲裁读写DDR(加入读写仲裁,且读数据优先,),最后得到的效果是这样的:

这里,我还是不解,易灵思的DDR控制器,如果是买的,那SynoPSyS应该是标准的AXI;或者如果是买的DDRPHY+自研的控制器,那应该至少遵循标准,为什么会出一个阉割版本的AX1接口呢?

百思不得其解,但这也无法阻碍我们前进。在不久的将来,我将写基于易灵思FPGA的MIPI相机采集显示开发详解。

黄飞

本文标签: 显示时钟采集图像系统