1. 程式人生 > 實用技巧 >FPGA設計基礎交流【彙總貼】

FPGA設計基礎交流【彙總貼】

【問題1.1】如何知道ddr3裡不空,可以讀取了?
答:DDR3和RAM一樣,是一個儲存器件,它的每個內部單元都儲存了當前的資料狀態值。
但DDR3和RAM本身,是沒有“空”、“存有資料”,“資料滿”等概念的。只要給地址,它就會把當前地址的資料給到總線上,而且這個地址可以讀很多次。
在設計的時候,是由設計師用自己寫邏輯來判斷DDR3是否為空。

【問題2】SPI多位元組傳送是多個位元組連在一起發還是分成單位元組來進行傳送?
答:每款晶片的資料手冊,都會有時序圖的介紹,需要按照晶片資料手冊的要求進行通訊。每款晶片的要求都是不同的。
所以,您需要查閱資料手冊。

【問題3】如何避免競爭和冒險的情況?
答:競爭和冒險是由於組合電路中計算的延遲不一致而導致的。它是天然的、不可克服的現象。

雖然它不可克服,但在FPGA設計裡,它根本就不是一個問題。
因為FPGA都是在D觸發器的時鐘上升沿對電路進行取樣,只要時鐘上升沿前,電路計算結果已經確定,競爭和冒險已經沒有了,那就不會有問題。
那設計時,如何確認時鐘上升沿前,計算結果已經確定了呢?
這就靠時序報告了:時序報告會告訴任何兩個D觸發器之間,它們電路延時之和,從而確認在上升沿之前計算結果確定。
總而言之,設計時不用考慮競爭和冒險;設計完看,看時序報告;沒有問題,那就正常;如果時序報告有問題,就解決時序問題。

【問題4】計數器分頻怎麼個不穩定法?
答:1. 時鐘在FPGA裡是非常重要的,所有的暫存器都是統一在時鐘的節拍下工作。這個時鐘就相當於一個軍隊的司令部,暫存器都聽從司令部的命令下工作。

2. 一個穩定的系統,時鐘是越少越好。就相當於,一個軍隊,司令部越少越好。如果司令部越多,那麼部隊之間的協作必須要增加流程和成本。
3. 計數器分頻的時鐘,無形中增加了時鐘個數,另一方面,就相當於弄一個自己獨立的王國,自然就不穩定。

【問題5】模擬是正確的,但為什麼上板就不行?
答:首先要明確,模擬可以而上板不行,這是屬於研發過程中,非常非常之正常的現象,可以說模擬通過後,上板一次性就成功的概率,小之又小。
原因是:模擬只是用電腦模擬執行的情況,它與真實情況可能有所差別。例如:

  1. 輸入激勵是您想象出來的,事實上是不是這樣輸入?
  2. 您的程式碼是否可以綜合出電路?
  3. 您的模擬是否測試完所有的情況?
    以上都表示了模擬和實際是有差距的,所以不能認為“模擬正確了,上板就正確”。

【問題6:管腳未分配的現象】老師,我把CPLD的一個引腳接到了LED燈,但是程式中沒有分配這個管腳,第一個版本的程式上電後這個LED燈一直是亮的。第二個版本上電後LED一直是滅的。這兩個版本的程式,都沒有對這個管腳分配,是什麼原因導致的呢?
答:管腳如果未分配,則管腳電平值可認為是不可控,也就是隨機。

【問題7:FPGA資源不足問題】當程式所使用的資源,超出FPGA晶片資源時,如何處理?
答:1. 按照錯誤提示,判斷是哪種資源不足,如管腳數、RAM、暫存器等。
2. 閱讀資源QUARTUS、ISE和VIVADO的資源報告,檢視是哪些模組佔用了哪些資源。
3. 分析該專案程式中各個模組的資源佔用情況,分析程式碼,綜合運用多種方法,以求減少資源的使用,如速度換資源;去除冗餘的邏輯;降低設計精度;速度換資源等方法。注意,這些都需要花費大量時間,一點一點去摳資源。
4. 如果資源依然不足,可以考慮換更高階的晶片;或者改變功能需求等。

【問題8】 就是lvds恢復出資料和時鐘,對齊是需要手動調節時鐘相位,還是寫程式碼自動調節?serdes
答:我們做法是手動調節相位對齊。理論上,任何功能都可以使用程式碼來調節,只是有沒有必要以及複雜度而已。

【問題9】FPGA生成的DDS資料如何匯出到matlab中

  1. 可以通過串列埠、千兆網等介面,傳送到電腦上;
  2. 可以採用線上除錯工具,如SIGNALTAP、CHIPSCOPE、VIVADO等,捕捉到訊號,然後儲存的方式得到資料。

【問題10】通常情況下rtl程式碼module裡面的輸入訊號,值是哪裡來的呢?
答: 1. 來源於其他模組的輸出
2. 來源於FPGA外部的管腳,例如按鍵、其他晶片的輸出訊號等

【問題11】問一下關於敏感訊號的事情,任何訊號都可以被當作敏感訊號嗎?也就是always模組裡面:always @(posedge din_vld or negedge rst_n)begin這樣寫可以嗎?

