You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VHDL中实现可综合的摄氏温度转华氏温度计算?

VHDL实现摄氏温度转华氏温度(整数运算适配综合)

需求是用VHDL实现摄氏到华氏温度的转换,公式为 b = a * 1.8 + 32,要求以整数类型的摄氏温度作为输入,输出整数类型的华氏温度。由于VHDL综合工具不支持带小数点的数值运算,REAL类型仅能用于仿真阶段,无法被综合,因此需要通过整数运算的缩放方法来实现。

综合代码(适配硬件实现)

entity temperature is
    Port ( a : in INTEGER RANGE 82 TO 92;
           b : out INTEGER RANGE 100 TO 300);
end tem;  -- 注:此处entity名称与end后的标识不一致,建议修改为end temperature;

Architecture Behavioral of temperature is

begin
b <= a*18 + 320;  -- 将公式放大10倍,用整数运算替代小数运算
end Behavioral;

代码说明

为了规避小数运算,将原公式中的系数和常数都放大10倍:

  • 原公式 b = a * 1.8 + 32 等价于 b*10 = a*18 + 320
  • 若需要还原为实际华氏温度的整数结果(如取整或四舍五入),可在输出时添加除法逻辑(例如 b <= (a*18 + 320) / 10;),注意VHDL中整数除法默认向零取整。

仿真代码(验证逻辑正确性)

signal a: INTEGER;
signal b: INTEGER;
signal c: REAL;
signal d: REAL;
begin

  temperature port map ( a => a,
                      b => b );

  stimulus: process
            variable k: integer:= 0;
  begin
    a <= 82;
    c <= 82.0;
    d <= 179.6;
    wait for 5 ns;
    for k in 0 to 4 loop         
      wait for 5 ns;
      a <= a + 1;
      c <= c + 1.0;
      d <= (c + 1.0)*1.8 + 32.0;
    end loop;        
                
    wait;
  end process;

仿真说明

仿真代码中使用REAL类型计算精确的华氏温度值(d信号),同时驱动整数输入a到待测试实体,通过对比b和d的缩放后数值,可验证综合代码的逻辑正确性。

内容的提问来源于stack exchange,提问作者Shikang Shen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:05:37