VHDL 中的 If 语句:嵌套与多个条件

If-statements in VHDL: nested vs. multiple conditions

这是我的代码的样子...(我知道它不能编译,它只是伪代码。)

signal  lowBound        :   std_logic_vector(15 downto 0);
signal  highBound       :   std_logic_vector(15 downto 0);
signal  result_01       :   std_logic_vector(15 downto 0);
signal  result_02       :   std_logic_vector(15 downto 0);
signal  result_03       :   std_logic_vector(15 downto 0);

...
p_state_machine: process(RESET, CLK)
    if (RESET = '1') then
        ...
    elsif (rising_edge(CLK_I)) then
        case currentState is
            when ...
            ...
            when OUTPUT =>
                -- check if results are within interval bounds
                -- option 1
                if ((result_01 > lowBound) AND (result_02 > lowBound) AND (result_03 > lowBound) AND ...) then
                    ...
                end if;

                -- option 2
                if ((result_01 > lowBound) then
                    if ((result_02 > lowBound) then
                        if ((result_03 > lowBound) then
                            ...
                        end if;
                    end if;
                end if;
        end case;
    end if;
end process;

如您所见,我有一个状态机,并希望在最后一个状态 'OUTPUT' 中输出结果 1-3,但前提是它们在给定的区间范围内。所以现在我有 6 个条件需要检查。如果都为真我输出结果1-3;如果至少有一个为假,我想设置一个错误标志。

我正在使用 25MHz 的 Xilinx 电路板,但我希望有一个能够处理更高频率的稳健设计。

现在我的问题是...检查结果 1-3 是否在给定范围内的最佳方法是什么? 1. 我知道有多种选择,但哪个是最好的,尤其是在考虑时机的时候? 2. 我的代码中的选项 1 和 2 转换为相同的硬件还是有区别? 3. 因为我正在处理 16 位向量,所以在单独(并行)进程中检查状态机之外的这些条件对我来说是否更好? (我想有 6 个嵌套的 16 位比较可能会导致时序问题!?)

我是 VHDL 的新手(刚毕业),非常感谢您的帮助。谢谢:)

在大多数设计中,挑战在于编写功能正确的代码,因此满足时序目标是微不足道的。对于频率为 25 MHz 且倍率为 6-10 以上的设计,使用您展示的代码,无论您如何编写,设计通常无需任何特殊努力即可满足时序要求。

因此,请编写易于阅读和审查的代码,并让工具处理实现所需的频率。在工程方面,这对于非关键代码来说是一种很好的方法,因为它可以让您腾出时间用于设计的关键部分。

对于你提出的是否在流程外提出条件的问题,那么时间上是没有关系的。如果该工具不对相同结果重复使用比较结果,而是对每个结果进行单独比较,则可能会稍微减小大小。但同样,在现代 FPGA 中,用 > 进行 16 位比较(实际上是减法)在上述频率下远非时序关键。另请注意,所有比较都可以并行进行,因为比较是独立的。