国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

零基礎學FPGA (二十) 你好2015,小墨談可編程邏輯設計思想與技巧!對您肯定有用!

發布時間:2015-1-20 14:41    發布者:wp1981
關鍵詞: 小墨同學 , 零基礎 , FPGA
作者:小墨同學

       折騰了一個多月,大學生的考試月總算是結束了,一個月來,小墨同學一共復習了6門專業課,整天就是看書看書,不過總算是結束了這學期的課程,剩下的時間才是真正屬于我的時間~昨天還把6本專業書放在一起拍了個照,來紀念一下這一個多月的奮斗史...

      好快,迎來了2015年,想想自己2014年的經歷,還算是蠻豐富的,別的我們不說,我看了一下自己以前寫的東西,好像是2014年的這個時候開始寫的第一篇文章,一年了,自己的文章數量也有了20篇,訪問量嘛~也還可以,畢竟拿了兩個獎,還是挺高興的。2014前半年可以說還沒怎么開始學FPGA,前半年都去搞labview ,主要是大二下學期加上這個學期才開始的,算算也就大半年的時間了,半年的時間小墨同學還是收獲蠻多的,雖然博客更新的慢了點...不過今天開始在未來的2個月里,不用復習的我會相繼給大家更新這段時間小墨的學習經歷以及學習過程,這幾天更新的就快了,也希望大家多多關注哈~

     承蒙至芯科技的雷老師厚愛,小墨也暫時加入至芯科技,與那里的老師一起帶領更多的想從事FPGA開發的人來進入這個領域,1月18號小墨同學也要奔赴北京,去做至芯科技十幾天的實習生,對于我這個剛上大三的大學生來說,一切都是陌生,也不知道會發生什么,之前也沒去過京城,只希望這次行程能夠給小墨帶來想要的收獲吧~

      今天給大家帶來的是我們在FPGA設計中經常要遇到的設計技巧與思想,即乒乓操作,串并轉換,流水線操作和跨時鐘域信號的同步問題。

      之前也看過一些書,也在網上找過一些資料,不過小墨發現大部分都是理論講解,僅僅是給一個框圖就沒事了,或者是好幾個網站的資料都是一樣的,都是復制的一個地方的,僅僅是講解,沒有實例,要不就是某個網站提供源碼,但是要注冊,還要花什么積分,沒有積分還得要錢...很不利于初學者的學習(人與人之間怎么就不能多點信任呢~還要錢...)。所以小墨想寫這么一篇文章來介紹一下這4種思想,理論部分書上多得是,我就不過多的解釋,主要給大家講一些實例型的幫大家理解。

一、乒乓操作

        乒乓操作主要用于數據流的處理,是用面積換取速度的體現之一,要知道面積與速度的互換貫穿FPGA設計的始終,下面先給一個框圖



我先來解釋一下乒乓操作的過程:
        首先數據需要通過一個2選一數據選擇器,在第一個時鐘周期將數據緩存到緩存模塊1,常用的緩存模塊可以是fifo,雙口RAM(DPRAM),單口RAM(SPRAM),第二個時鐘周期的時候,數據流開始往緩存模塊2里面寫數據,與此同時,預處理模塊會從緩存模塊1里面讀取數據,到了第三個時鐘周期數據流再往緩存模塊1里面寫數據,與此同時,預處理模塊2開始從緩存模塊2讀取數據,周而復始...這樣,輸入數據流和輸出數據流按節拍來回切換,可以使數據沒有停頓的進行傳輸,使傳輸速率大大提高。

       小墨同學發現,在給這個框圖配實例的時候,幾乎所有的網站都是這個解釋,我用紅字標出,個人感覺解釋的不怎么樣,還有些地方是錯的

假設端口 A 的輸入數據流的速率為 100Mbps ,乒乓操作的緩沖周期是 10ms 。以下分析各個節點端口的數據速率。
A 端口處輸入數據流速率為 100Mbps ,在第 1 個緩沖周期 10ms 內,通過 “ 輸入數據選擇單元 ” ,從 B1 到達 DPRAM1 。 B1 的數據速率也是 100Mbps , DPRAM1 要在 10ms 內寫入 1Mb 數據。同理,在第 2 個 10ms ,數據流被切換到 DPRAM2 ,端口 B2 的數據速率也是 100Mbps , DPRAM2 在第 2 個 10ms 被寫入 1Mb 數據。在第 3 個 10ms ,數據流又切換到 DPRAM1 , DPRAM1 被寫入 1Mb 數據。

       仔細分析就會發現到第 3 個緩沖周期時,留給 DPRAM1 讀取數據并送到 “ 數據預處理模塊 1” 的時間一共是 20ms 。有的工程師困惑于 DPRAM1 的讀數時間為什么是 20ms ,這個時間是這樣得來的:首先,在在第 2 個緩沖周期向 DPRAM2 寫數據的 10ms 內, DPRAM1 可以進行讀操作;另外,在第 1 個緩沖周期的第 5ms 起 ( 絕對時間為 5ms 時刻 ) , DPRAM1 就可以一邊向 500K 以后的地址寫數據,一邊從地址 0 讀數,到達 10ms 時, DPRAM1 剛好寫完了 1Mb 數據,并且讀了 500K 數據,這個緩沖時間內 DPRAM1 讀了 5ms ;在第 3 個緩沖周期的第 5ms 起 ( 絕對時間為 35ms 時刻 ) ,同理可以一邊向 500K 以后的地址寫數據一邊從地址 0 讀數,又讀取了 5 個 ms ,所以截止 DPRAM1 第一個周期存入的數據被完全覆蓋以前, DPRAM1 最多可以讀取 20ms 時間,而所需讀取的數據為 1Mb ,所以端口 C1 的數據速率為: 1Mb/20ms=50Mbps 。因此, “ 數據預處理模塊 1” 的最低數據吞吐能力也僅僅要求為 50Mbps 。同理, “ 數據預處理模塊 2” 的最低數據吞吐能力也僅僅要求為 50Mbps 。換言之,通過乒乓操作, “ 數據預處理模塊 ” 的時序壓力減輕了,所要求的數據處理速率僅僅為輸入數據速率的 1/2 。

