我正在爲我的大學碩士論文在OpalKelly實現上編程Xilinx Spartan-6。 (XEM6010-LX45):https://www.opalkelly.com/products/xem6010/FPGA達到了USB的極限WireIns
它安裝在必須獲取多個信號(8+),處理它們並生成多個信號的板上(16個+)根據設置關閉一些反饋迴路。
它由用C#構建的用戶界面控制,我也編程自己,並且必須能夠在需要時更改反饋邏輯而無需重新開始實驗。這意味着USB接口連續發送數據來更新設置。
我剛剛遇到了我剛剛用完WireIns的經典(我想)問題,那就是Opal Kelly實現,用於將數據從C#程序傳輸到FPGA。
它們被限制爲16位數據,地址從0x00 - 0x1F(因此32 WireIns)。更多詳細的41頁http://assets00.opalkelly.com/library/FrontPanel-UM.pdf
這裏是問題:我怎樣才能增加我的數據可以發送到FPGA?
想到的第一個想法是一個大型的多路複用器在FPGA中只使用兩個WireIns,一個用於數據,另一個用作選擇器。然後觸發器激活FPGA,將數據存儲到正確的地址寄存器中。
這真的是可行的,或者它是令人難以置信的效率低下?我應該使用WireOR(請參閱我連接的FrontPanel手冊)?我是否應該使用PipeIn並以某種方式管理所需的多路複用器?
FPGA設計人員如何克服這種USB通信限制?
在此先感謝!
我沒有足夠的經驗來估計中期項目的可接受維度。目前我僅限於32位16位字,但至少需要三倍的數量,其中大部分應該是可修改的中間實驗,而不會影響其他值。我想知道是否有適當的/優化的方式來編碼這樣的多路複用器 – FlyerDragon 2015-02-26 14:23:37
非常感謝代碼,我對觸發信號有疑問:爲什麼不是rising_edge(trigger_signal),因爲它是我可以使用的脈衝?我在設計中有許多不同的時鐘:2,38,40,80Mhz – FlyerDragon 2015-03-04 15:57:15
只有在rising_edge語句中使用真正的時鐘信號。它是同步設計的第一條規則,寫了很多。並確保使用觸發器同步的時鐘(即,塊的clk端口中的觸發器)如果您有許多不同的時鐘,則需要非常小心地將在一個域中驅動的信號移動到另一個域 - 搜索時鐘域交叉 – 2015-03-04 20:56:28