VHDL交换两个值

VHDL交换两个值,vhdl,swap,Vhdl,Swap,我想交换input0和input1的值,然后输出较小的值。当我在Modelsim中模拟我的项目时,信号输出的波形是红线。我犯了什么错 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity MF is port (clk : in std_logic; input0: in std_logic_vector(2 downto 0); input1: i

我想交换
input0
input1
的值,然后输出较小的值。当我在Modelsim中模拟我的项目时,信号输出的波形是红线。我犯了什么错

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

entity MF is
    port (clk : in std_logic;
          input0: in std_logic_vector(2 downto 0);
          input1: in std_logic_vector(2 downto 0));
end MF;

architecture Behavioral of MF is
    signal bubble0: std_logic_vector(2 downto 0);
    signal bubble1: std_logic_vector(2 downto 0);                               

begin
    bubble0 <= input0;               
    bubble1 <= input1;
    output <= bubble0;                        -- my output
    process(clk)
    begin
        if rising_edge(clk) then
             if bubble0 > bubble1 then        -- swap
             bubble1 <= bubble0;
             bubble0 <= bubble1;
             end if;                                        
        end if;
    end process;
end Behavioral;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体MF是
端口(时钟:在标准逻辑中;
输入0:标准逻辑向量(2到0);
输入1:在标准逻辑向量中(2到0);
结束MF;
MF的行为体系结构
信号气泡0:标准逻辑向量(2到0);
信号气泡1:标准逻辑向量(2到0);
开始
bubble0我发现了几个问题:

1) 您正在异步地和在进程内部为bubble0和bubble1赋值(这是一场“总线大战”)每个信号上有一个以上的驱动程序,这在VHDL中是合法的,但您必须知道自己在做什么…通常这是用来制作三态总线的,但您的两个分配都在不断地驱动信号,这可能会在解析信号时导致“未定义”状态)

2) 在进程内部的if语句的所有情况下,都没有为bubble0和bubble1赋值

3) 不能直接比较两个std_logic_矢量值的数值大小,首先需要将它们转换为适当的数值类型(如有符号或无符号)

目前尚不清楚您希望您的输出如何运行,但可能类似以下内容会让您走得更远……这会在时钟的每个上升沿适当地更新气泡信号:

begin
    output <= bubble0;                        -- my output
    process(clk)
    begin
        if rising_edge(clk) then
             if unsigned(input0) > unsigned(input1) then        -- swap
                 bubble1 <= input0;
                 bubble0 <= input1;
             else
                 bubble0 <= input0;               
                 bubble1 <= input1;
             end if;                                        
        end if;
    end process;
end Behavioral;
开始
输出无符号(input1)然后--交换
气泡1