打印
[VHDL]

玩转VHDL018-仿真结果写入文件

[复制链接]
1430|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ucx|  楼主 | 2018-3-7 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ucx 于 2018-3-7 11:31 编辑

dToFile.rar (653 Bytes)
前面介绍了从文件读入仿真数据的模块,本帖再介绍一下把仿真结果以16进制方式顺序写入文本文件的模块dToFile.vht,并给出对模块的解读和仿真。
Entity dToFileis generic (LW : positive := 1);port(   
               xd                                 : in std_logic;
               d                                   : in std_logic_vector;
              FileName                  : in string :="HexResult.txt");
End dToFile;

输入d是仿真结果,d的比特宽度由实际应用确定。xd用来触发写入,当xd电平发生变化时(即在xd跳变沿之后),d被写入文件FileNameLW为一行写入结果的个数,同一行内的数据由空格隔开。模块在d的个数达到一行时才被写入文件一次。

模块解读
文件dToFile.vht11constant wid: integer := (d'length+3)/4 + 1;定义的wid是以16进制表示d所需字符数+1,这个+1是空格的位置。

13~19用来在仿真开始时创建一个空文件,如果文件已经存在则清空内容。

24:变量mv用来暂存一行的数据。

27xd跳变沿触发进程。

28~32:把当前的数据写入mv

33~37:一行内数据个数计数。

38~47:如果计满一行,则打开文件写入,然后关闭文件。

模块仿真
为了突出主题,我们把仿真顶层文件top.vht写得尽可能简单。全部内容如下

Library ieee;Useieee.std_logic_1164.all,ieee.std_logic_unsigned.all;
entity top is end top;
architecturepure_sim of top is
         signal sn  : std_logic_vector(5 downto 0):=(others=>'1');
begin
i2: entitywork.dToFile generic map(LW=>6)         port map(xd=>sn(0), d=>sn,FileName=>"结果.txt");
Process begin
         wait for 10 ns;
         sn <= sn+1;
End process;
End pure_sim;
top.vht完成的功能是每6个数据一行将sn的值保存在《结果.txt》文件内。仿真定义了一个6位循环计数器sn,以10ns为周期加1那么sn(0)的变化就代表着sn的值发生变化,所以用sn(0)作为dToFile的触发信号xd输入。文件dToFile.vht内容稍微有点多在附件中给出。对此问题感兴趣的同仁可以下载附件自行仿真。

相关帖子

沙发
酒德麻鹅| | 2021-5-15 15:38 | 只看该作者
博主您好,这个”玩转VHDL018-仿真结果写入文件“里的代码文件下载不下来,您方便再分享一下代码吗,感谢!
我的邮箱是:liuyueamazing@163.com

使用特权

评论回复
板凳
ucx|  楼主 | 2021-5-20 13:42 | 只看该作者
从《源数据》读入循环写入《结果》示例.rar (2.38 KB)

我这里有一个从《源数据.txt》读入数据,根据时钟节拍逐个写入《结果.txt》的示例,共享在此,希望对你有帮助。

使用特权

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

本版积分规则

ucx

29

主题

91

帖子

5

粉丝