Vivado中BRAM IP核是經(jīng)常會用到的,而一種比較簡便的給RAM賦初值的方式就是通過一個coe文件進行加載,那么如何用matlab來產(chǎn)生這樣一個可直接使用的coe文件呢?
COE文件的通用格式
首先我們來了解下COE文件的通用格式:
COE文件是一種ASCII文本文件,文件頭部定義數(shù)據(jù)基數(shù)(Radix),可以是2,10或16。數(shù)據(jù)則以向量的形式給出,每個向量以分號結(jié)尾。Vivado會解析COE文件格式,并在生成IP核時導(dǎo)出相關(guān)的MIF格式文件,用于行為級仿真。
COE文件的通用語法格式如下:
Keyword =Value ; 注釋《Radix_Keyword》 =Value ; 注釋《Data_Keyword》 =Data_Value1, Data_Value2, Data_Value3;
COE語法不區(qū)分關(guān)鍵詞的大小寫;分號后為注釋。
與定義數(shù)據(jù)值的基數(shù)相關(guān)的關(guān)鍵詞:
Radix:用于非存儲類型IP核的基數(shù)定義;Memory_Initialization_Radix:定義存儲器初始化值的基數(shù)。
與數(shù)據(jù)值相關(guān)的關(guān)鍵詞:
CoefData:定義濾波器的系數(shù);Memory_Initialization_Vector:定義塊存儲器與分布式存儲器的數(shù)據(jù);Pattern:用于位相關(guān)器(Bit Correlator)COE文件;Branch_Length_Vector:用于Interleaver COE文件。
COE文件最后定義的關(guān)鍵詞必須是Coefdata或Memory_Initialization_Vector,之后的關(guān)鍵詞定義都會被忽略。
Block Memory COE
Memory_Initialization_Radix=10;Memory_Initialization_Vector=Data_Value1, Data_Value2, Data_Value3;
Matlab產(chǎn)生coe文件的代碼:
fid = fopen(‘Coe_File.coe’,‘w+’); fprintf(fid,‘Memory_Initialization_Radix = 10; ’); fprintf(fid,‘Memory_Initialization_Vector = ’); fprintf(fid,‘%g, ’,Data_Value(1:end-1)); fprintf(fid,‘%g; ’,Data_Value(end)); fclose(fid);
生成的MIF文件
COE文件提供了一種設(shè)置內(nèi)存初始化值的高層次方法,但實際上并不能直接使用。當生成IP核時,Vivado會將COE文件轉(zhuǎn)換為MIF文件。MIF文件保存了原始值,用于存儲類IP核的初始化和仿真模型。
MIF文件中每一行代表一個存儲位置,如第一行代表地址0,第二行代表地址1……每一行必須是初始化值(高位在前),與之相關(guān)的內(nèi)存地址為二進制格式。在HDL仿真時,MIF文件必須仿真仿真目錄下。使用Vivado Simulator仿真時Vivado會自動完成相關(guān)操作。
最好將COE文件放在與使用此文件的IP核同目錄下(即與XCI文件同目錄),這樣在使用Core Cotainer打包IP核時也會將COE文件打包到XCIX文件中。當替換COE文件時,必須要刪掉舊的COE文件,否則也會傳遞到工程的綜合過程中;需要注意,如果只是在磁盤上刪掉了文件,而不是在工程中移除,會導(dǎo)致報告一個error。
編輯:jq
-
濾波器
+關(guān)注
關(guān)注
161文章
7796瀏覽量
177996 -
RAM
+關(guān)注
關(guān)注
8文章
1368瀏覽量
114647 -
IP
+關(guān)注
關(guān)注
5文章
1703瀏覽量
149508 -
代碼
+關(guān)注
關(guān)注
30文章
4779瀏覽量
68527
原文標題:vivado | 如何生成BRAM初始值的coe文件?
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論