zoukankan      html  css  js  c++  java
  • testbench——文件读入输出

    注:仿真工具为ISE自带simulation

    1.读入.txt中的文件

    待读入文件为photo.txt,位于所建工程文件夹中。

    代码:

    integer cnt,i;
    reg [7:0] mem[31:0];
    reg [5:0] address;
    integer fp;
    initial
    begin
    	fp = $fopen("photo.txt","rb");
    	address = 0;
        while(!$feof(fp))  begin 
            for(i=0; i<16; i=i+1)  begin
                cnt = $fscanf (fp, "%d",mem[address]);
                address=address+1;
            end
        end
        $fclose(fp);
    end
    注释:

    使用句柄fp定位文件之后操作即可;

    代码中i < 16的值原则上可以为任意值,一般小于文件中数据总数就好了,因为有 while(!$feof(fp)) 在控制;

    以二进制方式读入的;

    待读入数据:


    结果图:



    另外一种写法

    reg [7:0] mem[31:0];
    initial
    begin
        $readmemh("photo.txt",mem);
    end
    注:$readmemh和$readmemb分别用来读入源文件为16进制和2进制的文件

    结果图:


    2.写出.txt文件

    代码:

    integer fp_write;
    reg [5:0] write_address;
    initial
    begin
    	fp_write =  $fopen("output.txt");
    	write_address = 0;
    	while(write_address != 32)
    	begin
    		$fwrite(fp_write, "%d ", mem[write_address]);
    		write_address = write_address + 1;
    		if(write_address%8 == 0) $fwrite(fp_write, "
    ");
    	end
    	$fclose(fp_write);
    end
    注:

    if(write_address%8 == 0) $fwrite(fp_write, " "); 为了给文件中加入换行

    结果:


    整体代码:

    `timescale 1 ns / 1 ps
    
    module testbench;
    
    reg clk, rst, start;
    
    initial begin 
        clk = 0;
        forever #5 clk = ~clk;
    end
    
    initial begin
        rst = 0;
    	#8 rst = 1;
    end
    
    initial begin
        start = 0;
        #502 start = 1;
    end
    
    integer cnt,i;
    reg [7:0] mem[31:0];
    reg [5:0] address;
    integer fp;
    initial
    begin
    	fp = $fopen("photo.txt","rb");
    	address = 0;
        while(!$feof(fp))  begin 
            for(i=0; i<16; i=i+1)  begin
                cnt = $fscanf (fp, "%d",mem[address]);
                address=address+1;
            end
        end
        $fclose(fp);
    end
    
    integer fp_write;
    reg [5:0] write_address;
    initial
    begin
    	fp_write =  $fopen("output.txt");
    	write_address = 0;
    	while(write_address != 32)
    	begin
    		$fwrite(fp_write, "%d ", mem[write_address]);
    		write_address = write_address + 1;
    		if(write_address%8 == 0) $fwrite(fp_write, "
    ");
    	end
    	$fclose(fp_write);
    end
    
    endmodule





  • 相关阅读:
    linux如何查看端口或服务被占用情况
    linux网络查看及配置相关命令
    linux查看程序运行相关命令
    shell脚本编写一个用真实用户去访问的vsftpd服务器
    shell脚本监控CPU和内存利用率
    小白的个人技能树(基于自动化软件测试开发实习和软件开发实习)
    MySQL 8.0.12 基于Windows 安装教程(超级详细)
    C语言 0x7fffffff是多少(也就是INT_MAX,首位是 0,其余都是1,f代表1111)
    数通知识点
    数据结构之算法基础
  • 原文地址:https://www.cnblogs.com/mingmingruyue99/p/7202007.html
Copyright © 2011-2022 走看看