【问题标题】:How to use/declare an unsigned Integer value in VHDL?如何在 VHDL 中使用/声明无符号整数值?
【发布时间】:2015-11-05 21:12:15
【问题描述】:

我正在尝试在 Altera DE1-SoC 板上设计一个基本的自动售货机。我的问题来自尝试编写将控制自动售货过程的状态机。您如何跟踪在状态之间跳跃的 $ 价值?我认为我试图实现的代码是用更高级别的语言格式编写的,无法用 VHDL 编译。有什么想法吗?

我收到了这个错误(就在架构声明之后):

错误 (10482):State.vhd(21) 处的 VHDL 错误:对象“unsignedInteger” 已使用但未声明

library ieee;
    use ieee.std_logic_1164.all;
    use IEEE.numeric_std.all;
    use IEEE.std_logic_unsigned.all;

    entity MessageState is
    Port(
        Reset          :in   std_logic; -- reset to a safe state
        -----------------------------------------------------------------------------------
        MyStateOut  :out    std_logic_vector( 1 downto 0 ); -- drive the current state to display or LEDs 
        OutputCode  :out    std_logic_vector( 6 downto 0 ) -- to the display driver 
    );

    end;

    architecture Vending_FSM of MessageState is

    signal Count: unsignedInteger(8 downto 0);

    -- we define a data type to represent the states. Use descriptive names
    -- add more lines for more states. Change the size of MyState as needed
    subtype MyState is std_logic_vector(2 downto 0);

    constant Idle          :MyState := "000";
    constant NickelState  :MyState := "001";
    constant DimeState    :MyState := "010";
    constant QuarterState :MyState := "011";
    constant Dispense       :MyState := "100";

    signal state, next_state: MyState;

    begin

    MyStateOut <= state; -- make state visible.

    MyNextState: process(state, next_state) begin -- add all signals read or tested in this process

        case state is

        when Idle =>

            if ( KEY(0) = '1') then
                next_state <= NickelState;

            elsif ( KEY(1) = '1') then
                next_state <= DimeState;

            elsif ( KEY(2) = '1') then
                next_state <= QuarterState;

            else
                next_state <= Idle; -- default action
                Count <= (others => '0');

            end if; 

【问题讨论】:

    标签: vhdl hdl intel-fpga quartus


    【解决方案1】:

    1) 删除 use IEEE.std_logic_unsigned.all;,因为 numeric_std 已加载。它声明了SIGNEDUNSIGNED 数据类型。

    2) 您的信号 Count 的类型只是 UNSIGNED

    【讨论】:

    • 解决了,谢谢!这是完成这项任务的好方法吗?还是有更优化的方法?
    • a) 你可以为你的状态使用一个枚举而不是许多常量。 b) 信号状态没有默认值。 c) 您的进程/FSM 没有 FSM 输出的默认分配 -> 这可能导致闩锁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多