- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在编写一个测试来检查 time
类型是否在各种 FPGA 供应商工具中正确合成/模拟。一种特殊情况是使用真实文字作为时间值的抽象文字,例如:1.001 us
。
IEEE 标准。 1076-2008,第 5.2.4.1 节或 IEEE 标准。 1076-1993,第 3.1.3 节,第 8 段指出:
There is a position number corresponding to each value of a physical type. The position number of the value corresponding to a unit name is the number of primary units represented by that unit name. The position number of the value corresponding to a physical literal with an abstract literal part is the largest integer that is not greater than the product of the value of the abstract literal and the position number of the accompanying unit name.
根据TIME
的定义(见16.2或14.2节),主要单位是飞秒,所以,1 us
的位置数是1,000,000,000。因此,1.001 us
的位置编号应为 1,001,000,000,这也是 1001 ns
的位置编号。因此,这两个值应该相等。
但是,当我尝试合成或模拟以下精简单元时,我得到了不同的结果。我检查过,最小时间分辨率是 1 fs 或 1 ps。
entity physical_test is
generic (
C1 : time := 1001 ns;
C2 : time := 1.001 us;
C3 : time := TIME'val(integer(real(TIME'pos(1 us)) * 1.001))
);
port (
y : out bit);
end entity physical_test;
architecture rtl of physical_test is
function f return boolean is
begin
report "C1 = " & TIME'image(C1) severity note;
report "C2 = " & TIME'image(C2) severity note;
report "C3 = " & TIME'image(C3) severity note;
return false;
end f;
constant C : boolean := f;
begin -- architecture rtl
y <= '0';
end architecture rtl;
QuestaSim (ModelSim) 是唯一报告预期结果的工具:
# ** Note: C1 = 1001000000 fs
# ** Note: C2 = 1001000000 fs
# ** Note: C3 = 1001000000 fs
但是,使用 Quartus 15.0 或 ISE 14.7 进行综合时的实际结果是:
Note: "C1 = 1001000000 fs"
Note: "C2 = 1000999999 fs"
Note: "C3 = 1001000000 fs"
因此,C2
的值不符合预期。如果我将引用的文本记为方程式,那么我将在常量 C3
中得到预期的结果。当我使用 ISE 14.7 或 Vivado 2015.4 的集成仿真器时,我得到了类似的结果:
Note: "C1 = 1001000 ps"
Note: "C2 = 1000999 ps"
Note: "C3 = 1001000 ps"
那么,Quartus/ISE/Vivado 的行为是否应该被视为错误?还是 VHDL 标准允许 1.001 us
不等于 1001 ns
?
编辑: 当我比较 1.001 ps
和 1001 fs
以及比较 1.001 ns< 时也会发生错误
到 1001 ps
。而且用C3
人工计算也是正确的,real的精度应该没有问题。
请注意,Vivado 的合成器报告了奇怪的结果:
Parameter C1 bound to: 32'b00111011101010100000110001000000 -- 1001000000
Parameter C2 bound to: 32'b10010011011101001011110001101010 -- 2473901162
Parameter C3 bound to: 32'sb00000000000000000000000000000001 -- 1
最佳答案
这是一个 float 问题,与 VHDL 关系不大。整数十进制数可以转换为二进制数,然后再转换回十进制数,而不会丢失信息(除非数字太大或太小)。小数不是这种情况。十进制数 1.001 转换为二进制是无理数。从二进制转换回十进制时,会出现舍入误差。
Quartus 和 ISE 表现出预期的行为。
在 Vivado 案例中,C2
的 MSB 发生了一些变化。似乎有符号和无符号整数之间发生了一些本不应该发生的转换。 C3
显然是四舍五入的。
您的示例可用于支持使用主要单位是最佳选择的规则。
关于vhdl - 在 VHDL 中,1.001 us 应该等于 1001 ns 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727636/
同时使用 VHDL-2019 IEEE 规范部分。 5.2.3.1.一般 "However, an implementation shall allow the declaration of any
我正在设计通用移位算术运算符。除了以下面介绍的方式使用 32 位多路复用器(解码器)之外,还有更好的方法来实现它吗? ENTITY isra IS PORT ( clk: in std_lo
描述:我正在尝试编写一个具有 4 个输入和 3 个输出的 LUT(查找表)的 vhdl 模块。我希望我的 3 位输出是一个二进制数,等于输入中 1 的个数。 我的真值表: ABCD|XYZ 0000|
我想使用 vhdl 制作幂函数,其中幂是浮点数,数字是整数(将始终为“2”)。 2^ 一些浮点数。 我使用 ieee 库和(fixed_float_types.all、fixed_pkg.all 和
是否有可能有一个通用的包? 这意味着当我实例化实体时,我提供了一些泛型,包将依赖于它。 我有一个块,我想多次使用,每次使用不同的包(即不同的参数) 我必须使用包,因为我想使用数组数组,而我只能使用包来
使用 VHDL,我希望有一些寄存器在每个寄存器中存储 16 位。 所以我发现 VHDL 有一个内置数组,我想用它在 iy 中的每个元素中存储 16 位,所以我想知道 VHDL 是否将此数组映射到实际寄
在 vhdl 中我可以定义我自己的枚举类型并创建这种类型的信号: type tp is (red,green,blue,yellow); signal sg: tp := red; 但现在我想要一个
我是 VHDL 的新手。 有一行,如下所示: constant TIME_DELTA : time := 100 ns; 这是什么字time在行吗?是不是和integer一样的数据类型?当我在互联网上
A <= 3 * B; 上面语句中的3是一个整数或自然数。如果它是自然数,如果我在那里使用负数怎么办? VHDL 是否将其识别为整数? 最佳答案 整数文字属于匿名预定义类型universal_inte
我为以下 vhdl 代码编写了测试平台: library ieee; USE ieee.std_logic_1164.all; ---USE ieee.std_logic_unsigned.all;
我有使用 Verilog/SystemVerilog 的经验,但我是 VHDL 新手,我试图弄清楚何时应该使用组件实例化或实体实例化。我所说的组件实例化是指在实例化实体组件之前声明实体组件的传统方式。
我一直无法理解如何在 VHDL 中取消引用指针。 我想到的是一个 C 代码,如: int a; int* ptr_a; a = 42; ptr_a=&a; *ptr_a=451;/
我为以下 vhdl 代码编写了测试平台: library ieee; USE ieee.std_logic_1164.all; ---USE ieee.std_logic_unsigned.all;
我想知道VHDL中是否定义了整数溢出。我在 2002 年规范中找不到任何内容。 作为示例(注意,这可能无法编译,它只是一个通用示例...): entity foo is port ( clk
如何组合/捆绑语句以供进一步使用和更好地处理?例如,像这样的一些赋值会在以后的例程调用中多次使用。 ADDR_PC '0'); constant OP_NOP: std
我正在编写一个 IP 核,根据用户选择的通用参数,并非所有 OUT/IN 端口都是必需的。是否可以有可选端口?我知道类似的事情应该是可能的,因为当我使用 Xilinx IP-Cores 时,根据参数,
我有一个数组: type offsets_type is array (4 downto 0) of std_logic_vector (4 downto 0); signal av : of
type有什么区别和 subtype在 VHDL 中,我应该在哪里使用它们? 我的理解是subtype只是主要类型之一的缩小版本,例如 integer :subtype small_integer i
我试图更好地使用 VHDL protected 类型,所以我将以下测试放在一起(当然只是为了说明 - 我的实际用例要复杂得多): type prot_type1 is protected proc
首先,我想声明这是我参加的模拟考试。我知道答案是:cout = 4ns,S = 7ns。只是在寻找一点解释。提前致谢。 对于下面所示的全加器的 VHDL 实现,输出 cout 和 S 何时稳定在它们的
我是一名优秀的程序员,十分优秀!