FPGA開發中Testben讀取外部檔案的方式

2021-08-28 17:04:58 字數 1986 閱讀 7916

為什麼需要使用verilog語言讀取/寫入檔案呢,主要是由於我們有時候需要將資料準備和分析的工作從testbench中隔離出來,便於協同工作,需要除錯一些暫存器的值,就需要通過文字中獲取資料,然後來除錯verilog程式;這些文字資訊可以通過c/c++、excel**、matlab等工具生成測試資料,在**測試的時候有助於你分析你的程式邏輯是否正確。

(1)開啟檔案

系統函式$fopen用於開啟乙個檔案,將檔案和integer指標關聯,語法如下:

integer file_point = $fopen(file_name);  這裡的 file_name 是乙個路徑,檔名儲存的路徑,用雙引號「」包括。

你可以使用相對路徑也可以使用絕對路徑,一般將檔案放在工程testbench檔案同一級的目錄下,你只需要在雙引號之中寫入檔名即可。

(2)關閉檔案

系統任務$fclose用於關閉乙個檔案,格式如下:

$fclose(file_point);

(3) 從檔案中讀取資料

從檔案中讀取資料有兩類方法,第一類為$fscanf系統任務,第二類為$readmemb 和 $readmemh,上述兩種任務都可以從文字檔案中讀取資料,並將資料載入到儲存器,被讀取的檔案可以包含空白空間、注釋、二進位制(如$readmemb)或十六進製制(如$readmemh)數字,每個數字用空白空間隔離

下面將一下兩種型別的語法

【$fscanf】

integer file, count;

count = $fscanf(file, format, args);

【$readmemb 】

readmemb( "檔名", 儲存器名, 起始位址,終止位址);

【$readmemh】

readmemh( "檔名", 儲存器名, 起始位址,終止位址);

readmemh_demo.v  檔案

`timescale 1ns/1ps

module readmemh_demo;

parameter data_period = 4; //每個資料佔據4個位元組

parameter data_num = 15; // 讀取資料的個數

parameter buf_size = 32; // 保證能存放字元的最大值,位寬

// read_buf

reg [buf_size-1:0] read_buf[0:data_num -1];

reg [buf_size-1:0] data;

// 讀取文字資訊,採用$readmemh,將文字資訊放到read_buf中

initial $readmemh("1.txt", read_buf);

// 顯示讀取的內容

integer i = 0;

initial begin

#(data_period);

$display("content of read_buf after reading data file:");

for(i = 0; i建立modelsim工程

編譯-》執行**-》run all

結果如下:

這時候的文字內容為:

波形圖: 

FPGA開發之FPGA開發流程簡介

我以前一直很疑惑晶元設計這一塊在實際中是怎麼做的呢?今天了解了一下,現在設計晶元一般採用fpga開發,大概流程如下 1 功能定義 器件選型 設計晶元之前當然你要知道你設計的晶元有什麼功能,然後就模組化,寫清楚誰誰誰幹什麼,這當然就是從上至下的方法,你試試從下到上給我看看。2 設計輸入 這一步就是說我...

FPGA開發流程

fpga的設計流程就是利用eda開發軟體和程式設計工具對fpga晶元進行開發的過程。fpga的開發流程一般如圖1 6所示,包括電路設計 設計輸入 功 能 綜合優化 綜合後 實現 佈線後 板級 以及晶元程式設計與除錯等主要步驟。圖1 6 fpga開發的一般流程 1 電路功能設計 在系統設計之前,首先要...

FPGA開發流程概述

lesson 3 fpga開發流程概述 開始學習fpga,想盡快上手fpga開發,那麼先來了解一下fpga的開發流程。1 需求分析到模組劃分 設計輸入 原理圖 verilog vhdl 綜合 指的是將較高層次的電路描述轉化成較為低層的電路描述。就是將設計 轉成底層的與門 非門 ram 觸發器等基本邏...