什么是模塊化設(shè)計(jì)
FPGA/IC設(shè)計(jì)中根據(jù)模塊層次的不同有兩種基本的設(shè)計(jì)方法:
- 自下而上方法對(duì)設(shè)計(jì)進(jìn)行逐次劃分的過(guò)程是從基本單元出發(fā)的,設(shè)計(jì)樹(shù)最末枝上的單元是已經(jīng)設(shè)計(jì)好的基本單元,或者其他項(xiàng)目開(kāi)發(fā)好的單元或者IP。該方法先對(duì)底層的功能塊進(jìn)行分析,然后使用這些模塊來(lái)搭建規(guī)模更大的功能塊,如此繼續(xù)直至頂層模塊。
- 自上而下的設(shè)計(jì)是從系統(tǒng)級(jí)開(kāi)始,把系統(tǒng)分為基本單元,然后再把每個(gè)單元?jiǎng)澐譃橄乱粚哟蔚幕締卧?,繼續(xù)劃分知道滿足設(shè)計(jì)要求為止。該方法先定義頂層功能塊,進(jìn)而分析需要哪些構(gòu)成頂層模塊的必要子模塊;然后進(jìn)一步對(duì)各個(gè)子模塊進(jìn)行分解。
設(shè)計(jì)中這兩種方法往往是混用的。設(shè)計(jì)師首先根據(jù)功能定義好頂層模塊,然后依據(jù)一定的標(biāo)準(zhǔn)來(lái)劃分各個(gè)子模塊。同時(shí)對(duì)子模塊進(jìn)行優(yōu)化設(shè)計(jì),并使用這些子模塊來(lái)搭建上層模塊。兩者的工作按相反的方向獨(dú)立進(jìn)行,直至在某一中間點(diǎn)會(huì)合。
在設(shè)計(jì)系統(tǒng)時(shí),首先根據(jù)系統(tǒng)功能需求進(jìn)行分析,然后將復(fù)雜的系統(tǒng)分解為多個(gè)子模塊,這些子模塊還可以再繼續(xù)分解為更下一級(jí)的子模塊,直到滿足設(shè)計(jì)要求。模塊化設(shè)計(jì)可以提高代碼的可讀性,令設(shè)計(jì)思路更清晰,便于大型設(shè)計(jì)的分工合作和獨(dú)立測(cè)試,且有助于設(shè)計(jì)文件的維護(hù)和復(fù)用。
一個(gè)模塊化設(shè)計(jì)實(shí)例
假如現(xiàn)在需要你設(shè)計(jì)一個(gè)數(shù)字電路,它的功能是:開(kāi)發(fā)板數(shù)碼的管默認(rèn)顯示數(shù)字0,每按下一次按鍵key,則數(shù)碼管顯示的數(shù)字+1(顯示10進(jìn)制數(shù)字)。
首先需要的肯定是一個(gè)數(shù)碼管顯示模塊,它可以根據(jù)輸入的數(shù)據(jù),來(lái)顯示對(duì)應(yīng)的數(shù)字。然后需要一個(gè)能檢測(cè)到按鍵被按下的模塊,它每檢測(cè)到按鍵按下一次,都要輸出一個(gè)使能信號(hào)。最后是數(shù)據(jù)累加1模塊,每有一次按鍵模塊使能信號(hào)(表示按了一次按鍵)傳過(guò)來(lái),它都要使數(shù)據(jù)累加1。
因?yàn)殚_(kāi)發(fā)板上的按鍵是機(jī)械按鍵,按下和松開(kāi)的瞬間都會(huì)存在一定的機(jī)械抖動(dòng),為了正確的檢測(cè)到按鍵被按下,還需要設(shè)計(jì)一個(gè)按鍵消抖模塊,而用下降沿檢測(cè)即可檢測(cè)按鍵是否被按下。由于數(shù)碼管需要顯示的數(shù)字為10進(jìn)制,所以數(shù)據(jù)累加模塊產(chǎn)生的數(shù)據(jù)還需要進(jìn)行BCD轉(zhuǎn)化,這意味著要再設(shè)計(jì)一個(gè)2進(jìn)制轉(zhuǎn)BCD模塊。
這樣一個(gè)系統(tǒng)的逐層分解就完成了??吹竭@你可能會(huì)很不解,就這么一個(gè)簡(jiǎn)單的模塊還需要搞這么麻煩,直接寫(xiě)到一個(gè)模塊不就完事了嗎?雖然理論上任何設(shè)計(jì)都可以在同一個(gè)模塊中完成,但是如果將不同功能、不同層次、不同類型的電路混淆在同一個(gè)模塊中,卻不是一種好的系統(tǒng)設(shè)計(jì)方法,對(duì)于比較復(fù)雜的設(shè)計(jì),將會(huì)導(dǎo)致整個(gè)設(shè)計(jì)雜亂無(wú)章,不利于設(shè)計(jì)的閱讀與維護(hù),也會(huì)給綜合和實(shí)現(xiàn)過(guò)程帶來(lái)許多麻煩。
同時(shí),像按鍵消抖模塊,下降沿檢測(cè)模塊和BCD模塊可能都是初學(xué)者在學(xué)習(xí)過(guò)程中已經(jīng)設(shè)計(jì)過(guò)了的模塊,那么是將這些模塊直接拿過(guò)來(lái)例化方便還是重新寫(xiě)一遍RTL方便?
模塊劃分的方法
模塊劃分的方法和基本原則是:
- 子模塊功能相對(duì)獨(dú)立,模塊內(nèi)部聯(lián)系盡量緊密,而模塊間的連接盡量簡(jiǎn)單。子模塊的合理劃分非常重要,應(yīng)該綜合考慮子模塊的功能、結(jié)構(gòu)、時(shí)序、復(fù)雜度等多方面的因素。
- 層次不要太深,一般為3~5層即可。在綜合時(shí)綜合工具為了獲得更好的綜合效果,會(huì)默認(rèn)將RTL代碼的層次打平(Flatten)。為了在綜合后仿真和實(shí)現(xiàn)后仿真中較方便地找出一些中間信號(hào),比如子模塊之間的接口信號(hào)等,可 以在綜合工具中設(shè)置保留結(jié)構(gòu)層次,以便于查找和觀察仿真信號(hào)。
- 頂層模塊最好只包含對(duì)所有子模塊的組織和調(diào)用,而不要完成復(fù)雜的邏輯功能。比如只寫(xiě)輸入/輸出管腳聲明、模塊的調(diào)用與實(shí)例化、全局時(shí)鐘資源、全局置位/復(fù)位、三態(tài)Buffer和一些簡(jiǎn)單的組合邏輯。
- 子模塊之間也可以有接口,但是最好不要建立子模塊間跨層次的接口。例如上圖中模塊 A1到模塊 B1之間不要直接連接,兩者需要交換的信號(hào)可以通過(guò)模塊 A、模塊 B的接口傳遞。這樣可以增加設(shè)計(jì)的可讀性和可維護(hù)性。
下面是一些劃分模塊的優(yōu)化設(shè)計(jì)方法:
- 對(duì)每個(gè)同步時(shí)序設(shè)計(jì)的子模塊的輸出使用寄存器。這種模塊劃分符合時(shí)序約束的習(xí)慣,便于利用約束屬性進(jìn)行時(shí)序約束,可以達(dá)到更好的時(shí)序優(yōu)化效果,
- 將相關(guān)的邏輯或者可以復(fù)用的邏輯劃分在同一模塊內(nèi)。這樣可以在最大程度上復(fù)用資源,減少設(shè)計(jì)所消耗的面積。同時(shí)更利于綜合工具優(yōu)化某個(gè)具體功能的時(shí)序關(guān)鍵路徑。
- 將不同優(yōu)化目標(biāo)的模塊分開(kāi)。目前很多綜合與實(shí)現(xiàn)工具都支持物理區(qū)域位置約束,以模塊為單元進(jìn)行物理區(qū)域約束,就可以讓綜合工具僅需考慮單一的優(yōu)化目標(biāo),從而使優(yōu)化時(shí)序或面積就更有效。
- 可以將時(shí)序約束較松的邏輯歸到同一模塊。有些邏輯的時(shí)序非常寬松,不需要較高的時(shí)序約束。將這些模塊歸類,并指定寬松約束,則可以讓綜合器盡量節(jié)省面積資源和優(yōu)化布局布線。
- 將存儲(chǔ)邏輯(RAM、ROM、和 FIFO等)獨(dú)立劃分成模塊。這樣做的好處是便于利用綜合約束屬性顯化指定這些存儲(chǔ)單元的結(jié)構(gòu)和所使用的資源類型,也便于綜合器合理推斷出這些邏輯所使用的固定硬件資源。
總結(jié)
模塊化設(shè)計(jì)的優(yōu)點(diǎn):
- 代碼具有更好的可讀性,更容易理解設(shè)計(jì)的功能和數(shù)據(jù)之間的流動(dòng),更容易debug
- 代碼具有更好的可復(fù)用性,能減少多次設(shè)計(jì)之間的重復(fù)工作,避免重復(fù)造輪子,提高工作效率
- 不同模塊的時(shí)鐘域相對(duì)獨(dú)立,使跨時(shí)鐘域設(shè)計(jì)之間的邊界更清晰
模塊化設(shè)計(jì)是設(shè)計(jì)復(fù)雜數(shù)字系統(tǒng)的重要方法,對(duì)復(fù)雜設(shè)計(jì)的分工、測(cè)試以及代碼的閱讀、維護(hù)和復(fù)用都有好處。模塊劃分非常重要,其關(guān)系到能否最大程度上發(fā)揮項(xiàng)目成員協(xié)同設(shè)計(jì)的能力,更重要的是它直接決定著設(shè)計(jì)的綜合、 實(shí)現(xiàn)的耗時(shí)與效率。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-841342.html
復(fù)用都有好處。模塊劃分非常重要,其關(guān)系到能否最大程度上發(fā)揮項(xiàng)目成員協(xié)同設(shè)計(jì)的能力,更重要的是它直接決定著設(shè)計(jì)的綜合、 實(shí)現(xiàn)的耗時(shí)與效率。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-841342.html
- ??您有任何問(wèn)題,都可以在評(píng)論區(qū)和我交流??!
- ??本文由 孤獨(dú)的單刀 原創(chuàng),首發(fā)于CSDN平臺(tái)??,博客主頁(yè):wuzhikai.blog.csdn.net
- ??您的支持是我持續(xù)創(chuàng)作的最大動(dòng)力!如果本文對(duì)您有幫助,還請(qǐng)多多點(diǎn)贊??、評(píng)論??和收藏?!
到了這里,關(guān)于【FPGA/IC】什么是模塊化設(shè)計(jì)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!