一.Matlab函数
1.1.1 函数名
fscanf
1.1.2函数功能
从文件中读取数据(从fileID指定的文件中,以format格式读取sizeA个数据,count为成功读取的数据个数)
1.1.3函数原型
[A, count] = fscanf(fileID, format, sizeA)
1.1.4 返回值
A:读取的数据
Count:为成功读取的数据个数
1.1.5 参数说明
fileID:要读取文件的标识符
format:数据的格式,Integer, signed 可用%d(十进制),%i(数据是什么格式就是什么格式),%ld or %li(64bit)
sizeA:读取的数据个数,inf 读完为止, n 最多读取n个数据
1.2.1 函数名
fprintf
1.2.2函数功能
将数据写入文件中
1.2.3函数原型
nbytes = fprintf(fileID,formatSpec,A1,...,An)
1.2.4 返回值
nbytes写进的数据个数
1.2.5 参数说明
fileID:要写入文件的标识符
formatSpec:数据描述符
A1...An:要写入的数据
1.3.1 函数名
cheby2
1.3.2函数功能
切比雪夫II型滤波器
1.3.3函数原型
[b,a] = cheby2(n,R,Wst,'ftype')
1.3.4 返回值
b:滤波器函数的分子系数为b
a:滤波器函数的分母系数为a
1.3.5 参数说明
n:滤波器的阶数
R:阻带衰减
Wst:截止频率,Wst = [w1 w2]时,返回的阶数为2*n的带通滤波器
ftype:滤波器的类型
典例:
N = 3;%滤波器的结束
R = 40;%阻带衰减
Fs = 32; %采样频率32MHZ
Wn = [ 9*2/Fs 14*2/Fs]; %通带截止频率,9MHz~14MHz
[ b,a ]=cheby2(N,R,Wn);%切比雪夫II型函数设计带通滤波器
1.4.1 函数名
Kaiserord
1.4.2函数功能
返回kaiser窗的参数,用于fir1函数
1.4.3函数原型
[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)
1.4.4 返回值
n:滤波器的阶数
Wn:滤波器的截止频率
ftype:滤波器的类型(highpass 、lowpass、bandpass、bandstop)
1.4.5 参数说明
f:过渡带
a:窗函数的理想滤波器幅度
dev:纹波
fs:采样率
1.5.1 函数名
fir1
1.5.2函数功能
实现FIR滤波器
1.5.3函数原型
b= fir1(n,Wn,'ftype',window)
1.5.4 返回值
b:FIR滤波器函数的系数
1.5.5 参数说明
n:滤波器的阶数
Wn:滤波器的截止频率
ftype:滤波器的类型(highpass 、lowpass、bandpass、bandstop)
window:窗的类型
典例:
%产生中频抗混叠滤波器,带外抑制大于35dB
fd = [ 1*10^6 3*10^6 9*10^6 11*10^6 ];%过渡带
mag = [ 0 1 0 ];%窗函数的理想滤波器幅度
dev = [ 0.1 0.01 0.1 ];%纹波
Fs = 32*10^6;
[ n,wn,beta,ftype ] = kaiserord(fd,mag,dev,Fs);%获取凯撒窗参数
b = fir1( n,wn,ftype,kaiser(n+1,beta) ); %获取fir滤波器系数
1.6.1 函数名
filter
1.6.2函数功能
对数字信号滤波,也可以求系统响应
1.6.3函数原型
y = filter(b,a,X)
1.6.4 返回值
y:FIR滤波器函数的系数
1.6.5 参数说明
b:滤波器的分子系数
a:滤波器的分母系数
X:输入的数字信号
1.7.1 函数名
freqz
1.7.2函数功能
计算系统的频响特性
1.7.3函数原型
[h,f]=freqz(b,a,n,fs)
1.7.4 返回值
h:频率响应向量
f:数字滤波器的角频率向量w
1.7.5 参数说明
b:滤波器的分子系数
a:滤波器的分母系数
n:h和w的长度
fs:采样频率(HZ)
1.8.1 函数名
Round
1.8.2函数功能
取整(四舍五入取整)
1.8.3函数原型
Y = round(X)
1.8.4 返回值
Y:取整后的数
1.8.5 参数说明
X:需要取整的数
1.9.1 函数名
floor
1.9.2函数功能
取整(向下取整)
1.9.3函数原型
B = floor(A)
1.9.4 返回值
B:取整后的数
1.9.5 参数说明
A:需要取整的数
典例:
a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i]
round(a)
ans =
Columns 1 through 4
-2.0000 0 3.0000 6.0000
Columns 5 through 6
7.0000 2.0000 + 4.0000i
floor(a)
ans =
Columns 1 through 4
-2.0000 -1.0000 3.0000 5.0000
Columns 5 through 6
7.0000 2.0000 + 3.0000i
1.10.1 函数名
dec2bin
1.10.2函数功能
将十进制数转换为二进制数
1.10.3函数原型
str = dec2bin(d,n)
1.10.4 返回值
str:转换后的二进制数
1.10.5 参数说明
d:需要转换的十进制数
n:至少用n位表示
典例:
dec2bin(23.2)
ans =
10111
>> dec2bin(23.2,9)
ans =
000010111
二.Modlesim
2.1.1 任务名
$fopen
2.1.2任务功能
打开文件
2.1.3任务原型
$fopen(file_name,mode)
2.1.4 参数
file_name:要打开文件的名字
mode:打开的方式
“w"打开文件并从文件头开始写,如果不存在就创建文件。
“w+"打开文件并从文件头开始读写,如果不存在就创建文件
"a"打开文件并从文件末尾开始写,如果不存在就创建文件
“a+"打开文件并从文件末尾开始读写,如果不存在就创建文件
2.1.5返回值
文件描述符(integer型)
典例:
integer file_df;
initial
begin
//创建文件,文件必须位于仿真目录下
file_df = $fopen( "Square100dB_df.txt" );
if( !file_df )
begin
$display(" could not open file! " );
$finish;
end
end
2.2.1 任务名
$fclose
2.2.2任务功能
关闭文件
2.2.3任务原型
$fclose(fileID)
2.2.4 参数
fileID:要关闭文件的描述符
2.3.1 任务名
readmenmb,readmemh
2.3.2任务功能
从文件中读取数据
2.3.3任务原型
$readmemb("<数据文件名>",<存贮器名>);
$readmemb("<数据文件名>",<存贮器名>,<起始地址>);
$readmemb("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>);
$readmemh("<数据文件名>",<存贮器名>);
$readmemh("<数据文件名>",<存贮器名>,<起始地址>);
$readmemh("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>);
2.3.4 说明
在这两个系统任务中,被读取的数据文件的内容只能包含:空白位置(空格,换行,制表格(tab)和form-feeds),注释行(//形式的和形式的都允许),二进制或十六进制的数字。数字中不能包含位宽说明和格式说明,对于$readmemb系统任务,每个数字必须是二进制数字,对于$readmemh系统任务,每个数字必须是十六进制数字。数字中不定值x或X,高阻值z或Z,和下划线(_)的使用方法及代表的意义与一般Verilog HDL程序中的用法及意义是一样的。另外数字必须用空白位置或注释行来分隔开。
典例1:
//读取外部txt文件中的数据
integer Pattern;
reg [ 9:0 ]stimulus[ 1:data_num ];
initial
begin
$readmemb( "Square100dB.txt",stimulus );
Pattern = 0;
repeat( data_num )
begin
Pattern = Pattern + 1;
din = stimulus[ Pattern ];
#period_data;
end
end
典例2:
reg[7:0] mem[1:256];
下面给出的系统任务以各自不同的方式装载数据到存贮器mem中。
initial $readmemh("mem.data",mem);
initial $readmemh("mem.data",mem,16);
initial $readmemh("mem.data",mem,128,1);
第一条语句在仿真时刻为0时,将装载数据到以地址是1的存贮器单元为起始存放单元的存贮器中去。第二条语句将装载数据到以单元地址是16的存贮器单元为起始存放单元的存贮器中去,一直到地址是256的单元为止。第三条语句将从地址是128的单元开始装载数据,一直到地址为1的单元。在第三种情况中,当装载完毕,系统要检查在数据文件里是否有128个数据,如果没有,系统将提示错误信息。
2.4.1 任务名
fscanf
2.4.2任务功能
从文件中读取数据
2.4.3任务原型
$fscanf(文件指针,读取格式,数组)
2.4.4 说明
返回值为1表示成功,读取格式可以为%b,%d,%h(注意,如果读取格式为二进制,则文件中只能识别0 1.)
典例:
integer fp_r,fp_w;
integer flag1,flag2;
reg [3:0] bin;
reg [15:0] data_in [15:0];
reg [15:0] cnt = 15;
initial
begin :file_fscanf
fp_r = $fopen("data_in.txt","r");
fp_w = $fopen("data_out.txt","w");
if(fp_r == `NULL)
$display("failture to open data_in.txt ");
if(fp_w == `NULL)
$display("failture to open data_out.txt ");
//while(cnt>0)
repeat(10)
begin
flag1 = $fscanf(fp_r,"%h",data_in[cnt]);
$display("data_in[%d]=%h ",cnt,data_in[cnt]);
$fdisplay(fp_w,"%h",data_in[cnt]);
cnt = cnt -1;
end
$fclose(fp_w);
$fclose(fp_r);
end
2.5.1 任务名
$fdisplay、$fmonitor、$fwrite
2.5.2任务功能
将数据写入文件
2.5.3任务原型
$fdisplay(fileID, "%format_char", parameter);
$fmonitor(fileID, "%format_char", parameter);
$fwrite(fileID, "%format_char", parameter);
2.5.4 参数
fileID:要写入文件的描述符,integer型
format_char:写入的格式
parameter:要写入的数据
2.5.5说明
$fdisplay需要触发条件才记录,$fmonitor只要有变化就一直记录,$fwrite需要触发条件才记录