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

3

以下是我的代码,虽然它不能编译,但这只是伪代码。

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还比较新(刚刚毕业),非常感谢您的帮助。谢谢 :)
1个回答

1
在大多数设计中,挑战在于编写功能正确的代码,因此达到时序目标是微不足道的。对于25 MHz及以上的设计,并且使用像您展示的那样的代码,无论您如何编写它,该设计通常都会在没有任何特殊努力的情况下满足时序。
因此,编写易于阅读和审查的代码,并让工具处理实现所需的频率是一个好的工程方法,适用于非关键代码,因为它释放了您在设计的关键部分的时间。
对于您是否要在进程外设置条件的问题,从时序角度来看并不重要。如果工具不为相同的结果重复使用比较结果而是为每个结果实现单独的比较,则可能会稍微减小大小。但是,在现代FPGA中,使用“>”进行16位比较(实际上是减法)远非在提到的频率下具有时序关键性。还要注意,所有比较都可以并行进行,因为比较是独立的。

谢谢您的快速回复!最后您提到所有比较都可以并行完成。我也意识到了,但我能影响吗?工具是否会使用我的代码中的选项1并行执行比较,还是像选项2一样按顺序执行比较? - matzeBurger
选项2中的嵌套if很可能会转换为与选项1中带有and的单个if相同的实现。但是,不要只听我的话...请自己在工具中尝试,并检查原理图中创建的设计...这是学习工具如何工作以及实现基于高级RTL的方法的非常好的方式 :-D - Morten Zilmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接