为可合成VHDL使用非常量实值表达式时出错 当f9=> 如果melcol
如注释中所述,对于合成应用程序,不应使用为可合成VHDL使用非常量实值表达式时出错 当f9=> 如果melcol,vhdl,vivado,Vhdl,Vivado,如注释中所述,对于合成应用程序,不应使用real类型,而应根据可合成的固定或浮点类型定义逻辑。您可能会发现,在更改逻辑以使用这些新类型的过程中,您需要重新思考如何实现您试图实现的目标 如其他人在评论中所述,查看以下资源: 和点类型的用户指南 您正在使用的合成工具的手册/用户指南。例如 我认为您需要阅读这些。。。和 when f9 => if melcol < 128 and framcounter < 2560 then temp <
real
类型,而应根据可合成的固定或浮点类型定义逻辑。您可能会发现,在更改逻辑以使用这些新类型的过程中,您需要重新思考如何实现您试图实现的目标
如其他人在评论中所述,查看以下资源:
- 和点类型的用户指南
- 您正在使用的合成工具的手册/用户指南。例如
when f9 =>
if melcol < 128 and framcounter < 2560 then
temp <= std_logic_vector(signed(framout)*to_signed(melf(melrow,melcol),8));
firstmelout <= firstmelout + (to_integer(unsigned(temp)))/1000;
melcol <= melcol+1;
framcounter <= framcounter+1;
fstate <= f9;
elsif melcol = 128 and melrow < 13 and framcounter < 2560 then
-----MEMORY NEEDED
framcounter <= framcounter -128;
melrow <= melrow+1; --melrow filter number
melcol <= 0;
secondmelout <= firstmelout;
fstate <= f10;
elsif melcol = 128 and melrow = 13 and framcounter < 2560 then
---------MEMORY NEEDED
framcounter <= framcounter +128;
melrow <= 0;
melcol <= 0;
secondmelout <= firstmelout;
fstate <= f10;
elsif framcounter = 2560 then
flagmel <= '1';
fstate <= f12;
else fstate <= f12;
end if;
when f10 =>
varmel <= real(secondmelout);
--varmel := LOG10(firstmelout);
--varlogresult := 100*varlogresult;
wea3(0) <= '1';
--logresult <= intlogresult;
fstate <= f11;