溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

$readmemb和$readmemh

發(fā)布時間:2020-08-02 21:51:31 來源:網(wǎng)絡(luò) 閱讀:67272 作者:lihaichuan 欄目:開發(fā)技術(shù)

verilog HDL程序中的兩個系統(tǒng)任務(wù),$readmemb和$readmemh,從文件中讀取數(shù)據(jù)到存儲器。其格式如下:

(1)$readmemb("<數(shù)據(jù)文件名>",<存儲器名>);

(2)$readmemb("<數(shù)據(jù)文件名>",<存儲器名>,<起始地址>);

(3)$readmemb("<數(shù)據(jù)文件名>",<存儲器名>,<起始地址>,<終止地址>);

 

(1)$readmemh("<數(shù)據(jù)文件名>",<存儲器名>);

(2)$readmemh("<數(shù)據(jù)文件名>",<存儲器名>,<起始地址>);

(3)$readmemh("<數(shù)據(jù)文件名>",<存儲器名>,<起始地址>,<終止地址>);

被讀取的文件中只能包含:空白位置(空格、換行、制表格(tab)),注釋行(//形式的和/*...*/形式的都可以)、二進制和二六進制數(shù)據(jù)。

被讀取的文件中不能包含位寬書名和格式說明,對于$readmemb系統(tǒng)任務(wù),每個數(shù)必須是二進制,對于$readmemh系統(tǒng)任務(wù),每個數(shù)必須是十六進制。數(shù)字中可以有不定值x或X和高阻值z或Z,還可以有下畫線(_)。另外,數(shù)字必須用空白位置或注釋行來分隔。

任務(wù)會從指定的地址依次將讀取到的數(shù)據(jù)存入寄存器(或寄存器數(shù)組),但當(dāng)?shù)刂烦霈F(xiàn)在數(shù)據(jù)文件中時,其格式是字符“@”后跟上十六進制數(shù)據(jù),如:@hhhh。當(dāng)讀取中遇到地址說明符,會將地址后的數(shù)據(jù)存放到相應(yīng)的地址中。

如:文件init.dat內(nèi)容如下:

@002

11111111 01010101

00000000 10101010

@006

1111zzzz 00001111

verilog程序如下:

reg [7:0] meme[0:7];

$readmemb("init.data",meme);

則寄存器中的內(nèi)容如下:

meme[0]=xxxxxxxx;

meme[1]=xxxxxxxx;

meme[2]=11111111;

meme[3]=01010101;

meme[4]=00000000;

meme[5]=10101010;

meme[6]=1111zzzz;

meme[7]=00001111;

如果程序如下:

reg [15:0] meme[0:7]; //一個地址存儲16bit數(shù)據(jù)

$readmemb("init.data",meme);

則結(jié)果如下:

meme[0]=xxxxxxxxxxxxxxxx;

meme[1]=xxxxxxxxxxxxxxxx;

meme[2]=11111111_01010101;

meme[3]=00000000_10101010;

meme[4]=xxxxxxxxxxxxxxxx;

meme[5]=xxxxxxxxxxxxxxxx;

meme[6]=1111zzzz_00001111;

meme[7]=xxxxxxxxxxxxxxxx;

則依次從文件中讀取16bit的數(shù)據(jù)存儲到寄存器的一個地址中。

補充說明:

(1)系統(tǒng)任務(wù)聲明語句中和數(shù)據(jù)文件中都沒有地址說明,則默認(rèn)的存放地址為存儲器定義語句中的起始地址,數(shù)據(jù)文件里的數(shù)據(jù)被連續(xù)存存放到該存儲器中,直到存儲單元存滿為止或者數(shù)據(jù)文件里的數(shù)據(jù)存完。

(2)如果系統(tǒng)任務(wù)中說明了存放的起始地址,沒有說明存放的結(jié)束地址,則數(shù)據(jù)從起始地址開始存放。

(3)如果數(shù)據(jù)文件里的數(shù)據(jù)個數(shù)和系統(tǒng)任務(wù)中起始地址和結(jié)束地址的數(shù)據(jù)個數(shù)不同的話,會提示出錯信息。

(4)reg [7:0] meme[0:7] //地址為0-7 存儲器定義的起始地址和結(jié)束地址

         $readmemb("init.dat",meme,3,6) // 系統(tǒng)任務(wù)中定義的起始地址和結(jié)束地址

        @006                          //數(shù)據(jù)文件中的地址

        其中數(shù)據(jù)文件中地址必須在系統(tǒng)任務(wù)中定義的范圍內(nèi),系統(tǒng)任務(wù)中定義的地址必須在存儲器定義的地址范圍內(nèi)。優(yōu)先考慮數(shù)據(jù)文件中的地址>系統(tǒng)任務(wù)中定義的起始地址和結(jié)束地址>存儲器定義的起始地址和結(jié)束地址.

    

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI