always @ (posedge inputs)
begin
...
end
因?yàn)檫@個(gè)時(shí)鐘inputs很有問(wèn)題。如果begin ... end語(yǔ)句段涉及到多個(gè)D觸發(fā)器,你無(wú)法保證這些觸發(fā)器時(shí)鐘輸入的跳變沿到達(dá)的時(shí)刻處于同一時(shí)刻(準(zhǔn)確的說(shuō)是相差在一個(gè)很小的可接受的范圍)。因此,如果寫(xiě)出這樣的語(yǔ)句,EDA工具多半會(huì)報(bào)clock skew > data delay,造成建立/保持時(shí)間的沖突。本人曾經(jīng)也寫(xiě)出過(guò)這樣的語(yǔ)句,當(dāng)時(shí)是為了做分頻,受大二學(xué)的數(shù)字電路的影響,直接拿計(jì)數(shù)器的輸出做了后面模塊的時(shí)鐘。當(dāng)初用的開(kāi)發(fā)工具是max+plusII,編譯也通過(guò)了,燒到板子上跑倒也能跑起來(lái)(估計(jì)是因?yàn)闀r(shí)鐘頻率較低, 6M ),但后來(lái)拿到QuartusII中編譯就報(bào)clock skew > data delay。大家可能會(huì)說(shuō)分頻電路很常見(jiàn)的啊,分頻輸出該怎么用呢。我一直用的方法是采用邊沿檢測(cè)電路,用HDL語(yǔ)言描述大概是這樣:always @ (posedge Clk)
begin
inputs_reg <= inputs;
if (inputs_reg == 1'b0 && inputs == 1'b1)
begin
...
end
...
end
這是上跳沿檢測(cè)的電路,下跳沿電路大家依此類推。 2.異步時(shí)鐘域信號(hào)的處理 這個(gè)問(wèn)題也得分單一信號(hào)和總線信號(hào)來(lái)討論 2.1單一信號(hào)(如控制信號(hào))的處理 如果這個(gè)輸入信號(hào)來(lái)自異步時(shí)鐘域(比如FPGA芯片外部的輸入),一般采用同步器進(jìn)行同步。最基本的結(jié)構(gòu)是兩個(gè)緊密相連的觸發(fā)器,第一拍將輸入信號(hào)同步化,同步化后的輸出可能帶來(lái)建立/保持時(shí)間的沖突,產(chǎn)生亞穩(wěn)態(tài)。需要再寄存一拍,減少(注意是減少)亞穩(wěn)態(tài)帶來(lái)的影響。這種最基本的結(jié)構(gòu)叫做電平同步器。 如果我們需要用跳變沿而不是電平又該怎樣處理呢,還記得1里面講的邊沿檢測(cè)電路么?在電平同步器之后再加一級(jí)觸發(fā)器,用第二級(jí)觸發(fā)器的輸出和第三級(jí)觸發(fā)器的輸出來(lái)進(jìn)行操作。這種結(jié)構(gòu)叫做邊沿同步器。
always @ (posedge Clk)
begin
inputs_reg1 <= inputs;
inputs_reg2 <= inputs_reg1;
inputs_reg3 <= inputs_reg2;
if (inputs_reg2 == 1'b1 && inputs_reg3 == 1'b0)
begin
...
end
...
end
以上兩種同步器在慢時(shí)鐘域信號(hào)同步入快時(shí)鐘域時(shí)工作的很好,但是反過(guò)來(lái)的話,可能就工作不正常了。舉一個(gè)很簡(jiǎn)單的例子,如果被同步的信號(hào)脈沖只有一個(gè)快時(shí)鐘周期寬,且位于慢時(shí)鐘的兩個(gè)相鄰跳變沿之間,那么是采不到的。這時(shí)就需要采用脈沖同步器。這種同步器也是由3個(gè)觸發(fā)器組成。 脈沖同步器 由于脈沖在快時(shí)鐘域傳遞到慢時(shí)鐘域時(shí),慢時(shí)鐘有時(shí)無(wú)法采樣的信號(hào)奈奎是特采樣定理,因此需要對(duì)信號(hào)進(jìn)行處理,可以讓慢信號(hào)采樣到。脈沖同步器的結(jié)果如圖:
?
? 2.2總線信號(hào)的處理
如果簡(jiǎn)單的對(duì)異步時(shí)鐘域過(guò)來(lái)的一組信號(hào)分別用同步器的話,那么對(duì)這一組信號(hào)整體而言,亞穩(wěn)態(tài)出現(xiàn)的幾率將大大上升?;谶@一觀點(diǎn),對(duì)于總線信號(hào)的處理可以有兩種方式。
如果這組信號(hào)只是順序變化的話(如存儲(chǔ)器的地址),可以將其轉(zhuǎn)換為格雷碼后再發(fā)送,由于格雷碼相鄰碼字只相差一個(gè)比特,上面說(shuō)的同步器可以很好的發(fā)揮作用
但是如果信號(hào)的變化是隨機(jī)的(如存儲(chǔ)器的數(shù)據(jù)),這種方法便失效了,這時(shí)可以采用握手的方式或者采用FIFO或DPRAM進(jìn)行緩存。RAM緩存的方式在突發(fā)數(shù)據(jù)傳輸中優(yōu)勢(shì)比較明顯,現(xiàn)在高檔一點(diǎn)的FPGA中都有不少的BlockRAM資源,且支持配置為DPRAM或FIFO,這種處理方法在通信電路中非常常用。