雖然各個網站上都是這么解釋的,但是個人感覺解釋的不怎么樣,下面我用我自己的理解給大家解釋一下這個例子

先看我給大家畫的一個圖,雖然畫的不怎么樣



這里我們只計算緩存模塊1的速率

首先看第一個周期10ms,數據流往緩存模塊1里面寫數據,到第5ms時,預處理模塊1開始從緩存模塊1里面讀數據,到10ms時,緩存模塊1寫了1M數據,讀了5K數據,下面切換到第二個周期,由于在第二個周期的時候預處理模塊1還可以從緩存模塊1里面讀數據,所以到第15ms時,緩存模塊1里面的數據被讀完



到了第三個時鐘周期,也就是從第20ms開始數據流往緩存模塊1寫數據,到第25ms時,預處理模塊開始從緩存模塊讀數據,直到35ms時才讀完,這樣我們來算一下,在第一個時鐘周期讀了5K數據,注意我上面畫的時鐘周期數,就是那個半圓形的,
在第三個時鐘周期讀了5k數據,注意每個時鐘周期只有5K,另外5K到了下一個時鐘周期了,所以我們不考慮,我們只考慮緩存模塊1的速率。再看一下時間,從第10ms讀完第一個5K,到第30ms讀完第2個5k,共用了20ms,讀了1M數據,所以速率為1M/20ms=50M/s。

下面再給大家講一個實例,具體代碼我會附在文章后面



用state來控制乒乓操作的來回切換



根據剛才講的,控制緩存器的讀寫,這里只列些部分代碼,具體代碼請大家在文章后面下載

下面附上仿真時序圖,我在testbench中將數據設為從0 遞增的,可以看到仿真波形中是將奇偶數分開的,證明我們代碼是正確的



二、串并轉換

串并轉換總的來說就是將串行輸入信號轉換為并行輸出,也是用面積換取速度的一種方法,串并轉換總的來說比較簡單,小墨就只給大家講一下我自己寫的代碼吧

首先要先對串入信號進行采集,加入我們是8位一輸出,每進來一位數據,我們便將原數據左移一位,保證數據是高位在前



然后再將數據并行輸出即可,下面附上仿真波形,我在testbench中給串入信號設為隨機數,看仿真圖的,第一串信號為1101_1011,一位一位的移進寄存器可以由波形的,分別是1,3,6……所以我們的代碼是正確的



三、流水線操作

      流水線操作是高速設計中的一種常用手段,如果摸個設計的處理流程分為若干個步驟,而且數據處理是單向流的,也就是沒有反饋或者迭代運算,前一個步驟是后一個步驟的輸出,我們就可以采用流水線設計的方法來提高設計速率。

      舉個例子,假如我們要計算A+B+C的值,如果不用流水線操作的話,那么需要先計算A+B的值,再計算A+B+C的值,需要兩個時鐘周期,如果我用了流水線操作那么我需要在兩個always塊中分別計算sum1= A+B,sum2= sum1+C,由于兩個always塊是并行的,輸出數據只需要等待一個時鐘周期,以后就可以有數據源源不斷的輸出,就像流水線一樣,從而提高系統速率

下面我們來設計一個實例,假如我要采集一系列的32位數據,要對它進行處理,處理方式假如是,先對這個數據進行加16運算,再進行壓縮為16位數據運算,再進行減10運算
,最后進行取低8位運算,采用流水線設計的話,輸出結果只需要等待幾個時鐘周期,以后就會有源源不斷地數據輸出,流程框圖如下,代碼請在后面下載



我在testbench中定義輸入信號是隨機的32位信號,分別進行分級處理,每處理完一級要給下一級發使能信號,并把數據送到下一級,例如當第一級使能信號到來時,數據為29,29加16為45,即第一級輸出信號,對45取前16位仍為45,45減10為35,35取低8位仍為35,對照波形,證明我們的設計是對的



