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

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 */

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 3
4 5 6

data_out.txt

  3   2   1
  6   5   4

18行

fp_r = $fopen("data_in.txt", "r");
fp_w = $fopen("data_out.txt", "w");

$fopen()類似C語言的fopen(),連參數都一樣,主要用來開啟檔案,並取得file handle。

21行

while(!$feof(fp_r)) begin
end

使用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("%d %d %d", reg1, reg2, reg3);

$display()類似C語言的printf(),可將變數顯示在commanr window,並且自動換行。

24行

$fwrite(fp_w, "%d %d %d\n", reg3, reg2, reg1);

$fwrite()類似C語言的fprintf(),可將變數寫入文字檔。

27行

$fclose(fp_r);
$fclose(fp_w);

$fclose()類似C語言的fclose(),可關閉檔案。


所對應的C語言

 1 /* 
 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", &reg1, &reg2, &reg3);
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)相关推荐

  1. (原創) ThinkPad X61安裝過程全紀錄 (NB) (ThinkPad) (X61)

    Abstract 我的ThinkPad X61安裝過程詳細紀錄. Introduction Step 1: ThinkPad X61基本硬體 (原創) 如何自行在ThinkPad X61安裝Windo ...

  2. (原創) Verilog入門書推薦2:數位系統實習 Quartus II (SOC) (Verilog)

    Abstract 之前曾經推薦過一本Verilog的薄書,這次再推薦一本適合FPGA與Quartus II的Verilog入門書籍. Intrduction 作者:陸自強 出版社:儒林圖書公司 語言: ...

  3. linux pipe 阻塞,Linux pipe():從管道中讀取數據並不總是能夠解阻塞寫入器

    I have a problem using pipe under Linux. I would like to fill a pipe to make further write's call bl ...

  4. (原創) 如何將CMOS所擷取的影像傳到PC端? (SOC) (DE2) (TRDB-DC2)

    AbstractDE2提供了Control Panel與Image Converter,可以將CMOS所擷取的影像傳到PC端, Introduction 版權聲明:文中所有範例皆出自DE2光碟,版權歸 ...

  5. 【WIN10】程序內文件讀取與保存

    DEMO下載:http://yunpan.cn/cFHIZNmAy4ZtH  访问密码 cf79 1.讀取與保存文件 Assets一般被認為是保存用戶文件數據的地方.同時,微軟還支持用戶自己創建文件夾 ...

  6. (原創) 如何自行在ThinkPad X61安裝Windows XP Professional SP3? (NB) (ThinkPad) (X61) (OS) (Windows)...

    Abstract 新一代的ThinkPad X61都已經安裝了Windows Vista,或許你因為各種理由想自己重新安裝Windows XP,並且升上SP3,本文是我的安裝心得. Introduct ...

  7. (原創) Quartus II安裝新觀念:如何將Quartus II安裝在VirtualBox內? (SOC) (Quartus II) (VirtualBox)...

    Abstract VM並不是什麼新的觀念,透過VM我們可以在一個OS去執行其他OS,若我們將Quartus II也裝在VM中,將可解決一些長久以來Quartus II使用上所遇到的問題. Introd ...

  8. (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows)...

    Abstract 由於記憶體便宜,不少人購買新NB時,基於一次到位原則,一次將X61的記憶體加到4GB攻頂,雖然X61的硬體抓的到4GB,但卻沒保證軟體的作業系統可以抓到4GB,只要是32位元的Win ...

  9. (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows)

    原文地址为: (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows) Abstract 由於記憶體便 ...

最新文章

  1. 四连通,和八连通的详解(MATLAB)
  2. Outlook启动提示“找不到文件Outlook.pst文件”
  3. 堆排序最坏时间复杂度
  4. redis 启动时 Warning 警告解决及说明
  5. Java高级语法笔记-异常中finally的使用
  6. mysql innoback_innobackex工具备份mysql数据
  7. vs2005 pro 在浏览器查看下的一个问题!
  8. 服务器编译linux内核时间,Firefly-RK3399 Linux内核编译
  9. Leetcode题目:Reverse String
  10. 之间有什么区别。 (点)和$(美元符号)?
  11. pycharm怎么修改python路径
  12. BeanShell用法汇总
  13. 破解APK并修改APK的包名
  14. 神奇的CSS用法之border-radius
  15. 从5亿红包到千亿营收,看百度的增长曲线
  16. 偶数科技为辽宁农信数字化进程添加新动能
  17. C++函数默认参数(函数传入实参个数比形参个数少)
  18. 智牛股_第5章_Netty+PowerDesigner
  19. CT扫描的肝部三维重建
  20. 实战:怎样规避淘宝店铺运营的几大误区

热门文章

  1. python爬取基金历史净值_Python爬取天天基金网历史净值数据
  2. 面试中常问的HTTP/1.0状态码
  3. echarts 地图实现轮播(一)
  4. frame框架点击链接或者按钮跳转整个页面以及别的frame框架
  5. Maven 中央仓库地址
  6. VR: AR和VR演进哲学
  7. unity发布成手机app怎么不能被顶_Unity中Android API 28之后无法HTTP请求
  8. nginx 去掉服务器版本和名称和nginx_status 状态说明
  9. Memcached相关内容总结
  10. 终端报错xcrun: error: unable to find utility “xcodebuild”, not a developer tool or