當前位置:
首頁 > 知識 > FPGA計算3行同列數據之和

FPGA計算3行同列數據之和

實驗要求:PC機通過串口發送3行數據(一行有56個數據,3行共有56*3=168個數據)給FPGA,FPGA計算3行同一列數據的和,並將結果通過串口返回給上位機。

實現方法:使用兩個FIFO IP Core,將串口接收到的數據進行緩存,當第一個FIFO1的數據存滿後,將FIFO1的數據讀出來給FIFO2,當FIFO2的數據存滿時,當前兩個FIFO的數據和串口正在接收的數據就可以看做為三行數據了。我們將3行數據同時讀出,進行求和,然後用串口發送到上位機,這裡要注意的是三個數據必須對齊,要不然是最終結果是不正確的。我這裡為了驗證方便,只生成了一行16個數據。

FPGA計算3行同列數據之和

FPGA計算3行同列數據之和

本設計是為了基於FPGA的Sobel邊緣檢測做基礎,使用2/3個FIFO將圖片數據緩存成3x3矩陣,不過偶然發現Xilinx也有shift_ram IP Core,這個IP簡直是為生成3x3矩陣而生的,不過為了學習FIFO的使用,還是在這裡用FIFO實現,我這裡使用的是Xilinx的Vivado開發套件調用FIFO IP Core流程如下:

FPGA計算3行同列數據之和

點擊如圖所示圖標

FPGA計算3行同列數據之和

按上圖所示配置即可,這裡的full信號是當FIFO寫滿後full會為1,否則為0,empty是當FIFO為空時FIFO為1,否則為0。

FPGA計算3行同列數據之和

FPGA計算3行同列數據之和

這裡設置讀寫位寬和深度,添加複位信號,注意Xilinx的FIFO是高電平複位,設置複位類型為非同步複位。剩下的按如圖設置即可。其他均保持默認,點擊OK。

FPGA計算3行同列數據之和

點擊generate生成IP Core。

生成好兩個FIFO之後,按照系統流圖,還需要添加串口接收和發送模塊,這裡我們可以把以前做過的串口代碼直接拿過來用,代碼都是可以移植的只需要稍微修改埠頂層例化即可。按照系統框圖把頂層例化好之後,接下來就是模擬了,真是慚愧我到現在才學會了串口的模擬技巧,其實是自己悟到的,如下圖,我這裡的串口接收是以發送波特率的16倍進行接收的,在模擬時,波特率9600還是很慢,所以,我直接將接收波特率這裡設置成50Mhz的兩個時鐘周期,那麼發送也就是32個50Mhz的時鐘周期,這裡是50Mhz的原因是因為但是寫串口接收發送這塊的時候,使用的板子的系統時鐘是50Mhz,這裡移植的時候也要注意,最好使用PLL將系統時鐘分頻成50Mhz再給接收發送這兩個模塊。

1 //串口接收模塊波特率查找表
2 always @(posedge mclk or negedge rst_n) begin
3 if(!rst_n)
4 bps_DR <= 0;
5 else begin
6 case(baud_set)
7 0: bps_DR <= 324;//bps_9600x16
8 //0: bps_DR <= 1;//bps_9600x16 just test
9 1: bps_DR <= 162;//bps_19200x16
10 2: bps_DR <= 80;//bps_38400x16
11 3: bps_DR <= 53;//bps_57600x16
12 4: bps_DR <= 26;//bps_115200x16
13 default: bps_DR <= 324;//bps_9600x16
14 endcase
15 end
16 end
17 //串口發送模塊波特率查找表DR_LUT
18 always @(posedge mclk or negedge rst_n)begin
19 if(!rst_n)
20 bps_DR <= 16"b0;
21 else begin
22 case(baud_set)
23 0: bps_DR <= 5207;//bps_9600
24 //0: bps_DR <= 31;//bps_9600 just test
25 1: bps_DR <= 2603;//bps_19200
26 2: bps_DR <= 1302;//bps_38400
27 3: bps_DR <= 867;//bps_57600
28 4: bps_DR <= 433;//bps_115200
29 default: bps_DR <= 5207;//bps_9600
30 endcase
31 end
32 end

那麼參數調整小了,模擬這塊這麼寫呢?在test_bench文件中,我直接調用上面的工程頂層和串口發送模塊,只需要將發送模塊的數據給頂層模塊,這樣就方便了查看接收模塊是否正確,

