LVDS数据处理_第1页
LVDS数据处理_第2页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LVDS数据采集表1版本内容版本修改人修改内容2015.8.26劳子俊初稿完成2015.8.29新增gen_frame模块2015.9.1新增sdram_ctrl模块2015.9.4新增sdram_refresh等模块2015.9.9新增sdram_read模块一、功能简述:如图1所示,外部以LVDS形式把数据采集传入FPGA,采集的数据经过LVDS_buf串行转并行把数据变成16bit然后把数据储存到SDRAM_Ctrl模块,再经Gen_frame模块对数据执行“组贞”处理后,最后经USB通信方式把数据传送给PC机。图1模块分布连接图二、模块详细描述:1、表2管脚定义序号管脚名PD位宽状态备

2、注1s_clkin1/系统时钟,50Mhz2s_rst_nin1/系统复位,低有效3lvds_clkin1/lvds时钟,24Mhz4usb_clkin1/usb时钟,48Mhz5lvds_datain3/lvds数据输入,其中8位有效6flag_cin1写FIFO的empty信号,低有效7flag_bin1读FIFO的full信号,低有效8wr_nout1写当flag_c为低时,wr_n为低,低有效9oe_nout1读当flag_b为低时,oe_n为低,低有效10rd_nout1读当flag_b为低时,oe_n为低,低有效11pkg_endout1写当pkg_end个时钟低脉冲,wr_n置高

3、12addrout2/2b10为W_FIFO;2bOO为R_FIFO13usb_datainout16/usb数据输入输出,包含r_data,w_dataswlsn)E4EPIM舉块om-ee昴eppe養¥uqsn【I-ls痿舊sDIPe眾匚燈川co画OS8【0耳】elepqsnEodLr:!壯瞇汕、VS只【0耳】elepqsnE0出亠/壯瞇汕、版也mHSvmI089ubAu-血硼usb_clkIIIIIIIIIIIIII flag_cPIlliIllii!iiiif 心i:-:i1IIIIIIIIIWdatari5:01!xxxxxxIxxxxxxIdod1-!d510!d511I

4、IIIIIIIIIIIIIIIIIaddr1:0!?b00丨?bio丨丨丨!IIIIIIIIIIIIIpkgendIIIIIIII:1丨丨1111IIIIIIIII丨丨图4写时序FPGA向USB内部FIFO写时序见L214: 第一步,先选择w_fifo(EP6)即把addr赋值为2'b10。 第二步,检测w_fifo内部数据是否为空,即检测flag_c是否为低电平。 第三步,若flag_c为低,则wr_n拉低,把数据写入w_fifo(EP6)。 第四步,写入w_fifo数据共有512个。写完后wr_n拉高,等待PC机读取w_fifo数据。若PC机已经读取完数据,flag_c会拉低(即空

5、),进入 状态,如此循环。注:【1】本实验板所用USB中FIFO字深为1024byte,位宽为8bit,因数据一次传送16bit,因此要接收1024/2=512(次)【2】pkg_end为知识拓展,若pkg_end保持一个时钟周期低脉冲,则w_fifo认为已满,手动将wr_n置高,不再写数据。因实验板未连线,本次实验并未用到。usb_clkJIIIIIIII1IIIIflag_bJIIIIIIIIIIIIIIII/-XIII(3)oenIIIIIII|iiiiiiiii|rdniiiiiiiiiUIIIIUIIir_data15:0!xxxxxx;xxxxxx:xxxxxx!xxxxxx!dO

6、丨ch丨d5笛IIIIIIIII(T)addr1:0!250;ZbOO:!:1丨丨1111IIIIIIIII图5FPGA向USB内部FIFO读时序FPGA向USB内部FIFO读时序见5:图6oe_n与rd_n关系图第一步,先选择r_fifo(EP2)即把addr赋值为2'b00。第二步,检测r_fifo内部数据是否为满,即检测flag_b是否为低电平 第三步,若flag_b为低,则re_n,oe_n同时拉低,把数据从r_fifo(EP2)读出。 第四步,从r_fifo读出数据共有512个。读完后re_n,oe_n同时拉高,等待PC机写入r_fifo数据。若PC机已经写入完数据,flag

7、_b会拉低(即写满),进入状态,如此循环。注:由图6所示,只有oe_n与rd_n同时拉低,才能保证R_FIFO数据有效输出且不丢数据。RFIFOoe_n<4r_data15:0EP2rd_n7耳w、®usblctr-m姑罪口-誇usbladdr+gqI2、blosBf、wrn®wlf-agsal、usbldatasBf涉wldata、usblc-k涉USBts。匚0blc-k玉3应wQ.sau5:=UGblAdckl01画7usbc=r一r3Vqj、rv2】genlhame®lss®Gffl®®h甦馮!Jreadlstart龙1

