【问题标题】:VHDL: Comparing a big vector to value and assigning valuesVHDL:将大向量与值进行比较并分配值
【发布时间】:2018-09-12 07:42:51
【问题描述】:

我想比较一个 32 位的向量。例如

bit_vector:在std_logic_vector(0到31)中; ... if ( bit_vector /= zero) then .... -- 这里我要检查它是否为零。

用什么来代替“zero”?任何紧凑的格式?

我想我们会写 if ( bit_vector /= x'0') ? -- 不确定

请解释一下如何在这里检查?如果我想为任何其他信号分配一些初始值,那么方法是什么。例如

信号 some_signal : std_logic_vector(0 到 31) := ??? --- 我想知道“00000000110000010101010100000000”以外的选项。

感谢和欢呼

塔希尔

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    你的问题的第一部分可以这样写:

    if bit_vector /= (bit_vector'range=>'0') then
    

    第二部分的一些例子:

    ...
    use ieee.numeric_std.all;
    ...
    
    signal some_signal : std_logic_vector(0 to 31) := x"00000000";
    signal some_signal : std_logic_vector(0 to 31) := "00000000_00000000_00000000_00000000";
    signal some_signal : std_logic_vector(0 to 31) := (3=>'1', 17=>'1', others=>'0');
    signal some_signal : std_logic_vector(0 to 31) := std_logic_vector(to_unsigned(123456789, 32));
    

    【讨论】:

    • 如果我想用十进制数字等值怎么办?
    • @tahirsengine 在这种情况下使用 IEEE 包 numeric_std。我更新了我的答案。
    • 谢谢。实际上我想测试一个十进制的值。例如查看语句 if a_variable = 8d"5" then ...。现在当我输入数据时,ide 抱怨这仅在 VHDL 2008 中可用。那么,我们是这种情况下的解决方法吗?
    • @tahirsengine 将您的 IDE 切换到 VHDL-2008 或尝试类似 to_unsigned(5, 8)。
    • 使用 VHDL-2008,您还可以编写 := 32d"123456789";,它将 123456789 作为 d 十进制值并扩展为 32 位。其他修饰符是 binary、octal 和 hexdecimal。您应该在downto 方向使用向量。
    猜你喜欢
    • 2021-11-19
    • 2016-08-12
    • 2021-09-15
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多