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