FPGA研發(fā)之道(17)-化繁為簡(jiǎn)
有個(gè)笑話說(shuō),有個(gè)病人感冒了,于是去看醫(yī)生,醫(yī)生診斷后說(shuō),你得了感冒,但是我只會(huì)治療肺炎,不如你回家再澆點(diǎn)涼水,把病惡化成肺炎,那我能治了。這個(gè)笑話展示了庸醫(yī)誤人。但是另一方面,從邏輯上來(lái)講,醫(yī)生則是一個(gè)把未知問(wèn)題轉(zhuǎn)化成已知問(wèn)題的高手。
本文引用地址:http://cafeforensic.com/article/265499.htm不說(shuō)笑話,下面出兩個(gè)題目,其分別是
問(wèn)題1:運(yùn)用數(shù)字電路,如何將一個(gè)時(shí)鐘域的上升沿,轉(zhuǎn)換成另一個(gè)時(shí)鐘域的脈沖信號(hào)(單周期信號(hào))。
問(wèn)題2:運(yùn)用數(shù)字電路,如何將一個(gè)時(shí)鐘域的脈沖信號(hào)(單周期信號(hào)),轉(zhuǎn)換成另一個(gè)時(shí)鐘域的上升沿。
可能乍一看,這兩個(gè)題目?jī)?yōu)點(diǎn)難度,特別是第二個(gè)問(wèn)題,答上的就更少了。那再出第三道題目,會(huì)不會(huì)讓這個(gè)問(wèn)題變簡(jiǎn)單些那。
問(wèn)題3:運(yùn)用數(shù)字電路,如何將一個(gè)時(shí)鐘域的上升沿,轉(zhuǎn)換成另一個(gè)時(shí)鐘域的上升沿。
題目3,,就會(huì)讓人覺(jué)得太簡(jiǎn)單了,這既是異步信號(hào)的同步化,寄存兩拍就可以了。這CLKA信號(hào)就被同步到CLKB的方法,有一定數(shù)字電路知識(shí)的都會(huì) 。不論CLKA與CLKB時(shí)鐘頻率的高低。
下面回到題目1,我們按照那個(gè)庸醫(yī)的做法,把未知問(wèn)題轉(zhuǎn)換成已知問(wèn)題,那這個(gè)問(wèn)題就轉(zhuǎn)化成了兩個(gè)部分,A時(shí)鐘域的上升沿轉(zhuǎn)換成B時(shí)鐘域的上升沿,,然后B時(shí)鐘域的上升沿如何變成其單脈沖信號(hào)。所以問(wèn)題就很簡(jiǎn)單了,最后的輸出 B &! B_r(B信號(hào)寄存一拍). 電路如下所示。
那回到題目2.這個(gè)問(wèn)題就轉(zhuǎn)換成了A時(shí)鐘的脈沖信號(hào)轉(zhuǎn)換成A信號(hào)的上升沿,而A信號(hào)的上升沿,再轉(zhuǎn)換成B信號(hào)的上升沿。
那么,如何將已是時(shí)鐘信號(hào)的脈沖信號(hào),轉(zhuǎn)換成另一個(gè)時(shí)鐘的脈沖信號(hào)?呵呵。
以上只是兩個(gè)簡(jiǎn)單的電路,實(shí)際設(shè)計(jì)中,有許多可以進(jìn)行設(shè)計(jì),可以化繁為簡(jiǎn)或者化未知為已知的方法。
例如,實(shí)際設(shè)計(jì)中,經(jīng)常有設(shè)計(jì)變更的情況,比如,原來(lái)輸出的信號(hào)A,但是需要輸出信號(hào)B。那可能大多數(shù)情況,模塊不用重新設(shè)計(jì),只需要在原有輸出信號(hào)(或者數(shù)據(jù))A上,再添加相應(yīng)的輸出,或者封裝一層接口,就可以快速滿足需求。并且原有設(shè)計(jì)模塊也可以復(fù)用,并且已驗(yàn)證充分。通過(guò)化未知問(wèn)題為已知問(wèn)題的方式,簡(jiǎn)化設(shè)計(jì)和驗(yàn)證,能夠快速的設(shè)計(jì)需要。一方面,而這正是IP復(fù)用的好處,另一方面,原有設(shè)計(jì)如何達(dá)到IP復(fù)用的標(biāo)準(zhǔn),也是值得探索的部分。
這個(gè)故事,其實(shí)還有另一版本,那就是錘子和釘子,那就是如果你已經(jīng)有一把錘子,那就看什么都是釘子。如何將未知問(wèn)題轉(zhuǎn)化成你的錘子可以解決的釘子,則是就是設(shè)計(jì)復(fù)用的問(wèn)題了。
評(píng)論