Vivado使用技巧(9):COE檔案使用方法
COE檔案
在某些IP核的配置中,需要使用COE(Coefficient)檔案來傳遞引數,正如《FPGA數字訊號處理系列》中我多次使用MATLAB自動生成FIR濾波器所需的濾波係數檔案。
COE檔案是一種ASCII文字檔案,檔案頭部定義資料基數(Radix),可以時2、10或16。資料以向量的形式給出,每個向量以分號結尾。Vivado會解析COE檔案格式,並在生成IP核時匯出相關的MIF格式檔案,用於行為級模擬。
最好將COE檔案放在與使用此檔案的IP核同目錄下(即與XCI檔案同目錄),這樣在使用Core Cotainer打包IP核時也會將COE檔案打包到XCIX檔案中。當替換COE檔案時,必須要刪掉舊的COE檔案,否則也會傳遞到工程的綜合過程中;需要注意,如果只是在磁碟上刪掉了檔案,而不是在工程中移除,會導致報告一個error。
COE檔案語法
COE檔案的通用語法格式如下:
Keyword =Value ; 註釋
<Radix_Keyword> =Value ; 註釋
<Data_Keyword> =Data_Value1, Data_Value2, Data_Value3;
COE語法不區分關鍵詞的大小寫;分號後為註釋。下面是與定義資料值的基數相關的關鍵詞:
- RADIX:用於非儲存型別IP核的基數定義(比如FIR濾波器);
- MEMORY_INITIALIZATION_RADIX:定義儲存器初始化值的基數。
下面是與資料值相關的關鍵詞:
- COEFDATA:定義濾波器的係數;
- MEMORY_INITIALIZATION_VECTOR:定義塊儲存器與分散式儲存器的資料;
- PATTERN:用於位相關器(Bit Correlator)COE檔案;
- BRANCH_LENGTH_VECTOR:用於Interleaver COE檔案。
COE檔案最後定義的關鍵詞必須是COEFDATA或MEMORY_INITIALIZATION_VECTOR,之後的關鍵詞定義都會被忽略。下面給出幾個COE檔案的示例。
1.Block Memory COE File
; This .COE file specifies the contents for a block memory of depth=16, and width=4.
memory_initialization_radix=2;
memory_initialization_vector=
1111,
1111,
1111,
1111,
1111,
0000,
0101,
0011,
0000,
1111,
1111,
1111,
1111,
1111,
1111,
1111;
2.FIR COE File
; Example of a Distributed Arithmetic (DA) FIR Filter .COE file
; with hex coefficients, 8 symmetrical taps, and 12-bit coefficients.
Radix = 16;
CoefData= 346, EDA, 0D6, F91, F91, 0D6, EDA, 346;
生成的MIF檔案
COE檔案提供了一種設定記憶體初始化值的高層次方法,但實際上並不能直接使用。當生成IP核時,Vivado會將COE檔案轉換為MIF檔案。MIF檔案儲存了原始值,用於儲存類IP核的初始化和模擬模型。
MIF檔案中每一行代表一個儲存位置,如第一行代表地址0,第二行代表地址1……每一行必須是初始化值(高位在前),與之相關的記憶體地址為二進位制格式(注意可能與一些軟體生成的MIF格式不同)。在HDL模擬時,MIF檔案必須模擬模擬目錄下。使用Vivado Simulator模擬時Vivado會自動完成相關操作。