題(tí)目
实現(xiàn)攝像头(tóu)OV7670的(de)配置及(jí)完成(chéng)图(tú)像的(de)采集。請读(dú)者(zhě)考慮实現(xiàn)該功能(néng)需要(yào)哪些模块(kuài)?進(jìn)行模块(kuài)劃(huà)分(fēn)并給(gěi)出(chū)端口(kǒu)定(dìng)義,不(bù)需要(yào)写出(chū)代(dài)碼。
模块(kuài)劃(huà)分(fēn)
根(gēn)據(jù)需配置外(wài)設交互架構,模块(kuài)劃(huà)分(fēn)如(rú)图(tú)6-16所(suǒ)示:
图(tú)6-16 初步模块(kuài)劃(huà)分(fēn)
進(jìn)一(yī)步分(fēn)析配置模块(kuài)及(jí)接口(kǒu)模块(kuài)。
1. 配置模块(kuài)
從OV7670的(de)datasheet可(kě)知,完成(chéng)某些必要(yào)寄存器的(de)配置,OV7670才能(néng)正(zhèng)常工作,而(ér)配置不(bù)同(tóng)的(de)寄存器,又能(néng)够实現(xiàn)不(bù)同(tóng)的(de)功能(néng)。配置模块(kuài)根(gēn)據(jù)配置要(yào)求産生(shēng)读(dú)写命令、數據(jù)與(yǔ)地(dì)址給(gěi)接口(kǒu)模块(kuài)。配置表(biǎo)里(lǐ)包(bāo)含操作碼,所(suǒ)有(yǒu)寄存器的(de)地(dì)址以(yǐ)及(jí)寄存器的(de)配置值。
下(xià)面(miàn)詳细(xì)介紹配置表(biǎo),以(yǐ)下(xià)是(shì)OV7670的(de)部(bù)分(fēn)配置表(biǎo):
2
3 always@(*) begin
4 case(reg_cnt)
5 0 : add_wdata = {2'b11,16'h1204};
6 1 : add_wdata = {2'b11,16'h40d0};
7 2 : add_wdata = {2'b11,16'h3a04};
8 3 : add_wdata = {2'b11,16'h3dc8};
9 4 : add_wdata = {2'b11,16'h1e31};
10 5 : add_wdata = {2'b11,16'h6b00};
11 ……
12 163 : add_wdata = {2'b11,16'h0903};
13 164 : add_wdata = {2'b11,16'h3b42};
14 default : add_wdata = 0;
15 endcase
16 end
17
(1)REG_NUM表(biǎo)示此(cǐ)外(wài)設寄存器總(zǒng)數。
(2)配置表(biǎo)存放(fàng)的(de)格式为(wèi):“操作碼”+“地(dì)址”+“配置值”,比如(rú):add_wdata = {2'b11,16'h1204},其操作碼是(shì)2’b11,地(dì)址是(shì)8’h12,配置值是(shì)8’h04。
(3)操作碼为(wèi)2比特(tè),00表(biǎo)示空操作;01表(biǎo)示只(zhī)读(dú);10表(biǎo)示只(zhī)写;11表(biǎo)示先(xiān)写後(hòu)读(dú)。
(4)配置模块(kuài)读(dú)取(qǔ)配置表(biǎo),根(gēn)據(jù)操作碼来(lái)發(fà)送命令給(gěi)接口(kǒu)模块(kuài)。如(rú)果(guǒ)操作碼为(wèi)00,則跳过(guò)此(cǐ)命令;如(rú)果(guǒ)操作碼为(wèi)01,則産生(shēng)一(yī)个(gè)读(dú)命令給(gěi)接口(kǒu)模块(kuài),读(dú)地(dì)址是(shì)配置表(biǎo)給(gěi)出(chū)的(de)地(dì)址;如(rú)果(guǒ)操作碼为(wèi)10,則産生(shēng)一(yī)个(gè)写命令給(gěi)接口(kǒu)模块(kuài),写地(dì)址和(hé)写數據(jù)由(yóu)配置表(biǎo)給(gěi)出(chū);如(rú)果(guǒ)操作碼为(wèi)11,則先(xiān)給(gěi)写命令,写地(dì)址和(hé)写數據(jù)由(yóu)配置表(biǎo)給(gěi)出(chū),執行完後(hòu),再給(gěi)读(dú)命令,读(dú)地(dì)址與(yǔ)本(běn)次(cì)操作的(de)写地(dì)址相同(tóng)。
采用(yòng)需配置外(wài)設交互架構,在(zài)配置具有(yǒu)多(duō)功能(néng)的(de)外(wài)設的(de)寄存器时(shí),能(néng)够很方(fāng)便地(dì)進(jìn)行調試,僅需通(tòng)过(guò)修改配置表(biǎo)就(jiù)可(kě)以(yǐ)实現(xiàn),所(suǒ)以(yǐ)明(míng)德揚強(qiáng)烈推薦此(cǐ)類(lèi)外(wài)設使用(yòng)該構架。調試过(guò)程一(yī)般是(shì)确認读(dú)操作,看(kàn)能(néng)否读(dú)1个(gè)寄存器數據(jù),從而(ér)确保读(dú)操作沒(méi)問(wèn)題(tí);然後(hòu)写1个(gè)寄存器再读(dú)出(chū)来(lái),确認读(dú)出(chū)来(lái)的(de)數據(jù)是(shì)不(bù)是(shì)写進(jìn)去(qù)的(de)數據(jù),從而(ér)确保读(dú)写操作沒(méi)問(wèn)題(tí);之後(hòu)連(lián)續依次(cì)读(dú)写一(yī)組寄存器,确保每次(cì)读(dú)写都正(zhèng)确;最(zuì)後(hòu)把读(dú)功能(néng)取(qǔ)消,只(zhī)保留写功能(néng),作为(wèi)最(zuì)後(hòu)的(de)代(dài)碼。
2. 接口(kǒu)模块(kuài)
接口(kǒu)模块(kuài)需要(yào)完成(chéng)两(liǎng)个(gè)功能(néng):一(yī)是(shì)完成(chéng)OV7670的(de)配置,即根(gēn)據(jù)配置模块(kuài)的(de)读(dú)写命令及(jí)數據(jù)産生(shēng)SCCB操作时(shí)序(查閱OV7670的(de)datasheet,OV7670的(de)配置接口(kǒu)是(shì)SCCB);二(èr)是(shì)完成(chéng)OV7670的(de)图(tú)像采集。所(suǒ)以(yǐ)模块(kuài)劃(huà)分(fēn)原則一(yī),一(yī)个(gè)功能(néng)一(yī)个(gè)模块(kuài),接口(kǒu)模块(kuài)可(kě)以(yǐ)劃(huà)分(fēn)为(wèi)SCCB接口(kǒu)模块(kuài)與(yǔ)采集模块(kuài)。
綜上(shàng),模块(kuài)劃(huà)分(fēn)結果(guǒ)如(rú)图(tú)6-18。
图(tú)6-18 模块(kuài)劃(huà)分(fēn)框图(tú)
模块(kuài)的(de)端口(kǒu)及(jí)模块(kuài)之間(jiān)數據(jù)流向(xiàng)
模块(kuài)劃(huà)分(fēn)好(hǎo)後(hòu),需要(yào)進(jìn)一(yī)步确認模块(kuài)的(de)端口(kǒu)及(jí)模块(kuài)之間(jiān)的(de)數據(jù)流向(xiàng)。可(kě)參考5.1.2 模块(kuài)劃(huà)分(fēn)端口(kǒu)規範。模块(kuài)劃(huà)分(fēn)最(zuì)終(zhōng)結果(guǒ)如(rú)图(tú)6-19所(suǒ)示:
图(tú)6-19 模块(kuài)劃(huà)分(fēn)最(zuì)終(zhōng)框图(tú)
技術(shù)交流QQ群(qún):544453837
更(gèng)多(duō)FPGA技術(shù)資訊:明(míng)德揚科教
了(le)解(jiě)>>至(zhì)簡設計(jì)法


















