- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以向我解释 VHDL 的 to_unsigned 是如何工作的,或者确认我的理解是正确的吗?例如:
C(30 DOWNTO 0) <= std_logic_vector (to_unsigned(-30, 31))
这是我的理解:
最佳答案
在 IEEE 包 numeric_std 中,TO_UNSIGNED
的声明:
-- Id: D.3
function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED;
-- Result subtype: UNSIGNED(SIZE-1 downto 0)
-- Result: Converts a non-negative INTEGER to an UNSIGNED vector with
-- the specified SIZE.
您不会找到带有声明为整数类型的参数或大小的已声明函数 to_unsigned。后果是什么?
让我们把它放在 Minimal, Complete, and Verifiable example 中:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity what_to_unsigned is
end entity;
architecture does of what_to_unsigned is
signal C: std_logic_vector (31 downto 0);
begin
C(30 DOWNTO 0) <= std_logic_vector (to_unsigned(-30, 31));
end architecture;
VHDL 分析器会给我们一个错误:
ghdl -a what_to_unsigned.vhdl
what_to_unsigned.vhdl:12:53: static constant violates bounds
ghdl: compilation error
并告诉我们 -30(第 12 行:字符 53)越界。这意味着在这种情况下,转换为 universal_integer 的数字文字不会在函数 to_unsigned
中转换为类型 natural
。
不同的工具可能会以更图形化的方式告诉我们:
nvc -a what_to_unsigned.vhdl
** Error: value -30 out of bounds 0 to 2147483647 for parameter ARG
File what_to_unsigned.vhdl, Line 12
C(30 DOWNTO 0) <= std_logic_vector (to_unsigned(-30, 31));
^^^
并且实际上告诉我们在源代码中发现错误的位置。
可以肯定地说,您认为 to_unsigned 所做的与分析器认为的不同。
VHDL 是一种强类型语言,您试图为 IEEE 包中声明的函数 TO_UNSIGNED
中的参数 ARG
提供一个值以放置该值超出范围的位置numeric_std.
NATURAL 类型在包标准中声明,并通过推断声明库 std 使其可见;使用 std.standard.all;在上下文子句中。 (参见 IEEE Std 1076-2008,13.2 设计库):
Every design unit except a context declaration and package STANDARD is assumed to contain the following implicit context items as part of its context clause:
library STD, WORK; use STD.STANDARD.all;
在 16.3 Package STANDARD 中发现的 natural 声明:
subtype NATURAL is INTEGER range 0 to INTEGER'HIGH;
声明为 NATURAL 的值是 INTEGER 的子类型,具有不包括负数的受限范围。
在这里,您可以看到您有能力通过访问符合 VHDL 标准的工具并引用 IEEE Std 1076-2008,IEEE 标准 VHDL 语言引用手册来回答这个问题。
TL:DR;详情
您可能会注意到 9.4 静态表达式、9.4.1 常规允许在分析期间评估局部静态表达式:
Certain expressions are said to be static. Similarly, certain discrete ranges are said to be static, and the type marks of certain subtypes are said to denote static subtypes.
There are two categories of static expression. Certain forms of expression can be evaluated during the analysis of the design unit in which they appear; such an expression is said to be locally static. Certain forms of expression can be evaluated as soon as the design hierarchy in which they appear is elaborated; such an expression is said to be globally static.
可能有一些符合标准的工具在分析期间不会评估本地静态表达式。 “可以”是允许的而不是强制的。上述代码示例中演示的两个 VHDL 工具利用了该权限。在这两个工具中,命令行参数 -a 告诉工具分析提供的文件,如果成功,则将其插入当前工作库(默认为 WORK,请参阅 13.5 分析顺序,13.2 设计库)。
在详细说明局部静态表达式时评估边界检查的工具通常是纯粹解释性的,甚至可以通过单独的分析过程来克服。
VHDL 语言可用于在附件 D 指定的范围内的正式证明中使用的设计模型的正式规范 潜在不可移植的构造以及仅依赖纯函数时(参见 4.Subprograms and包,4.1 概述)。
VHDL 兼容工具保证提供相同的结果,尽管没有错误消息的标准化,也没有对工具实现方法的限制。
关于type-conversion - to_unsigned 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264066/
我有一个关于 JavaScript 语法的问题。实际上,我在自学 MEAN 堆栈教程时想出了编码(https://thinkster.io/mean-stack-tutorial#adding-aut
在我的书中它使用了这样的东西: for($ARGV[0]) { Expression && do { print "..."; last; }; ... } for 循环不完整吗?另外,do 的意义何
我已经编写了读取开关状态的代码,如果按 3 次 # 则退出。 void allkeypadTest(void) { static uint8_t modeKeyCount=0; do
因此,对于上周我必须做的作业,我必须使用 4 个 do-while 循环和 if 语句在 Java 中制作一个猜谜游戏。我无法成功完成它,类(class)已经继续,没有为我提供任何帮助。如果有人可以查
int i=1,j=0,n=10,k; do{ j+=i; i<<1; printf("%d\n",i); // printf("%d\n",12<<1); }while
此代码用于基本杂货计算器的按钮。当我按下按钮时,一个输入对话框会显示您输入商品价格的位置。我遇到的问题是我无法弄清楚如何获得 do ... while 循环以使输入对话框在输入后弹出。 我希望它始终恢
当我在循环中修改字符串或另一个变量时,它的条件是否每次都重新计算?或者在循环开始前一次 std::string a("aa"); do { a = "aaaa"; } while(a.size<10)
我刚刚写了这个,但我找不到问题。我使用代码块并编写了这个问题 error: expected 'while' before '{' token === Build finished: 1 errors
do { printf("Enter number (0-6): ", ""); scanf("%d", &Num); }while(Num >= 0 && Num 表示“超过”,<表
我有一个包含 10 个项目的 vector (为简单起见,所有项目都属于同一类,称其为“a”)。我想要做的是检查“A”不是 a) 隐藏墙壁或 b) 隐藏另一个“A”。我有一个碰撞函数可以做到这一点。
嗨,这是我的第二个问题。我有下表 |-----|-------|------|------| |._id.|..INFO.|.DONE.|.LAST.| |..1..|...A...|...N..|.
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicates: Why are there sometimes meaningless do/while and if/e
来自 wikibook在 F# 上有一小部分它说: What does let! do?# let! runs an async object on its own thread, then it i
我在 Real World Haskell 书中遇到了以下函数: namesMatching pat | not (isPattern pat) = do exists do
我有一个类似于下面的用例,我创建了多个图并使用 gridExtra 将它们排列到一些页面布局中,最后使用 ggsave 将其保存为 PDF : p1 % mutate(label2
当我使用具有 for 循环的嵌套 let 语句时,如果没有 (do (html5 ..)),我将无法运行内部 [:tr]。 (defpartial column-settings-layout [&
执行 vagrant up 时出现此错误: anr@anr-Lenovo-G505s ~ $ vagrant up Bringing machine 'default' up with 'virtua
# ################################################# # Subroutine to add data to the table Blas
我想创建一个检查特定日期格式的读取主机。此外,目标是检查用户输入是否正确,如果不正确,则提示应再次弹出。 当我刚接触编程时,发现了这段代码,这似乎很合适。我仍然在努力“直到” do {
我关注这个tutorial在谷歌云机器学习引擎上进行培训。我一步一步地跟着它,但是在将 ml 作业提交到云时我遇到了错误。我运行了这个命令。 sam@sam-VirtualBox:~/models/r
我是一名优秀的程序员,十分优秀!