Variables 将标准逻辑向量推送到变量

Variables 将标准逻辑向量推送到变量,variables,vhdl,Variables,Vhdl,我试图将两个std\u logic\u vectors推到函数divide中的变量a和b。 现在,问题是变量b不会被写入。 但是变量a将被写入,其编码方式与b相同 我收到以下错误消息: 使用变量“b1”的初始值表达式,因为从未为变量赋值 这是函数调用: s_ratio <= divide((to_unsigned(0,N_CUM-4) & unsigned(hold_ratio(7 downto 4))) , (to_unsigned(0,N_CUM-4) & unsign

我试图将两个
std\u logic\u vector
s推到函数
divide
中的变量
a
b
。 现在,问题是变量
b
不会被写入。 但是变量
a
将被写入,其编码方式与
b
相同

我收到以下错误消息:

使用变量“b1”的初始值表达式,因为从未为变量赋值

这是函数调用:

s_ratio <= divide((to_unsigned(0,N_CUM-4) & unsigned(hold_ratio(7 downto 4))) , (to_unsigned(0,N_CUM-4) & unsigned(hold_ratio(3 downto 0))));

如果在
begin
后的前两行而不是在变量声明处指定初始值,会发生什么情况?错误消息是正确的,您从未指定
b1
,它有初始值,但没有指定。但是,您确定这是导致失败的错误吗?我觉得你所描述的更可能是一个综合警告而不是失败。。。你在用什么工具?您是如何得出结论的“[…]变量b将不会被写入。但变量a将被写入[…]”错误消息或警告的?为您的任务和功能建立一个测试台实际上是模拟的。Jonathan问什么工具?你说得对,这是一个合成警告,我正在使用QuartusII乔纳森·卓莱特:因为我在船上测试过。
function  divide  (a : UNSIGNED; b : UNSIGNED) return UNSIGNED is
  variable a1 : unsigned(a'length-1 downto 0):=a;
  variable b1 : unsigned(b'length-1 downto 0):=b;
  variable p1 : unsigned(b'length downto 0):= (others => '0');
  variable i : integer:=0;
begin
  for i in 0 to b'length-1 loop
    p1(b'length-1 downto 1) := p1(b'length-2 downto 0);
    p1(0) := a1(a'length-1);
    a1(a'length-1 downto 1) := a1(a'length-2 downto 0);
    p1 := p1-b1;
    if(p1(b'length-1) ='1') then
      a1(0) :='0';
      p1 := p1+b1;
    else
      a1(0) :='1';
    end if;
  end loop;
  return a1;

end divide;