gpt4 book ai didi

VHDL : nested vs. 多个条件中的 If 语句

转载 作者:行者123 更新时间:2023-12-04 17:42:47 25 4
gpt4 key购买 nike

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

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 位比较(实际上是减法)在上述频率下远非时序关键。另请注意,所有比较都可以并行进行,因为比较是独立的。

关于VHDL : nested vs. 多个条件中的 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com