打印
[VHDL]

玩转VHDL016-从文件读取仿真数据

[复制链接]
1286|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ucx|  楼主 | 2018-2-28 12:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

dFromFile.rar (804 Bytes)
在稍微复杂的工程中,为减少在线调试工作量,仿真是必不可少的。而在运行仿真时常常需要定制输入数据。如果把An个数据顺序存储在文本文件里,仿真运行时按照要求顺序或按某种规律输出,并且在仿真的过程中可以更改刷新数据,这将给仿真带来极大的方便。本帖就是基于此考虑,给出了一个从文件实时读取数据的仿真用模块dFromFile.vht

Entity dFromFile is generic(An :integer := 0);

         port(sn                        : in std_vector;

                   q                          : out std_vector;

                   FileName         : in string := "HexData.txt");

End dFromFile;

dFromFile功能描述
该模块中定义了一个常量deep用来表示数据的个数。deep值由Ansn的位宽共同决定:当An=00也是默认值)时,deep的值为2sn位宽次幂,否则deep=An

模块实时从文件<FileName>中读取前deep个数据放在数组mv[deep]中,如文件中数据不足deep个,则其余补0。任一数据mv的位宽与q的位宽相同。

sn<deep,则输出q=mv[sn],否则输出q=0

文件<FileName>以文本格式16进制数字形式保存。当q位宽是1~4时,每个数据用一位16进制数字表示,5~8位时用两位数字,9~12位时用3位数字,依次类推。数据之间用空白字符(包括换行)隔开。当q位宽不是4的整数倍时,文件中存取数字的高位被丢弃。例如,q使用7位,存储数据文本文件A0.txt保存四个数据20 A1 A2 A3,去掉最高位后为20  21 22  23

dFromFile的仿真
建立一个仿真工程,把附件中的dFromFile.vhttop.vht两个文件加入工程。top.vht文件内容如下图所示。

在工程目录下新建两个文本文件A0.txtB0.txt。内容分别为20 2122 2340 31 42 43。编译后运行仿真,仿真结果如图所示。top.vht的第23行表示在sn<8时输出为A0.txt中的数据,否则为文件B0.txt中的数据。第16行指明只读取前3个数,所以在仿真中输出第4个数显示位00。也就是说此时文件A0.txtB0.txt虽然保存了4个数,但第4个数是多余的。

对于第二行的Library ucxLib;Use ucxLib.ucx_2008pkg.all;在以前的帖子中多次提到,函数包文件ucx_2008pkg.vhd是自定义的库文件,为简化VHDL代码编写。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

ucx

29

主题

89

帖子

5

粉丝