(原創) 如何讀取/寫入文字檔? (IC Design) (Verilog)
Abstract
Verilog雖然為硬體描述語言,亦提供讀取/寫入文字檔的功能。
Introduction
為什麼需要用Verilog讀取/寫入文字檔呢?主要用在寫Testbench,並且有兩個優點:
1.資料處理的個數不需寫死在Testbench內。
2.文字檔可以用其他更強大的語言產生,如C/C++、Python。
3.將資料輸出到文字檔後,可用其他語言分析,如C/C++、Python、Excel。
Verilog
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
4 5 6
data_out.txt
6 5 4
18行
fp_w = $fopen("data_out.txt", "w");
$fopen()類似C語言的fopen(),連參數都一樣,主要用來開啟檔案,並取得file handle。
21行
end
使用while迴圈,若不是最後一行,則一直讀取,類似c語言的while(!foef(fp_r)) {}。
22行
$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)相关推荐
- (原創) ThinkPad X61安裝過程全紀錄 (NB) (ThinkPad) (X61)
Abstract 我的ThinkPad X61安裝過程詳細紀錄. Introduction Step 1: ThinkPad X61基本硬體 (原創) 如何自行在ThinkPad X61安裝Windo ...
- (原創) Verilog入門書推薦2:數位系統實習 Quartus II (SOC) (Verilog)
Abstract 之前曾經推薦過一本Verilog的薄書,這次再推薦一本適合FPGA與Quartus II的Verilog入門書籍. Intrduction 作者:陸自強 出版社:儒林圖書公司 語言: ...
- 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 ...
- (原創) 如何將CMOS所擷取的影像傳到PC端? (SOC) (DE2) (TRDB-DC2)
AbstractDE2提供了Control Panel與Image Converter,可以將CMOS所擷取的影像傳到PC端, Introduction 版權聲明:文中所有範例皆出自DE2光碟,版權歸 ...
- 【WIN10】程序內文件讀取與保存
DEMO下載:http://yunpan.cn/cFHIZNmAy4ZtH 访问密码 cf79 1.讀取與保存文件 Assets一般被認為是保存用戶文件數據的地方.同時,微軟還支持用戶自己創建文件夾 ...
- (原創) 如何自行在ThinkPad X61安裝Windows XP Professional SP3? (NB) (ThinkPad) (X61) (OS) (Windows)...
Abstract 新一代的ThinkPad X61都已經安裝了Windows Vista,或許你因為各種理由想自己重新安裝Windows XP,並且升上SP3,本文是我的安裝心得. Introduct ...
- (原創) Quartus II安裝新觀念:如何將Quartus II安裝在VirtualBox內? (SOC) (Quartus II) (VirtualBox)...
Abstract VM並不是什麼新的觀念,透過VM我們可以在一個OS去執行其他OS,若我們將Quartus II也裝在VM中,將可解決一些長久以來Quartus II使用上所遇到的問題. Introd ...
- (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows)...
Abstract 由於記憶體便宜,不少人購買新NB時,基於一次到位原則,一次將X61的記憶體加到4GB攻頂,雖然X61的硬體抓的到4GB,但卻沒保證軟體的作業系統可以抓到4GB,只要是32位元的Win ...
- (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows)
原文地址为: (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows) Abstract 由於記憶體便 ...
最新文章
- 四连通,和八连通的详解(MATLAB)
- Outlook启动提示“找不到文件Outlook.pst文件”
- 堆排序最坏时间复杂度
- redis 启动时 Warning 警告解决及说明
- Java高级语法笔记-异常中finally的使用
- mysql innoback_innobackex工具备份mysql数据
- vs2005 pro 在浏览器查看下的一个问题!
- 服务器编译linux内核时间,Firefly-RK3399 Linux内核编译
- Leetcode题目:Reverse String
- 之间有什么区别。 (点)和$(美元符号)?
- pycharm怎么修改python路径
- BeanShell用法汇总
- 破解APK并修改APK的包名
- 神奇的CSS用法之border-radius
- 从5亿红包到千亿营收,看百度的增长曲线
- 偶数科技为辽宁农信数字化进程添加新动能
- C++函数默认参数(函数传入实参个数比形参个数少)
- 智牛股_第5章_Netty+PowerDesigner
- CT扫描的肝部三维重建
- 实战:怎样规避淘宝店铺运营的几大误区
热门文章
- python爬取基金历史净值_Python爬取天天基金网历史净值数据
- 面试中常问的HTTP/1.0状态码
- echarts 地图实现轮播(一)
- frame框架点击链接或者按钮跳转整个页面以及别的frame框架
- Maven 中央仓库地址
- VR: AR和VR演进哲学
- unity发布成手机app怎么不能被顶_Unity中Android API 28之后无法HTTP请求
- nginx 去掉服务器版本和名称和nginx_status 状态说明
- Memcached相关内容总结
- 终端报错xcrun: error: unable to find utility “xcodebuild”, not a developer tool or