(原創) 如何讀取/寫入文字檔? (IC Design) (Verilog)
Abstract
Verilog雖然為硬體描述語言,亦提供讀取/寫入文字檔的功能。
Introduction
為什麼需要用Verilog讀取/寫入文字檔呢?主要用在寫Testbench,並且有兩個優點:
1.資料處理的個數不需寫死在Testbench內。
2.文字檔可以用其他更強大的語言產生,如C/C++、Python。
3.將資料輸出到文字檔後,可用其他語言分析,如C/C++、Python、Excel。
Verilog
1?/*?2?(C) OOMusou 2008 http://oomusou.cnblogs.com
3?
4?Filename??? : FileIO_tb.v
5?Compiler??? : ModelSim SE 6.1f
6?Description : Demo how to access text file
7?Release???? : 02/11/2008 1.0
8?*/
9?
10?`timescale 1 ns/1 ns
11?
12?module FileIO_tb;
13?
14?integer fp_r, fp_w, cnt;
15?reg [7:0] reg1, reg2, reg3;
16?
17?initial begin
18?? fp_r = $fopen("data_in.txt", "r");
19?? fp_w = $fopen("data_out.txt", "w");
20??
21?? while(!$feof(fp_r)) begin
22???? cnt = $fscanf(fp_r, "%d %d %d", reg1, reg2, reg3);
23???? $display("%d %d %d", reg1, reg2, reg3);
24???? $fwrite(fp_w, "%d %d %d\n", reg3, reg2, reg1);
25?? end
26??
27?? $fclose(fp_r);
28?? $fclose(fp_w);
29?end
30?
31?endmodule
Command Window
data_in.txt
1?2?34?5?6
data_out.txt
? 6?? 5?? 4
18行
fp_w = $fopen("data_out.txt", "w");
$fopen()類似C語言的fopen(),連參數都一樣,主要用來開啟檔案,並取得file handle。
21行
while(!$feof(fp_r)) beginend
使用while迴圈,若不是最後一行,則一直讀取,類似c語言的while(!foef(fp_r)) {}。
22行
cnt = $fscanf(fp_r, "%d %d %d", reg1, reg2, reg3);
$fscanf()類似C語言的fscanf(),連參數都一樣,可將資料從文字檔讀入變數;與C語言不同的是,$fscanf()傳回讀入的變數個數,一定得用一個變數去接,但C語言的fscanf()則可忽略。
23行
$display()類似C語言的printf(),可將變數顯示在commanr window,並且自動換行。
24行
$fwrite()類似C語言的fprintf(),可將變數寫入文字檔。
27行
$fclose(fp_w);
$fclose()類似C語言的fclose(),可關閉檔案。
所對應的C語言
?2?(C)?OOMusou?2008?http://oomusou.cnblogs.com
?3?
?4?Filename????:?FileIO.c
?5?Compiler????:?Visual?C++?8.0
?6?Description?:?Demo?how?to?access?text?file
?7?Release?????:?02/11/2008?1.0
?8?*/
?9?
10?#include?<stdio.h>
11?
12?int?main()?{
13???FILE?*fp_r?=?fopen("data_in.txt",?"r");
14???FILE?*fp_w?=?fopen("data_out.txt",?"w");
15???
16???int?reg1,?reg2,?reg3;
17???while(!feof(fp_r))?{
18?????fscanf(fp_r,?"%d?%d?%d",?®1,?®2,?®3);
19?????printf("%d?%d?%d\n",?reg1,?reg2,?reg3);
20?????fprintf(fp_w,?"%d?%d?%d\n",?reg3,?reg2,?reg1);
21???}
22???
23???fclose(fp_r);
24???fclose(fp_w);
25?}
Conclusion
在COM、.NET之前,不同語言之間要合作,唯一的管道就是文字檔。Verilog是硬體語言,若要和軟體語言合作,又得使用文字檔這種古老的方法了。
Verilog是一個C-Like的語言,連system function也特意地跟C語言靠攏,本例又再度得到證明,Verilog程式碼幾乎與C語言一行一行的對應。若你原本熟悉軟體的C語言,又想切入硬體描述語言,Verilog會讓你備感親切。
See Also
(原創) 如何讀取/寫入文字檔? (C) 
總結
以上是生活随笔為你收集整理的(原創) 如何讀取/寫入文字檔? (IC Design) (Verilog)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 迷宫求解无敌版(递归调用法)
 - 下一篇: GNU ARM汇编伪操作(Directi