8、33mhz规廉siw燙-&3誇readlsorrtsfG®H£-&Mffi、歹133mhzJ48mhzsiw燙尹U0C天HrppppppK-f-aqcc-一一-rea严siari"-一一一"一sianbuf-画9readlbufSHHH1-9、亩readlstart(專卄-B-ffi-33亠8)巾斤冲第讪、苗酬startbuf、曲甘击、startbuf、龙加玄趣口斋甘®庄S洋尅廉亠呱血。®庄S洋塔煎nl>usblctr-一藏姑、S洋塔Bfx亠8-h55、8-h55、Co-Icntlh、Co-lent-、10207

9、8-hoo)。HF2-133mhzsreadlstart茁readlreq亠呱血恶、iFT-斤少藏姑®庄msGsddata嬉fflJn>izmsFIFO£。-味XUSB甘Ep6£s塔fflan、f_aglc田酬織击。辿a133mhz*IM48mhzsfttglc-HPKBnHF咆(smf_agcsfGcw屋洋ffi、H程庄s吻報和并斜)1 s133mhzreadreqa咆硏回斤少藏姑、或ql嬉ffl(sfifoJn>ffl)。2 fifo嬉ffl棘庄。M£、fifoJn>H£-&133mhz、棘庄卑-B-甘48mhz。

10、w_clk(133mhz)i_data15:0»FIFOr_clk(48mhz)注:E1生成cntfifo计数器。o_data15:02.在flag_c下降沿之后,开始读数据。A3.每r_clk_b升沿,cntfifo+1,当crrtfifo=colcnt时,不在读薮据o图10gen_frame里的FIFO图像一行为1000个像素,每个像素8位,如今传输数据为16位,共传输1000/2=500个数据,要预留2行数据个数,即1000个。因此,FIFO定义位宽:16bit,深度:1024。(为什么要预留2行数据呢?那是因为读写是同时执行的,但是写的时钟比读的时钟快,写进1行同时读出1行。

11、fifo在读写同时执行时,内部数据总个数大于一行),clk_133mhzwr_reqwr_data图11gen_frame里的FIFO写时序cik_48mhz_rTTTT_L_n_n_r_L_r_L_r_LIIIiIIiIIIIIIIIIiIiiiirdeq图12gen_frame里的FIFO读时序如何做跨时钟域处理:1. 如图13所示,由133mhz->48mhzread_start经过4级寄存器后相或得到133/433mhzv48mhz的脉冲信号,经过2级寄存器消除毛刺,更为稳定。图13read_reg跨时钟域2. read_req为低往高时钟跨越,像按键消抖处理48T133mhz。

12、消除毛刺,更为稳定。注:此模块因为有时钟域跨越问题,对于毛刺的消除尤为重要,毛刺严重影响了系统的稳定性。如跨时钟信号:read_start,read_req,flag_c都要进行消毛刺处理。3】sdram_ctrl模块(型号:HY57V281620A)图14SDRAM内部bank如何确定本工程驱动SDRAM的时钟频率:例1:若图像为640*48060hz,一个像素点为24bit则总数据量为640*480*60*24卜442368000bit,但SDRAM个存储单位最大只有16bit,所以要2个存储单位(32bit)存储一个像素点(浪费8bit),每秒总数据量:640*480*60*116*2=

13、589824000bit时钟存储量:16bit驱动SDRAM时钟频率:589824000/16=36864000-37Mhz例2:若图像为1080*192030hz,个像素点为24bit,则总数据量为1080*1920*30*16*2=1990656000bit驱动SDRAM时钟频率:1990656000/16=124416000124.4MhzPRECHARGE(去激活):1. precharge是使处在激活状态的bank回到未激活状态,简称去激活2. 若A10为1选择allbank,则BA1:0无效。若A10为0选择onebank,则BA1:0选择4个bank中的一个。3. 在READor

14、WRITE完毕后,要执行precharge以便下次读写。4. bank执行了precharge(去激活)后,则进入IDLE状态,如要执行READorWRITE命令,必需先执行activated(激活)命令。AUTOPRECHAREG(自动去激活)在写和读的时候,A10决定了是否选定AUTOPRECHAREG1. A10为1,则执行读(写)时,系统自动执行PRECHAREG2. A10为0,读(写)为单纯读(写)命令,需要人为执行PRECHAREGLOADMODEREGISTER(模式设置):1. A0A12为MODEREGISTER(模式设置)的模式寄存器。2. 要加载MODEREGISTER

