$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