四、跨時鐘域信號同步

先來看一張圖



        這個圖的意思就是,脈沖信號為一個時鐘信號,FPGA要對其進行計數,在CPU給FPGA發送讀信號的時候,將計數器的值送至CPU的數據總線, 這里就涉及三個時鐘信號,一個脈沖信號,一個CPU的讀信號,一個FPGA的自身時鐘,這三個時鐘是不同步的,我們這樣想,假如在脈沖計數的時鐘,cnt是自加1的,由于三個時鐘不同步,CPU的讀信號隨時都有可能來,加入當cnt自加的時候,也就是cnt = cnt +1,這是對cnt的寫狀態,突然來一個CPU的讀信號,即那么就要把cnt送到數據總線,即data < = cnt,這是一個讀狀態,試問,一個數據既要讀又要寫,那讀的是寫之前的數據呢還是寫之后的數據呢?這就是亞穩態,確切就是不確定的意思,所以,我們要將不同的時鐘盡心同步處理,即在一個時鐘的控制下進行脈沖計數和讀操作,這樣就不會發生亞穩態了,要知道,在一個大的系統中,亞穩態的危害是很大的



要解決同步問題,我們可以用FIFO,DPRAM 進行同步,即用其他時鐘域對fifo進行寫操作,再用FPGA對fifo進行讀操作,但要注意是否有數據溢出,還有一種方法就是邊沿脈沖檢測法,這里我們講第二種



即采用兩級寄存器,這兩級寄存器均有FPGA的時鐘控制,具體操作就是將不同域的信號都先賦值給第一級寄存器,再在另一個always塊中把第一級寄存器的值賦給第二級寄存器,如果是信號是高脈沖,那么就把第二級寄存器取反與第一級寄存器相與,便會得到一個高的脈沖采樣信號,用這個信號在檢測其他域信號的到來,如果是信號是低脈沖,那么就把第一級寄存器取反與第二級寄存器相與,同樣得到一個高的脈沖采樣信號,用這個信號在檢測其他域信號的到來,小墨同學把它記為“上2下1”原則,方便記憶~

具體代碼在前面鍵盤部分已經有所講解,這里就不副代碼了

寫了好幾個小時,手都敲酸了,還望各位大神多多指教,有什么講的不對的地方還請指出,一起進步~

以后小墨同學的文章將在北京至芯科技官方技術論壇更新,至芯科技的官方技術論壇也有很多的資料供大家下載,里面也有小墨的專題板塊,希望廣大網友和愛好者的大力支持~
http://www.fpgaw.com/
小墨同學《零基礎學FPGA》學習專版  一個大三學生學習之路的真實記錄
http://www.fpgaw.com/thread-78527-1-1.html
下面是至芯科技官方網站,夏宇聞教授和那里的老師都超好的~有意愿接受FPGA培訓的可以找工作人員咨詢
http://www.zxopen.com/
       以后小墨同學的教程會跟這款開發板配套,想跟小墨同學一起學習,一起進步的的可以考慮一下購買一塊開發板,畢竟學習要舍得投資嘛,下面是開發板淘寶鏈接
http://item.taobao.com/item.htm? ... &abbucket=13#detail


本文地址:http://www.qingdxww.cn/thread-144873-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • PIC18-Q71系列MCU概述
  • 無線充電基礎知識及應用培訓教程3
  • 無線充電基礎知識及應用培訓教程2
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲另类在线观看 | 成人羞羞视频在线观看免费 | 亚州视频在线 | 97免费| 欧美成人午夜 | 日日摸夜夜摸无需播放器 | 日韩成人免费在线视频 | 久久精品视频网站 | 午夜精品在线免费观看 | 国产成人99| 四虎国产精品永久在线看 | 不卡在线播放 | 亚洲一区二区精品视频 | 日本a级黄色 | 国产三级网站在线观看播放 | 亚洲精品v欧美精品动漫精品 | 亚州视频一区二区 | 亚洲天堂一区在线 | 日韩国产欧美在线观看 | 精品国产区一区二区三区在线观看 | 四虎影院在线免费播放 | 久久久久9| 91av手机在线| 青青国产线免观看手机版精品 | 99热热久久这里只有精品8 | 午夜羞羞视频在线观看 | 一级一级女人18毛片 | 在线视频一区二区日韩国产 | 丰满的年轻搜子在线观看 | 四虎影视884a精品国产古代 | 亚洲国产欧美国产第一区二区三区 | 日韩欧美一区二区不卡看片 | 三级毛片在线看 | 亚洲欧洲小视频 | 欧洲日韩视频二区在线 | 97视频在线观看免费播放 | 青青操视频在线免费观看 | 天天干天天操天天添 | 国产精品久久久久久 | 亚洲综合激情另类专区老铁性 | 亚洲成人综合在线 |