15、,必须所有bank处于IDLE状态。AUTOREFRESH(自动刷新):如图15initial,在初始化的时候使用两次。Initialization(始化):图15Initial状态跳转在制作SDRAM芯片时已经预定义:芯片上电且电源、CLK稳定且CKE为高后,必须对SDRAM进行初始化,如图15初始化步骤下:1.上电200us之内,执行cmd=NOP。2.200us延时完成时,执行cmd=precharge_all(PALL)3执行cmd=AutoRefresh(REF)*2次4执行cmd=ModeRegisterSet(MRS)注:cycle为驱动SDRAM的时钟周期7.5ns【1】sd_

16、clk_180。通过pin脚连接SDRAM,sd_clk_0。与模块程序连接。【2】Trp=15ns-3*cycle;Trc=60ns-9*cycle;【3】除了NOP和INHIBIT命令可占多个cycle,其他命令均必须为1个cycle。否则会认为多次执行该命令,因此命令间应以NOP作为穿插。wt)rk_ensdram_clk田initiaLendcommand18.0&S3initia一二一画18sdraminitia-禰涪口ModeRegisteset(二1BustLength(:丼血4蓉-淫护124.£2AlAoH3、bolG2BIType(3S丼血2蓉-sequen

17、tia-(能修)Interleaved(曲御)typeJASsequentia-、A3H1、bo00«»:41、SIHS、atti-so1:sio35、Msf第诽10001p、s§、畳聶讪蓉m艸、353233344AL>0Length£iLatencyMode-L-IL.0O-di.ooAddress图17BurstLength4突发类型Type=SequenlialType二llnterleav&dWithinaBurstBURSTDEZJNmoN丼血2蓉m艸、谨丸豁匡甘2昔39專茸亟豁。swiaassa、£6A®A&

18、#163;H3、boll-棘3塔甫->塔®沿HH2#?I®MsBurstLength(渤木胸)sdram_clkcmdaddrdata_TurLnLrLrLrLTLIIIIIIIrd!3)rx】(IlliIlli11111(xXxXx)(do)(diX也)(d3IIIIIIIIIIIII图18潜伏期为3,突发长度为4的读模式与BurstLength选择为2相比:选择3的话,SDRAM的输出端多加1级寄存器延时2拍,缩短寄存器与寄存器间连线距离,可以接受更高时钟频率要求。寄存器与寄存器间路径的延时,决定了可以接受的最高时钟频率。4.OperatingModeA8,A7=

19、2'b00;5.WriteBurstModeA9=1'b0;FunctionCKEn-1ncsRASCASWEBA1BADA10A12,A11A9-ADDevicedeselect:DESLjHXHKXXXNXXNooperation(INOPHXLHHHXNXXBurstslop(BSTiHXLHHLXNXXReadHXLHLHVVLVReadwihauioprhargeHXLHLHVVHVWriteHXLHLLVVLVWritewithauloprechaidHXLHLLVVHVBankaclivaieACTHXLLHHVVVVPrchargasleclbankfPREHX

20、LLHLVVLXPrecharge乱IIbanks(PALL)HXLLHLMKHXCBRAutoRfresh(REF)HHLLLHMKXXSell-Refresh(SELF)HLLLLHMKXXMaderegaler(MPS)HXLLLLLLLVNate:H=Vn.L=Vlx=VihqiVl,V=ValidData.图19Command真值表配置寄存器的V值为:A9:0=10'b00_0011_0010;。:H11?&1电回還枷弔肓占晶独映balll虽电恤归5nNsnz6置舉駆训CN。-H-奩恤snz6是g>IPEepsJiH忙snvw、®44snz«

21、-ldulR伺on匸3""uq(s£u=喪駆汕-胆晅iilllsaljaruw.lps版也ICNI®、0CNISSosis、廂雇徉ffilrffl3si皿&1«恃snSCN9.HH960寸、sn0001-1*寸9-S1®sm寸9'seI0A0qse.IJe.I960寸IT、S呂廿一一ISEep田皿眾E廂雇osissfBSE®HEtf栏Hh叵轻眠曲:st乏<HQS二svs)HSU1MU.U1N-os<曲処LISPJPIUEPSocxlnbQJIJaJpu方ocolTJPUeEEOul±pl

22、uuepsulttllsZEaJlueps=vlule.lps組在奩恤E®l£8?s>IPEeps疑映胆代«$6£doNHPUD.寸JUJ&Npulu、出迫ballll电壕、呼UH旨|1|电电丽41*画21sdramlrefresh蒲迪画sdamwse=3ffi-vdsdat:a15:0breakendvdslwreqsdrDJmc-kwriteenbursrbreaklfQrgcommand18:0ramladdr8:0wendwsdsmldaEr15:0Wr1teeq画22sdramlwrite)®口合画2225、耳w、sdl

23、-amlwirte8»BB-L堕1馮_vdsbuff藏姑规廉s一vdslwleqNNMs、state二DLffistate:wleq2.茁Mliteleqsiw®tt®state-CEOstate:CEO廉telenuu1。w+1口聖itelenHu1讪茁witeleqsfflstate:lvleq漠聖state-ACRsqlbanp?rowMcmdNBankactivate(ACT4cmdHN0PDT3今cydewan廉sdramlc-ksACTIenduu1、state-Acdffistate-wirte12usKgJ、游血巾Hrefreshlreq£

24、;s-GcmdHWrite©6渤胸甘43劭©、dmdHN0PDT3今Qde。M讪凹壬亩GJn劭©'aaCOLack斗嬉、wGJnyl。巾徉->sdramdks4184103ftsiwKO-e、并斜田ssrte-wirtlffistate-beako富owlencsiwKO-&茁Ferusiw、anGcmdH(0RASCASWEoMDibreakendsdram_clkwrowendbreakpsxzpRopULm1pedlage、2anF->sdramlc-ksbeaklend、茁富ends、味beaklend8181wlend專、田s

25、srHe-beaEJffi=ssrEe-IDLE。画23胡沏耳血6H12us7、F7refreshlreq-GcmdHwite©6渤胸甘43劭©、dmdHNOPDT3->cyde。亩Jnyl®B->fflan、BMrefreshlreq£s。F->sdramlc-kswualbeak酬奚-&并斜田ssrte-wirtlffissrte-beako田bualbeaks酬烫-&茁bualbeaklfDgsiw、魂讪+sqlcmdHpechage、2anF->sdramlc-ksbeaklend、茁bualbeaklf&

26、lt;8sl!Kbeaklendfi?fi?bualbeaklf»g專、并斜田nunumnu1_njIrrIILNOPXpreXaNOP3'b1113'b0-101abreak0wreqsdram_clkburst_breakbreak_endburst_break_flagCMDRASCASWEstate图24写状态刷新中断产生波形图sdram_cik_i8o。-TTTTTTTTTTTTJ-LPLLTLLsdramelk0°CMDRASCASWEA11:0outputdata15:0X:II-NOP3'b111:=»NOP3'b0

27、113cycleBANK3erNOPJ3'bAd100fdnrNOP012)(3)ITENOPNOP图25SDRAM写时序如图26-27所示,sdram_ctrl模块设计思路:1. 当接收到work_en=1,由state:IDLE跳到state:INIT。2. 当初始化完毕,接收到initial_end=1,由state:INIT跳到state:CEO。3. 当接收到refresh模块的"efresh_req=1,由state:CEO跳到state:refresh,发送refresh_en=1给sdram_refresh模块。4. 当接收到sdram_refresh模块的”

28、efresh_end=1,由state:refresh跳到state:CEO,等到下一个信号。5. 当接收到sdram_write模块的write_req=1,由state:CEO跳到state:write,并发送rite_en=1给sdram_write模块。6. 当接收到sdram_write模块的,由state:write跳至Ustate:CEO,等到下一个信号。7当sdram_ctrI模块写完一帧数据时,拉高frame_end,直到sdram_read模块读完一帧数据才将fram_end拉低。采集frame_end上升沿作为输出信号w_end&&break_endsdr

29、amwirtePDLEworken=1lvds_w_req=1>w_req&&frameend=分支1】w_row_end分支2】burst_break.breakwitreburst_break_flag&&breakendwrite_req=1&&refresh_req=0_0writeen=1.ACTsdramCtrlrefreshrefreshmoduleREFRESHrefreshendIDLEINITCEOread_start=1发送给gen_farme模块,等待送gen_read_req图26sdram_write与主状态机联

30、系图图27sdram_read与主状态机联系图8.当接收到sdram_write模块的ead_req=1,由state:CEO跳到state:read,并发送read_en=1给sdram_write模块。9当接收到sdram_read模块的由state:read跳到state:CEO,等到下一个信号。如图28-31,所示,sdram_read模块设计思路:0.当sdram_ctrI模块写完一帧数据时,拉高frame_end,直到sdram_read模块读完一帧数据才将fram_end拉低。采集frame_end上升沿作为输出信号read_start=1发送给gen_farme模块,等待送gen_read_req1. (sdram_read模块)当接收到gen_farme模块发送gen_read_req=1,对其延拍相或后得到信号gen_req_high,若gen_req_high=1则本模块直接由state:IDLE跳到state:r_req。2. 将read_rec拉高输出到state:CEO,等state:CEO送read_en=1。3. 接收至U”ead_en=:后,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论