gpt4 book ai didi

vhdl - 什么是{globally|locally} static {primary|expression|range|subexpression} 它是什么意思?

转载 作者:行者123 更新时间:2023-12-05 07:20:43 25 4
gpt4 key购买 nike

在 SO 上发现了很多问题,这些问题涉及关于非本地全局静态的错误消息或警告。

有很多关于如何消除此类错误消息的问题,但令人惊讶的是,似乎没有人问过static 的真正含义。

IEEE 标准在 §9.4 中谈到了静态表达式,但是这个定义不容易理解(因为它是递归的,而且 - 有趣的是 - 因此看起来是静态的 根据定义本身)。

认为如果有一个 SO 问题可以在一个地方回答static 在 VHDL 中真正意味着什么的所有含义,那将是很有值(value)的。

最佳答案

如上面的评论所述,静态表达式 基本上是可以在编译时完全评估的东西(在设计单元的编译过程中它被定义在 - 而不是据说局部静态 - 或者在评估整个设计期间使其全局静态)。

这基本上使一个静态表达式在求值(“编译”)后成为常量。与 C++ 中的 constexpr 非常相似。

这对合成有什么影响?

一个有趣的用法是 - 考虑标准第 9.4 章中看起来无辜的脚注:

全局静态表达式的规则意味着声明的常量或泛型可以用不是全局静态的表达式,例如,调用不纯函数。得到的常量值可能是全局静态,即使它的初始值表达式不是。仅接口(interface)常量、变量和信号声明要求它们的初始值表达式是静态表达式。

您实际上可以使用不可综合的 VHDL 语句(例如,指针或实数),只要它们满足静态要求,即可以在编译时完全评估为可综合结构时间:

architecture rtl of sintab is
type sinus_table_type is array(natural range <>) of signed(31 downto 0);
function sinus_table(start_value, end_value, step : real) return sinus_table_type is
constant table_size : natural :=
integer(ieee.math_real.ceil(
end_value - start_value) / step);
variable sintab : sinus_table_type(0 to table_size - 1);
begin
for i in sintab'low to sintab'high loop
sintab(i) := to_signed(integer(
ieee.math_real.sin(start_value + real(i) * step) *
32767.0), sintab(i)'length);
end loop;
return sintab;
end function sinus_table;

function isin(sintab : sinus_table_type; us : signed) return signed is
variable ret : signed(us'range);
begin
ret := sintab(to_integer(us mod sintab'length));
return ret;
end function isin;

constant PI : real := 3.1415926;
constant stab : sinus_table_type := sinus_table(0.0, 2.0 * PI, 0.01);
begin
calc : process
begin
wait until rising_edge(clk);
res <= isin(stab, arg);
end process calc;
end architecture rtl;

在上面的例子中,不可综合的表达式(使用 ieee.math_real,一般不可综合),被用来构造一个常量数组的缩放signed值作为查找表,满足 static 的要求,因为这些表达式可以在编译时完全评估。

关于vhdl - 什么是{globally|locally} static {primary|expression|range|subexpression} 它是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57387726/

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