答:語法上是可以的,但不符合FPGA和ASIC的設計規範。一般這個是寫時鐘和復位訊號。不規範的話,會造成系統的不穩定

【問題12】if(counter<8)請問這句程式碼是什麼意思呢,按理來說/的優先順序高於左移運算子呀?
答:不清楚它要表達的含義。串並轉換的方法,可以參考至簡設設計原理與應用書籍, 串列埠案例。
FPGA至簡設計原理與應用】書籍連載13 第三篇FPGA至簡設計專案實踐 第四章 串列埠通訊
http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=1013&fromuid=9396
(出處: 明德揚論壇)

【問題13】老師,怎麼將訊號實現準確的ns級別的延時呢,有什麼好思路嗎?
[color=rgba(17, 31, 44, 0.56)]答:正規的做法,就是採用暫存器打拍來延遲,精度為一個時鐘週期

【問題14】lvds和lvds_25有什麼區別?
答:主要區別在於內部buffer的供電電源情況,在電氣方面,兩者是等效的(參見資料手冊規格)但是內部的I/O電路配置不同

【問題15】xilinx,spartan6的jtag引腳,tck,tms,tdi,tdo需要做上拉處理嗎
在這裡插入圖片描述

這個是ALTERA EP4C的JTAG電路,僅供參考

【問題16】復位訊號必須要放到敏感訊號列表嗎?
答:非同步復位需要將復位訊號加到敏感列表,同步訊號不需要

【問題17】用FPGA輸出0->1或者1->0的訊號,我現在想把上升沿或者下降沿的時間拉長到10ms左右,用FPGA的輸出管腳可以實現嗎?
答:FPGA直接輸出的數字訊號,上升沿和下降沿都是很快就完成變化的。如果要控制變慢,其實就是輸出固定電平的訊號,那麼這個需要外接DAC來實現。

【問題18】我們的TFT顯示屏是工作在DE模式,是吧?
答:我們的案例預設使用的是DE模式,如果需要非DE模式,可以手動修改底板硬體實現。

【問題19】很多的數位電子元件的引腳都是要求有明確的電平(0/1),但是有個別的器件引腳連結時,可以處於懸空狀態【但很多的教材上寫的 引腳不能懸空,因為可能導致數字邏輯電路的狀態不確定】,這一點如何理解呢~?
答:對於這種引腳,需要去看對應晶片的資料手冊,一般裡面都會有介紹說明的。

【問題20】CPLD是沒有IP核可以使用嗎?
答:看要使用的ip核是什麼型別,像RAM、FIFO等固有資源都是有IP核的

【問題21】多個模組的輸出訊號,可以連到一起,共同驅動另一個模組嗎?
答:遇到此問題,可以稍微推理一下就能清楚了。例如模組A有一個輸出訊號a,模組B有一個輸出訊號b,然後這兩個訊號連在一起(怎麼做的不清楚,先假充有這種情況),共同均有一個模組C的輸入訊號c。
那麼存在這種情況,模組A要輸出1,模組B要輸出0給模組C,那麼模組C收到的是0還是1呢?這種情況下,模組C就不清楚收到什麼了。
所以本題答案:兩個模組的輸出訊號不能連在一起。

【問題22】實質的時鐘週期與模擬時鐘週期有差別,這個差別會累積起來嗎?
答:模擬的時候使用的是理想時鐘,例如50M時鐘,在實質的板上不可能完全等於50M的,一定有差別。
這種差別的積累,可能會對“總時間”有影響,例如計算1秒時鐘,那麼就有可能有差別了。
但這種差別的積累,不會產生時序的混亂:因為FPGA內,所有D觸發器,都是在一個時鐘週期內計算完的,只要滿足時序要求,不關心實際頻率是多少,總之上升沿來就計算一次。
如不清楚,請模擬,嘗試用不同週期的時鐘來對同一個電路模擬。

【問題23】如果扇出很大,high fanout 到了4000多,要怎麼優化?
答:扇出是指一個訊號驅動了很多其他訊號(即這個訊號是其他很多訊號的產生條件),FPGA對扇出數量有要求,不能扇出太多。
如果扇出太多了,該怎麼優化呢?現舉例如下:
假設訊號A,驅動了訊號BCDEFG,即扇出數為6。優化思路是:讓A用暫存器分別產生訊號A1和A2,再用A1驅動訊號BCD,用A2驅動訊號EFG。這樣扇出數減少為3。

【問題24】如果FPGA晶片沒有時鐘晶振,其他IO口是不是就不能輸入資料呀。晶振影響輸入資料不?答:要看輸入是否需要時鐘。
例如:使用串列埠的時候,在電路上就接收和傳送兩根線,沒有用到時鐘,所以晶振不影響。
而攝像頭輸出影象的時候,需要先給攝像頭一個時鐘,再進行相關的配置,這時晶振就有影響。

【問題25】非同步訊號慢時鐘域採集到快時鐘域的方法有嗎?
答:1、使用FIFO進行跨時鐘域處理
2、慢時鐘域的訊號到快時鐘域,是可以被採集到的,跨時鐘域之後進行打拍,使其同步化即可

轉載自:FPGA設計基礎交流【彙總貼】