FPGA中的二維數(shù)組其實(shí)不是真正意義上的數(shù)組,而是由多個(gè)寄存器組成的ROM或RAM。
具體來(lái)說(shuō),就是可以將內(nèi)存宣稱為一個(gè)reg類型的數(shù)組,這個(gè)數(shù)組中的任何一個(gè)單元都可以通過(guò)一個(gè)下標(biāo)去訪問(wèn)。
這樣的數(shù)組定義方式如下:
reg [wordsize : 0] memory_name [0 : memorysize];
其中[wordsize : 0]是內(nèi)存的寬度,而 [0 : memorysize]則是內(nèi)存的深度(也就是有多少存儲(chǔ)單元)。
如果要存儲(chǔ)一個(gè)值到某個(gè)單元中去,可以這樣做:
memory_name [address] = data_in;
如果要讀取每個(gè)單元的值,可以這么做:
data_out = memory_name [address];
由于Verilog不允許讀/寫一個(gè)位,所以需要讀寫一位或者多個(gè)位時(shí)的操作要麻煩點(diǎn):
data_out = memory_name [address];
data_out_0 = data_out [0];
這里首先從一個(gè)單元讀出數(shù)據(jù),然后再取出數(shù)據(jù)的某一位的值。
初始化內(nèi)存
初始化內(nèi)存有多種方式,這里介紹的是使用$readmemb和$readmemh系統(tǒng)任務(wù)來(lái)講保存在文件中得數(shù)據(jù)填充到內(nèi)存單元中去。
$readmemb和$readmemh是類似得,只不過(guò)$readmemb用于內(nèi)存得二進(jìn)制表示,
$readmemh用于內(nèi)存內(nèi)容得十六進(jìn)制表示。這里以$readmemh系統(tǒng)任務(wù)來(lái)介紹
注意的是:file_name是包含數(shù)據(jù)的文本文件名,mem_array是要初始化的內(nèi)存單元數(shù)組名,
start_addr 和 stop_addr是可選的,指示要初始化單元的起始地址和結(jié)束地址。
如果對(duì)寄存器組進(jìn)行在復(fù)位得時(shí)候進(jìn)行置0,可以參考如何往寄存器組中寫入數(shù)據(jù)
溫馨提示:明德?lián)P2023推出了全新課程——邏輯設(shè)計(jì)基本功修煉課,降低學(xué)習(xí)FPGA門檻的同時(shí),增加了學(xué)習(xí)的趣味性,并組織了考試贏積分活動(dòng)
http://www.cqqtmy.cn/ffkc/415.html
(點(diǎn)擊→了解課程詳情?)感興趣請(qǐng)聯(lián)系易老師:13112063618(微信同步)
明德?lián)P除了培訓(xùn)學(xué)習(xí)還有項(xiàng)目承接業(yè)務(wù),擅長(zhǎng)的項(xiàng)目主要包括的方向有以下幾個(gè)方面:
1. MIPI視頻拼接
2. SLVS-EC轉(zhuǎn)MIPI接口(IMX472 IMX492)
3. PCIE采集系統(tǒng)
4. 圖像項(xiàng)目
5. 高速多通道ADDA系統(tǒng)
6. 基于FPGA板卡研發(fā)
7. 多通道高靈敏電荷放大器
8. 射頻前端
需要了解相關(guān)信息可以聯(lián)系:易老師13112063618(微信同號(hào))