- 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/
假设a是张量,那么有什么区别: 类型(a) a.类型 a.type() 我找不到区分这些的文档。 最佳答案 type 是 python 内置方法。 它将返回对象的类型。喜欢 torch.Tensor.
什么是 Type 1 的居民的例子?两者都不是 Type也不是Type的居民?在 Idris REPL 中进行探索时,我无法想出任何东西。 更准确地说,我正在寻找一些 x除了 Type产生以下结果:
我找到了一些资源,但我不确定我是否理解。 我找到的一些资源是: http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb2ff3358411d1829f00
这两个函数原型(prototype)有什么区别? void apply1(double(f)(double)); void apply2(double(*f)(double)); 如果目标是将提供的函
http://play.golang.org/p/icQO_bAZNE 我正在练习使用堆进行排序,但是 prog.go:85: type bucket is not an expression
假设有一个泛型定义的方法信息对象,即一个方法信息对象,这样的方法Info.IsGenericMethodDefinition==TRUE:。也可以说它们也有一个泛型参数列表:。我可以使用以下命令获取该
在具有依赖类型的语言中,您可以使用 Type-in-Type 来简化语言并赋予它很多功能。这使得语言在逻辑上不一致,但如果您只对编程感兴趣而不对定理证明感兴趣,这可能不是问题。 在 Cayenne
根据 Nim 手册,变量类型是“静态类型”,而变量在内存中指向的实际值是“动态类型”。 它们怎么可能是不同的类型?我认为将错误的类型分配给变量将是一个错误。 最佳答案 import typetrait
假设您有以下结构和协议(protocol): struct Ticket { var items: [TicketItem] = [] } struct TicketItem { } prot
我正在处理一个 EF 问题,我发现它很难调试...以前,在我的系统中有一个表类型继承设置管理不同的用户类型 - 所有用户共有的一种根类型,以及大致基于使用该帐户的人员类型的几种不同的子类型。现在,我遇
这是我的 DBManager.swift import RealmSwift class DBManager { class func getAllDogs() -> [Dog] {
我正在尝试使用傅里叶校正图像中的曝光。这是我面临的错误 5 padded = np.log(padded + 1) #so we never have log of 0 6 g
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
请考虑以下设置: protocol MyProcotol { } class MyModel: MyProcotol { } enum Result { case success(value:
好吧,我将我的 python 项目编译成一个可执行文件,它在我的电脑上运行,但我将它发送给几个 friend 进行测试,他们都遇到了这个错误。我以前从未见过这样的错误。我使用 Nuitka 来编译代码
当我尝试训练我的模型时"ValueError: Type must be a sub-type of ndarray type"出现在 line x_norm=(np.power(x,2)).sum(
我尝试在另一个类中打断、计数然后加入对象。所以我构建协议(protocol): typealias DataBreaker = () -> [Double] typealias DataJoiner
我正在使用 VS 2015 更新 3、Angular 2.1.2、Typescript 2.0.6 有人可以澄清什么是 typings 与 npm @types 以及本月很难找到的任何其他文档吗? 或
我正在考虑从 VS2010 更改为 Mono,因此我通过 MoMA 运行我的程序集,看看我在转换过程中可能遇到多少困难。在生成的报告中,我发现我不断收到此错误: bool Type.op_Equali
主要问题 不太确定这是否可能,但由于我讨厌 Typescript 并且它使我的编码变得困难,我想我会问只是为了确定。 interface ISomeInterface { handler: ()
我是一名优秀的程序员,十分优秀!