1 uart_fifo_tx uut_uart_fifo_tx(
2 .clk (clk),//125Mhz
3 .rst_n (rst_n),
4 .rs232_rx (rs232_rx),
5 .rs232_tx (rs232_tx)
6 );
7
8 always #4 clk = ~clk;
9
10 always #10 mclk = ~mclk;
11
12 UART_Byte_Tx uut_UART_Byte_Tx(
13 .mclk (mclk),
14 .rst_n (rst_n),
15 .send_en (send_en),//時鐘分頻使能
16 .baud_set (4"b0),//選擇波特率
17 .data_byte (data_byte),//需要發送的信號
18 .uart_state ,//串口狀態
19 .tx_done ,//標誌串口結束信號
20 .rs232_tx (rs232_rx)//串口信號輸出
21 );

然後是寫激勵,在工程代碼中我們盡量少用for循環,但是在測試文件中便可以使用for循環來減少激勵的書寫量,提高模擬效率,這裡的#7040是我在上面模擬的時候計算出來的,為什麼是延時7040呢?這是因為上面串口發送模塊波特率設置的是32個50Mhz時鐘周期,那麼它就是每隔7040ns會發送一次,同樣的接收模塊也是每隔7040ns接收一次,所以我這裡每隔7040ns給一次數據,就可以實現模擬上連續發送了。

1 integer i;
2
3 initial begin
4 clk = 0;
5 mclk = 0;
6 rst_n = 0;
7 send_en = 0;
8 data_byte = 0;
9 #100; rst_n = 1"b1;
10 send_en = 1;
11 for(i = 1; i <= 100; i = i + 1)begin
12 #7040 data_byte = i;
13 end
14 end

測試文件寫好之後,便是最令人抓狂的調試過程了,不過只要你掌握了模擬的調試技巧,所有問題都會迎刃而解的,我學習了FPGA一年了,才終於學會了模擬技巧能力,下面是我模擬這個實驗的波形圖,上面設置了很多不同顏色,增加了模擬效率,modelsim雖然好用,但是用vivado級聯modelsim還是很慢的,所以還不如直接用vivado自帶的模擬工具isim,只要掌握了使用isim的模擬技巧,再大的工程模擬起來也不怕!關於isim的使用技巧可以參考我的另一篇博客:Isim你不得不知道的技巧(整理)。這雖然是ISE那個版本的isim但是使用起來還是一樣的!

FPGA計算3行同列數據之和

這可能是我做過最漂亮的模擬了!

FPGA計算3行同列數據之和

最後下載板子進行功能驗證,發送3組00-0f的數據,最後由串口返回上位機的數據查看,三行數據一列求和的結果是完全正確的。至此實驗結束,下面要進入基於FPGA的Sobel邊緣檢測實驗了。

個人微信訂閱號:NingHeChuan

如果你想及時收到個人撰寫的博文推送,可以掃描左邊二維碼(或者長按識別二維碼)關注個人微信訂閱號

知乎ID:NingHeChuan

微博ID:NingHeChuan

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

封裝自己的Ajax框架
ctf中常見注入題源碼及腳本分析
vue組件的那些事($children,$refs,$parent)的使用
二叉樹常見面試題

TAG:科技優家 |

您可能感興趣

FPGA定點小數計算(四)
AMD推出首款7nm製程GPU,應用於AI、雲計算等領域
16塊Tesla V100計算卡合體!NVIDIA造頂級計算平台
關於GPGPU計算的11個「傳說」
從CPU、GPU到HPC,Xe架構為計算帶來指數級加速
三星開始量產12Gb LPDDR5內存,為未來的5G以及AI計算鋪路
多接入邊緣計算MEC:5G、IoT應用落地的關鍵丨CCF-GAIR 2019
NVIDIA 發布了世界上「最大」的 GPU,與一款「小型」計算機
OSPF SPF計算的退避演算法
布局AI計算新生態,浪潮在AICC 2018上發布三大AI成果
L『OCCITANE前三財季按固定匯率計算銷售凈額增3%至10億歐元
遇見 PowerVR Series9XE和9XM系列GPU——提高圖形和計算的標準
CGDC上海:AMD工程師現場介紹GPU加速與非同步計算
藍寶石展示了採用AMD EPYC 3000的10路GPU計算系統
AIS機械取栓患者術前平掃CT-計算機輔助ASPECTS評分
計算機硬體之NVIDIA顯核
JAXnet:一行代碼定義計算圖,兼容三大主流框架,可GPU加速
曙光先進計算「新引擎」亮相ISC18 專註HPC價值
IDC:AI風口,GPU加速計算市場起飛
CES 2019:IBM展示Q System One量子計算機 向商用化邁進一步