Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
4位幅度比较器VHDL_Vhdl_Comparator_Magnitude - Fatal编程技术网

4位幅度比较器VHDL

4位幅度比较器VHDL,vhdl,comparator,magnitude,Vhdl,Comparator,Magnitude,我必须用VHDL语言制作一个4位的幅度比较器,它只有并发语句(没有if/else或case/when) IEEE库; 使用IEEE.STD_LOGIC_1164.ALL; 实体练习是 端口(A:标准逻辑向量(3到0); B:标准逻辑向量(3到0); Ag:输出标准逻辑; Bg:输出标准逻辑; AeqB:输出标准逻辑 ); 结束练习; 练习的架构比较器是 开始 Ag B)否则为“0”; Bg A)其他“0”--问题:这里如果我算出B=“ZZZZ”,Bg是1,如果B>A AeqB一般情况下,您

我必须用VHDL语言制作一个4位的幅度比较器,它只有并发语句(没有if/else或case/when)

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体练习是
端口(A:标准逻辑向量(3到0);
B:标准逻辑向量(3到0);
Ag:输出标准逻辑;
Bg:输出标准逻辑;
AeqB:输出标准逻辑
);   
结束练习;
练习的架构比较器是
开始
Ag B)否则为“0”;
Bg A)其他“0”--问题:这里如果我算出B=“ZZZZ”,Bg是1,如果B>A

AeqB一般情况下,您可以使用
to_01
功能将std_逻辑可采用的各种值“转换”为
0
1
。我认为它在IEEE的软件包
数字标准
库中;
library IEEE;

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

    entity comp_4 is
    port (  A:IN STD_LOGIC_VECTOR(0 to 3);
        B:IN STD_LOGIC_VECTOR(0 to 3);
        ET:OUT STD_LOGIC;
        GT:OUT STD_LOGIC;
        LT:OUT STD_LOGIC);

    end comp_4;

    architecture dataflow of comp_4 is

    begin
    with A-B(0 to 3) select

    ET <=   '1' when "0000",
        '0' when others;

    with A > B select

    GT <=   '1' when true,
        '0' when others;

    with A < B select

    LT <=   '1' when true,
        '0' when others;

    end dataflow;
使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.STD_LOGIC_ARITH.ALL; 使用IEEE.STD_LOGIC_UNSIGNED.ALL; 实体comp_4为 端口(A:标准逻辑向量(0到3); B:标准逻辑向量(0到3); ET:输出标准逻辑; GT:输出标准逻辑; LT:输出标准(U逻辑); 结束comp_4; comp_4的体系结构数据流是 开始 使用A-B(0到3)选择 ET B选择
GT如果你对量值的定义是通常的算术定义,那么你最好使用数值_std,它会将你的向量视为数值数据。然后,您必须确定它们是有符号的还是无符号的数字,并分别声明它们为
有符号的
无符号的
(或执行适当形式的类型转换)。通常,通过使用包数字\u std\u unsigned(-2008),可以将std\u逻辑\u向量视为无符号的,它对各种运算符(包括关系运算符)使用带有类型转换为无符号的数值_std调用。这是元值和二进制值之间的冲突,如果任一操作数包含元值,则numeric_std将其解析为FALSE。默认运算符(本例中为IEEE Std 1076-2008 9.2.3关系运算符)在枚举的Std_ulogic类型定义中是纯位置顺序,并且“Z”的位置高于“1”或“0”。许多工具仍然缺乏VHDL2008支持,包括Xilinx,因此,您可能还不想使用numeric_std_unsigned。我编写的代码试图使用with-select-when语句对4位比较器进行建模。实体定义非常简单。
library IEEE;

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

    entity comp_4 is
    port (  A:IN STD_LOGIC_VECTOR(0 to 3);
        B:IN STD_LOGIC_VECTOR(0 to 3);
        ET:OUT STD_LOGIC;
        GT:OUT STD_LOGIC;
        LT:OUT STD_LOGIC);

    end comp_4;

    architecture dataflow of comp_4 is

    begin
    with A-B(0 to 3) select

    ET <=   '1' when "0000",
        '0' when others;

    with A > B select

    GT <=   '1' when true,
        '0' when others;

    with A < B select

    LT <=   '1' when true,
        '0' when others;

    end dataflow;