【问题标题】:If-statements in VHDL: nested vs. multiple conditionsVHDL 中的 If 语句:嵌套与多个条件
【发布时间】:2018-12-11 10:21:58
【问题描述】:

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

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;

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

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

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

我对 VHDL 相当陌生(刚毕业),非常感谢您的帮助。谢谢:)

【问题讨论】:

    标签: if-statement vhdl fpga timing synthesis


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的快速回复! ...最后您提到所有比较都可以并行进行。我也意识到了这一点,但我能影响它吗?该工具实际上是使用我的代码中的选项 1 执行此操作,还是像选项 2 中那样按顺序进行比较?
    • 选项 2 中的嵌套 if 将(很可能)转换为与选项 1 中带有 and 的单个 if 相同的实现。但是,不要相信我的话...继续自己在工具中尝试,并在原理图中检查创建的设计...这是了解工具如何工作以及基于高级 RTL 的实现方式的好方法 :-D
    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2019-12-31
    • 1970-01-01
    相关资源
    最近更新 更多