Vhdl 以下代码不适用于';t更新温度计数,一个信号。

Vhdl 以下代码不适用于';t更新温度计数,一个信号。,vhdl,Vhdl,我有一个10位乘法器的结构化实现,其中它们是一个控制单元,用于跟踪状态并相应更新。它们是一个名为temp_count的计数器,该计数器应该更新并告诉我是否已完成任务。我希望我可以附上模拟的图片,但我无法访问它。我稍后会更新它。如果有人能帮我,这是密码 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity Controller

我有一个10位乘法器的结构化实现,其中它们是一个控制单元,用于跟踪状态并相应更新。它们是一个名为temp_count的计数器,该计数器应该更新并告诉我是否已完成任务。我希望我可以附上模拟的图片,但我无法访问它。我稍后会更新它。如果有人能帮我,这是密码

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity  Controller  is
port (reset     : in std_logic ;
      clk       : in std_logic ;
      START     : in std_logic ;
      LSB       : in std_logic ;
      ADD_cmd   : out std_logic ;
      SHIFT_cmd : out std_logic ;
      LOAD_cmd  : out std_logic ;
      STOP      : out std_logic);
end;
architecture  rtl  of  Controller  is
signal temp_count : std_logic_vector(3 downto 0);
-- declare states
type state_typ is (IDLE, INIT, TEST, ADD, SHIFT);
signal state : state_typ;
begin
process (clk, reset)
  begin
    if reset='0' then
      state <= IDLE;
      temp_count <= "0000";
    elsif (clk'event and clk='1') then
            when IDLE =>
          if START = '1' then
            state <= INIT;
          else
            state <= IDLE;
          end if;
        when INIT =>
          state <= TEST;
        when TEST =>
          if LSB = '0' then
            state <= SHIFT;
          else
            state <= ADD;
          end if;
        when ADD =>
          state <= SHIFT;
        when SHIFT =>
          if temp_count = "1001" then  -- verify if finished
            temp_count <= "0000";      -- re-initialize counter
            state <= IDLE;            -- ready for next multiply
          else
            temp_count <= temp_count + 1; -- increment counter
            state <= TEST;
          end if;
      end case;
    end if;
  end process;
  STOP <= '1' when state = IDLE else '0';
  ADD_cmd <= '1' when state = ADD else '0';
  SHIFT_cmd <= '1' when state = SHIFT else '0';
  LOAD_cmd <= '1' when state = INIT else '0';
end rtl;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_arith.all;
使用ieee.std_logic_unsigned.all;
实体控制器是
端口(复位:在std_逻辑中;
clk:标准逻辑中;
启动:在标准逻辑中;
LSB:标准逻辑中;
添加命令:输出标准逻辑;
移位指令:输出标准逻辑;
加载命令:输出标准逻辑;
停止:输出标准(U逻辑);
结束;
介绍了控制器的rtl体系结构
信号温度计数:标准逻辑向量(3到0);
--申报国家
类型状态类型为(空闲、初始化、测试、添加、移位);
信号状态:状态\典型;
开始
过程(时钟、复位)
开始
如果reset='0',则

声明我刚刚在modelsim上试用了你的代码,它对我很有效。是否您忘记了实体正在使用“低激活”重置?对于模拟,最好将所有声明的信号初始化为零。例如,temp_count.和A.Kieffer的评论是要求A的一个很好的理由,在本例中说明了问题。我刚刚在modelsim上尝试了你的代码,它对我很有效。是否您忘记了实体正在使用“低激活”重置?对于模拟,最好将所有声明的信号初始化为零。例如,temp_count.和A.Kieffer的评论是要求A的一个很好的理由,在本例中,说明了问题所在。