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





  • 相关阅读:
    ViewModel和LiveData问题思考与解答
    vps_centos_7_系统环境常规配置备忘
    JVM内存管理&GC
    sping注解
    ibatis order by 防止sql注入
    好用的绿色工具(mss2sql,jd-gui)
    mysql优化
    Spring事务
    好文分享_java堆栈的区别
    Linux usual cmd
  • 原文地址:https://www.cnblogs.com/mingmingruyue99/p/7202007.html
Copyright © 2011-2022 走看看