Testbench讀取文本文件函數$readmemb測試

$readmemb讀取二進制文本

$readmemh讀取十六進制文本

 

txt文件:https://pan.baidu.com/s/1_KhzGnSqCSXrzT50h38UZA

程序:

module sin
(
input   [13:0] data_sin_in,
output  [13:0] data_sin_out

);

assign data_sin_out = data_sin_in;

endmodule

testbench:

`timescale 1ns/1ps
module sin_tb;

reg 		   clk;
reg         rst_n;
reg  [13:0] data_sin_in;

wire [13:0] data_sin_out;

reg  [13:0] mem [1030:0];
reg  [10:0] n;
reg  [10:0] k;

sin sin_u
(
.data_sin_in(data_sin_in),
.data_sin_out(data_sin_out)
);


initial
begin
	clk = 1;
	rst_n = 0;
	data_sin_in = 0;
	n=0;

	for(k=0;k<=1030;k=k+1)	//循環賦值,寄存器初始化。   可以不初始化,沒初始化且沒賦值的寄存器讀出來是x,這裏多設置7個值用來查看
		mem[k]=k;
		
	#5;
	$readmemb("C:/Users/LETU/Desktop/02_demo/self_training/sin/data_sin.txt",mem);//讀取data_sin.txt裏的二進制數到mem寄存器,1024個值,$readmemh讀取十六進制文本。文件目錄用正斜槓	,記得改成txt文件的路徑
	#10 rst_n = 1;
		
end

always #5 clk = ~clk;


always @(posedge clk or negedge rst_n)//寄存器的值賦值
begin
	if(!rst_n)
		begin
			n<=0;
			data_sin_in<=0;
		end
	else
		begin
			if(n<=1030)
				begin
					data_sin_in<=mem[n];
					n<=n+1;
				end
			else
				begin
					n<=0;
					data_sin_in<=0;
					$stop;
				end		
				
		end
end
	

//用系統函數查看
reg  [13:0] memory [1023:0];
reg  [10:0] m ;
initial
	begin
		$readmemb("C:/Users/LETU/Desktop/02_demo/self_training/sin/data_sin.txt",memory); 
	for(m=0;m<=1030;m=m+1)   
		$display("%b",memory[m]);
	end


endmodule

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章