1.复杂电路系统的设计,用状态机控制状态和开关信号,用组合逻辑实现模块化的运算和控制。同步状态机中用非阻塞赋值,组合逻辑中用阻塞赋值。
2.同一个变量不同在多个always块中被赋值,仿真没问题,综合时会报错。
3.同一个always块中不能混合使用阻塞赋值和非阻塞赋值,仿真可以,综合时会报错。
4.$readmemb和readmemh分别只能读二进制和16进制的数据文件,一般用‘.dat’文件,不能用'.txt'文件。
5.由于FPGA仿真时需要定点数据文件。在Matlab中可以用定点工具箱帮助产生。以下是一段代码:
%DATA properties定义定点数类型
T8=numerictype('Signed',true,'WordLength',16,'FractionLength',8);%指定总位宽、小数位宽等基本属性
F=fimath('CastBeforeSum',0,'OverflowMode','Saturate','RoundMode','fix'...%指定运算方式
,'MaxProductWordLength',32,'MaxSumWordLength',32....
,'ProductMode','SpecifyPrecision'...
,'ProductWordLength',16,'ProductFractionLength',8....
,'SumMode','SpecifyPrecision'...
,'SumWordLength',16,'SumFractionLength',8);
P=fipref('NumberDisPlay','RealWorldValue','NumericTypeDisplay','full');%指定显示方式
rng('default')
% Gernerate data
y=randn(1,10);
% Fixed point
y_fi=fi(y,T8,F);%产生fi对象
% write file
fid_y=fopen('yy.dat','wt');
for ii=1:10
fprintf(fid_y,'%s\n',hex(y_fi(ii)));%hex()返回的是char型的十六进制,用%s写入到文件
end
fclose(fid_y);