【问题标题】:How to assign value of signal to out port?如何将信号的值分配给输出端口?
【发布时间】:2014-10-01 16:51:58
【问题描述】:

我一直在尝试将信号值分配给输出端口。当我模拟设计时,我得到了正确的信号秒输出,但是一旦我将信号的值分配给输出端口,它就会给我一个警告。此警告粘贴在下方。我尝试使用信号和输出都保持std_logic,但仍然得到相同的错误。

相信你会有我的答案。

提前致谢。

FF/Latch 在 block 中有一个常数值 0。
此 FF/Latch 将在优化过程中被修整。 WARNING:Xst:1896 - 由于其他 FF/Latch 微调,FF/Latch 在 block 中有一个常数值 0。
此 FF/Latch 将在优化过程中被修整。 WARNING:Xst:1896 - 由于其他 FF/Latch 微调,FF/Latch 在 block 中有一个常数值 0。
此 FF/Latch 将在优化过程中被修整。 WARNING:Xst:1896 - 由于其他 FF/Latch 微调,FF/Latch 在 block 中有一个常数值 0。
此 FF/Latch 将在优化过程中被修整。 WARNING:Xst:1896 - 由于其他 FF/Latch 微调,FF/Latch 在 block 中有一个常数值 0。
此 FF/Latch 将在优化过程中被修整。 WARNING:Xst:1896 - 由于其他 FF/Latch 微调,FF/Latch 在 block 中有一个常数值 0。
此 FF/Latch 将在优化过程中被修整。 WARNING:Xst:1896 - 由于其他 FF/Latch 微调,FF/Latch 在 block 中有一个常数值 0。
此 FF/Latch 将在优化过程中被修整。 WARNING:Xst:1896 - 由于其他 FF/Latch 微调,FF/Latch 在 block 中有一个常数值 0。
此 FF/Latch 将在优化过程中被修剪。

这是我的代码!

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;

    entity clock is
       port ( CLKin: in std_logic;
              CLKout: out std_logic);
    end clock;

    architecture arch of clock is

      signal counter: integer:=0;
      signal temp : std_logic := '1';

    begin

      process(CLKin,counter,temp)
      begin
        if(CLKin'event and CLKin='1') then
          counter <=counter+1;
          if (counter = 50000000) then
            temp <= NOT temp; 
            counter<=0;
            CLKout <= temp;
          end if;
        end if;
      end process;
    end arch;

【问题讨论】:

  • 您的问题缺乏足够的信息。您至少可以发布您的代码吗?
  • 警告表明您的分配将在某处出现问题(基本上锁存器正在优化)。
  • 有关具有相同警告的成功问题示例,请参阅VHDL Synthesis - FF/Latch Constant Value。请注意变量的声明(在这种情况下),整数不受限制,导致所有修剪。答案实际上需要 VHDL 代码。

标签: vhdl xilinx synthesis


【解决方案1】:

我认为这是因为你的:

signal counter: integer:=0;
signal temp : std_logic := '1';

综合过程中忽略的初始值

【讨论】:

    【解决方案2】:

    我同意Serhii Cookie,这也是该工具试图警告您的内容。初始语句不综合²,用于综合的代码的正确版本必须包含具有此效果的复位信号。 所以你正在寻找类似的东西:

        IF reset='0' THEN
            -- Reset the counter and assign initial values
            signal counter <= 0;
            signal temp <= '1';
        ELSIF  rising_edge(clk) THEN
            -- do the actual processing
        END IF;
    

    ..在您的流程开始时。

    ² 即它仅用于模拟和测试目的,因此被大多数综合工具忽略。

    【讨论】:

      猜你喜欢
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多