常用Matlab函数和Modelsim任务

来源:互联网 发布:涉密网络三员 编辑:程序博客网 时间:2024/06/06 02:00

一.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 %li64bit

sizeA:读取的数据个数,inf 读完为止, 最多读取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 lowpassbandpassbandstop

 

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 lowpassbandpassbandstop

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:hw的长度

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系统任务,每个数字必须是十六进制数字。数字中不定值xX,高阻值zZ,和下划线(_)的使用方法及代表的意义与一般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需要触发条件才记录

 

0 0
原创粉丝点击