首页 > 解决方案 > VHDL:如何在 VHDL 中使用 rem 和 mod 命令?(语法问题)

问题描述

你好我想取二进制数23。二进制形式是:010111

所以如果例如 23 mod 10 我会得到 3 。如何在 VHDL 中执行此命令?这是我到目前为止写的:

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

ENTITY rem_command IS
  GENERIC (display_resolution : INTEGER :=23;   -- counter to get to the loest ferquncy 
  display_counter: INTEGER :=8);        -- counter to get to 97KHz ferquincy 

PORT (
    CLK_IN :IN STD_LOGIC;
    PWM_LIMIT :IN STD_LOGIC_VECTOR(display_counter downto 0);
    COUNTER_VECTOR :IN  STD_LOGIC_VECTOR(display_counter downto 0);
    number_out: OUT  STD_LOGIC 
    );
END rem_command;

ARCHITECTURE testing_reminder_command  OF  rem_command  I
    signal number : std_logic_vector(5 downto 0):="010111"; -- this is 23 in binary form 
BEGIN
        process(COUNTER_VECTOR,PWM_LIMIT,CLK_IN,number)
        BEGIN
                number <= 10 MOD number;                                                
        end process;

    number_out<=number;

END testing_reminder_command ;

我得到的错误是:

错误 (10327):rem_command.vhd(48) 处的 VHDL 错误:无法确定运算符“mod”的定义——找到 0 个可能的定义

也许我需要添加库?

标签: syntaxvhdl

解决方案


如果您确实想使用“mod”和“rem”运算符:

  • 它们未在您使用的任何包中定义。
  • FIX:使用 ieee.numeric_std.all
  • modrem不在std_logic_vector上运行。因此,您需要在std_logic_vector信号上实现类型转换

推荐阅读