精彩推薦 至芯科技12年不忘初心、再度起航2月11日北京中心FPGA工程師就業(yè)班開(kāi)課、線上線下多維教學(xué)、歡迎咨詢! 基于FPGA的千兆以太網(wǎng)ARP和UDP的實(shí)現(xiàn) FPGA學(xué)習(xí)-基于FPGA的圖像處理掃碼加微信邀請(qǐng)您加入FPGA學(xué)習(xí)交流群


歡迎加入至芯科技FPGA微信學(xué)習(xí)交流群,這里有一群優(yōu)秀的FPGA工程師、學(xué)生、老師、這里FPGA技術(shù)交流學(xué)習(xí)氛圍濃厚、相互分享、相互幫助、叫上小伙伴一起加入吧!
點(diǎn)個(gè)在看你最好看
原文標(biāo)題:FPGA同步轉(zhuǎn)換FPGA對(duì)輸入信號(hào)的處理
文章出處:【微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
FPGA
+關(guān)注
關(guān)注
1650文章
22217瀏覽量
627846
原文標(biāo)題:FPGA同步轉(zhuǎn)換FPGA對(duì)輸入信號(hào)的處理
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何用FPGA實(shí)現(xiàn)4K視頻的輸入輸出與處理
【TES817】青翼凌云科技基于XCZU19EG FPGA的高性能實(shí)時(shí)信號(hào)處理平臺(tái)
AMD FPGA異步模式與同步模式的對(duì)比
FPGA開(kāi)發(fā)任務(wù)
進(jìn)群免費(fèi)領(lǐng)FPGA學(xué)習(xí)資料!數(shù)字信號(hào)處理、傅里葉變換與FPGA開(kāi)發(fā)等
使用FPGA控制ADS8365模數(shù)轉(zhuǎn)換,沒(méi)有EOC輸出,FPGA無(wú)法讀取數(shù)據(jù),為什么?
ADC344X的外部同步輸入SYSREF范圍是-0.3~(AVDD + 0.3 = 2.1)V,是否可以通過(guò)FPGA輸出1.8V信號(hào)來(lái)直接驅(qū)動(dòng)?
FPGA 實(shí)時(shí)信號(hào)處理應(yīng)用 FPGA在圖像處理中的優(yōu)勢(shì)
FPGA 與微控制器優(yōu)缺點(diǎn)比較
在FPGA里面例化了8個(gè)jesd204B的ip核同步接收8塊AFE芯片的信號(hào),怎么連接設(shè)備時(shí)鐘和sysref到AFE和FPGA?
FPGA復(fù)位的8種技巧
FPGA基礎(chǔ)知識(shí)及設(shè)計(jì)和執(zhí)行FPGA應(yīng)用所需的工具
FPGA技術(shù)對(duì)5G通信的影響
FPGA在數(shù)據(jù)處理中的應(yīng)用實(shí)例
FPGA無(wú)芯片怎么進(jìn)行HDMI信號(hào)輸入

FPGA同步轉(zhuǎn)換FPGA對(duì)輸入信號(hào)的處理
評(píng)論