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值由An和sn的位宽共同决定:当An=0(0也是默认值)时,deep的值为2的sn位宽次幂,否则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.vht和top.vht两个文件加入工程。top.vht文件内容如下图所示。
在工程目录下新建两个文本文件A0.txt和B0.txt。内容分别为20 2122 23和40 31 42 43。编译后运行仿真,仿真结果如图所示。top.vht的第23行表示在sn<8时输出为A0.txt中的数据,否则为文件B0.txt中的数据。第16行指明只读取前3个数,所以在仿真中输出第4个数显示位00。也就是说此时文件A0.txt和B0.txt虽然保存了4个数,但第4个数是多余的。
对于第二行的Library ucxLib;Use ucxLib.ucx_2008pkg.all;在以前的帖子中多次提到,函数包文件ucx_2008pkg.vhd是自定义的库文件,为简化VHDL代码编写。
|