Verilog testbench的写法之输入输出文件

原创 2016年08月31日 16:12:39

以下为代码和解释:


`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer:
//
// Create Date:   15:03:48 08/31/2016
// Design Name:   Gaussian1
// Module Name:   D:/SIFT/project/SIFT_Gaussian/tb_Gaussian1.v
// Project Name:  SIFT_Gaussian
// Target Device:  
// Tool versions:  
// Description: 
//
// Verilog Test Fixture created by ISE for module: Gaussian1
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////

module tb_Gaussian1;

	// Inputs
	reg CLK;
	reg nRESET;
	reg [7:0] PIXEL_IN;
	reg VALID_IN;

	// Outputs
	wire VALID_OUT;
	wire [1214:0] DATA_OUT;
	
	reg [7:0] image_b [0:1023];  //输入文件大小
	integer read_addr;
	
	integer read_image_point;
	integer image_point;
	
	integer i;
	
	reg [14:0]data_buffer[0:575][0:80]  //输出文件大小
	integer data_cnt;
	integer data_cnt2;
	
	reg [18:0] write_addr;
	integer write_text_point;

	// Instantiate the Unit Under Test (UUT)
	Gaussian1 uut (
		.CLK(CLK), 
		.nRESET(nRESET), 
		.PIXEL_IN(PIXEL_IN), 
		.VALID_IN(VALID_IN), 
		.VALID_OUT(VALID_OUT), 
		.DATA_OUT(DATA_OUT)
	);

	initial begin
		// Initialize Inputs
		CLK = 0;
		nRESET = 0;
		PIXEL_IN = 0;
		VALID_IN = 0;
		
		read_addr = 0;
		read_image_point = $fopen("1.raw","rb+");  
		image_point = $fread(image_b,read_image_point);   // reg [7:0] image_b [0:1023]; 

		
		write_addr = 0;
		write_text_point = $fopen("normalization_result.txt"."wb+");
		
		data_cnt = 0;
		data_cnt2 = 0;

		// Wait 100 ns for global reset to finish
		#100;
        
		// Add stimulus here
		
		nRESET = 1;

	end
	
	initial begin
		forever begin
		#5 CLK = !CLK;
		end
	end
	
	always@(posedge CLK or negedge nRESET)
	begin
		if(!nRESET)
		begin	
			read_addr <= 0;
			PIXEL_IN <= 0;
		end
		
		else
		begin
			if(read_addr <= 1024)
			begin
				read_addr <= read_addr + 1;
				PIXEL_IN <= image_b[read_addr];    // reg [7:0] image_b [0:1023]; 
				VALID_IN <= 1'd1;
			end
		
			else
			begin
				VALID_IN <= 1'b0;
			end
		end
	end
	
	wire[14:0] divide_out_data[0:80];
	
	generate genvar i0;
		for(i0 = 0; i0 < 81; i0 = i0 + 1)
		begin : xxxxxxxxx
			assign divide_out_data[i0] = DATA_OUT[15*i0 + 14 : 15 * i0];    //wire [1214:0] DATA_OUT;
                                                                           DATA_OUT[(15*i0 + 14) : (15 * i0)] 15位  15*81 = 1215
		end
	endgenerate
	
	always@(posedge CLK or negedge nRESET)
	begin
		if(!nRESET)
		begin
			data_cnt2 <= 0;
		end
		
		else
		begin
			if(VALID_OUT == 1'd1)
			begin
				for(i=0; i<81; i = i + 1)
				begin
					data_buffer[data_cnt2][i] <= divided_out_data[i]];   
				end  
				data_cnt2 <= data_cnt2 + 1;
			end
		end
	end
	
	always@(posedge CLK or negedge nRESET)
	begin
		if(data_cnt2 == 576)
		begin
			for(n = 0; n < 576; n = n + 1)
			begin
				for(m = 0; m < 81; m = m + 1)
				begin
					$fwrite(write_text_point,data_buffer[n][m]);
					$fwrite(write_text_point, ",");
				end
			end
			
			$fclose(write_text_point);
		end
	end
	
	
      
endmodule



版权声明:本文为博主原创文章,未经博主允许不得转载。

Verilog十大基本功2(testbench的设计 文件读取和写入操作 源代码)

需求说明:Verilog设计基础 内容       :testbench的设计 读取文件 写入文件 来自       :时间的诗 十大基本功之 testbench ...

fwrite和fread函数的用法小结

fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。 #include size_t fread(void *ptr, size_t si...
  • Sky_qing
  • Sky_qing
  • 2013年10月16日 16:55
  • 94465

Verilog 读写文件(整理二)

Overview ________________________________________ This application note describes how your Veril...

Verilog之流水灯

VerilogHDL那些事儿_建模篇(黑金FPGA开发板配套教程) 作者:akuei2 说明:参照该书将部分程序验证学习一遍 学习时间:2014年5月2号   主要收获: 1.对FPGA有初步了解; ...

Verilog testbench总结(一)

1. 激励的产生 对于testbench而言,端口应当和被测试的module一一对应。端口分为input,output和inout类型产生激励信号的时候,input对应的端口应当申明为reg, ...

基本testbench写法

1. 给模块取一个名字(可任意取,一般在仿真模块后加"_test")     例如:         module myDesign_test;           /*//////...
  • glowu
  • glowu
  • 2012年04月26日 22:06
  • 4467

Testbench基本入门

1 编写testbench目的         编写testbench的主要目的是为了对使用硬件描述语言(HDL)设计的电路进行仿真验证,测试设计电路的功能、部分性能是否与预期的目标相符。 ...

如何编写testbench的总结(非常实用的总结)

如何编写testbench的总结(非常实用的总结)   1.激励的设置 相应于被测试模块的输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理。 方法...

Testbench基本入门

1 编写testbench目的         编写testbench的主要目的是为了对使用硬件描述语言(HDL)设计的电路进行仿真验证,测试设计电路的功能、部分性能是否与预期的目标相符。 ...

verilog 入门教程

verilog 入门教程   2011-07-23 10:21:15|  分类: Verilog | 1.1 什么是Verilog HDL? 1.2 Verilo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Verilog testbench的写法之输入输出文件
举报原因:
原因补充:

(最多只允许输入30个字)