iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 24
0
自我挑戰組

Verilog 從放棄到有趣系列 第 24

[Day24]用verilog實作矩陣相乘

  • 分享至 

  • xImage
  •  

今天開始幾天來講幾個應用電路的小範例,讓大家練習一下前幾天學習的成果,首先今天來做一個33的矩陣乘法,矩陣運算在圖形運算中是非常重要的環節,像是GPU等等,所以一個簡單的矩陣相乘也有不同的做法,雖然結果一樣,但使用的資源及速度就會有差,先來看一般大家的做法.

https://ithelp.ithome.com.tw/upload/images/20180104/20107543q7Y33nKBfo.png

所以我們再算矩陣乘法時,
c1 = (a1b1) + (a2b4) + (a3b7)
c2 = (a1
b2) + (a2b5) + (a3b8)
.
.
.
.
之前常說,在寫verilog時心中要有張電路圖,這邊來看的話,我們一個單位時間能算一個輸出,就像c1 = (a1b1) + (a2b4) + (a3b7),所以我們需要九個單位時間算完一個33矩陣,然後花了三個n-bit乘法器以及兩個n-bit加法器.

https://ithelp.ithome.com.tw/upload/images/20180104/20107543SJjLonk3MY.png

但假設說在資源有限的情況下,要怎麼實作這個33的矩陣乘法呢,我們可以只用一個加法器跟一個乘法器來實作,比較好的寫法還是利用FSM來控制,再算一個row乘以一個colum時,我們拆成三個cycle來運算,
c1 = (a1
b1) + (a2b4) + (a3b7),每相乘一次就做累加,相乘三次並做完累加後就完成一個值的運算,如下:

https://ithelp.ithome.com.tw/upload/images/20180104/20107543NnCeyGc4JW.png

https://ithelp.ithome.com.tw/upload/images/20180104/20107543nXYMfr5bLx.png

當然你也可以使用更多的資源更快的算完,就把全部的乘法加法攤開就能在一個cycle算完,所以在做電路前不仿先考慮一下,要做一個快速的電路,還是資源小的電路,或著是折衷中的做法,畢竟魚與熊掌不能兼得,所以開始寫verilog之前先好好思考做法吧.


上一篇
[Day23] generate
下一篇
[Day25]淺談FPGA design flow
系列文
Verilog 從放棄到有趣30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言