整数到字符串在综合中出错(宽度不匹配)

2023-11-30

我正在尝试将整数转换为字符串(使用integer'image(val))并将其填充或限制为特定长度。我已经制作了这个函数,当我使用时它可以很好地完成工作report陈述并模拟。

function integer2string_pad(val: integer; stringSize: integer) return string is
    variable imageString: string(1 to integer'image(val)'length);
    variable returnString: string(1 to stringSize);
begin
    imageString := integer'image(val);

    -- Are we smaller than the desired size?
    if integer'image(val)'length < stringSize then
        -- Pad the string if we are
        returnString := integer'image(val) & (1 to stringSize-integer'image(val)'length => ' ');

    -- Are we to big for the desired size
    elsif integer'image(val)'length > stringSize then
        -- Only use the top most string bits and append a "." to the end signifing that there is more
        returnString := imageString(1 to stringSize-1) & ".";

    -- Otherwise we are just the right size
    else
        returnString := integer'image(val);
    end if;


    return returnString;
end function;

这是该函数的一些示例输入和输出(下划线 = 空格,因为 SO 内联代码截断了额外的空格):

integer2string_pad(12, 6) : 12____

integer2string_pad(123456, 6) : 123456

integer2string_pad(1234567890, 6) : 12345.

integer2string_pad(0, 6) : 0_____

integer2string_pad(-123, 6) : -123__

integer2string_pad(-1, 6) : -1____

integer2string_pad(-123456, 6) : -1234.


但是当我合成的时候,我在分配值的所有 4 行上遇到宽度不匹配错误pongScoreLeft or pongScoreRight。它还表示它们的常量值为 0 并被修剪掉。

Width mismatch. <pongScoreLeft> has a width of 48 bits but assigned
expression is 6-bit wide. 
Width mismatch. <pongScoreRight> has a width
of 48 bits but assigned expression is 6-bit wide.
Width mismatch. <pongScoreLeft> has a width of 48 bits but assigned expression is 6-bit wide.
Width mismatch. <pongScoreRight> has a width of 48 bits but assigned expression is 6-bit wide.

产生这些宽度不匹配错误的 VHDL:

type type_score is
record
    left : integer range 0 to 255;
    right : integer range 0 to 255;
end record;
constant init_type_score: type_score := (left => 0, right => 0);

signal pongScore: type_score := init_type_score;
signal pongScoreLeft: string(1 to 6) := (others => NUL);
signal pongScoreRight: string(1 to 6) := (others => NUL);

...

scoreToString: process(clk)
begin
    if rising_edge(clk) then
        if reset = '1' then
            pongScoreLeft <= (others => NUL);
            pongScoreRight <= (others => NUL);
        else
            pongScoreLeft <= integer2string_pad(pongScore.left, 6);
            pongScoreRight <= integer2string_pad(pongScore.right, 6);
            --report "|" & integer2string_pad(pongScore.left, 6) & "|";

        end if;
    end if;
end process;

我的怎么了integer2string_pad功能?合成过程中出了什么问题?


我不希望综合支持“图像”或“值”——除了在精化时运行的断言中。它们将涉及大量处理。

每当我将整数转换为 ASCII 时,我都会使用字符'val 和字符'pos 一次处理一个字符,它们是可合成的,因为它们不涉及任何处理;他们只是将字符与其底层二进制表示形式相互转换。

编辑: 想想你将如何实现“形象!”它涉及除以 10 的多次:如果将其展开为单个增量周期(根据非时钟函数调用的语义所要求),这将需要大量的硬件

每个(几个)时钟周期处理一个数字,您可以将其减少为单次除法、连续减法或超 6 加法,或者根据您的硬件资源和时间预算以您想要的方式进行处理。

让综合工具代表您做出这些决定确实没有意义。因此,虽然我承认这在理论上是可能的,但如果看到一个合成工具能够正确地完成它,我会感到惊讶。 (OTOH,这是一种不太可能的情况,如果您尝试一下,我不会惊讶地看到合成工具的错误报告中的错误)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整数到字符串在综合中出错(宽度不匹配) 的相关文章

  • 使用格式模板解析字符串?

    如果我可以使用格式化字符串 string Format my 0 template 1 here 1 2 我可以反转该过程 我提供模板和填充的字符串 net 返回 arg0 arg1 等 没有优雅的方法来反转格式化的字符串 但如果你想要一个
  • 是否有与 f 字符串语法等效的可调用函数?

    每个人都喜欢 Python 3 6 的新 f 字符串 In 33 foo blah bang In 34 bar blah In 35 f foo bar Out 35 bang 然而 虽然在功能上非常相似 但它们的语义并不完全相同str
  • android 以编程方式在单选组按钮之间添加填充

    我有一个 xml 格式的单选组 按钮是通过编程生成的 如何以编程方式添加按钮之间的间距 我以为是这样的LayoutParams但我的对象没有明显的setPadding or setMargins方法 这就是我正在尝试的 RadioButto
  • 用 ruby​​ 中的数组内容替换字符串?

    String Test string Test array link1 link2 如何替换这样的字符串 输出应该是String link1 string link2 字符串 gsub 可以返回一个枚举器 所以这很简单 string gsu
  • 当将utf-8编码的字符串从字节转换为字符时,计算机如何知道字符在哪里结束?

    给定一个以 UTF 8 编码的 Unicode 字符串 它只是内存中的字节 如果计算机想要将这些字节转换为其相应的 Unicode 代码点 数字 它如何知道一个字符在哪里结束 另一个字符在哪里开始 有些字符用 1 个字节表示 有些字符最多用
  • 从数组中提取值并将其转换为字符串的最佳方法是什么(允许 ES6)?

    我正在尝试采用这样的数组 location Id 000 000 Name Foo Id 000 001 Name Bar etc 提取 Id 并将它们组合成单个字符串 同时在每个值前面附加一个静态字符串 myId 的最有效 最干净的方法是
  • 如何逐行解析文本区域中的用户输入

    如果我有一个包含文本信息的变量 比如从文本区域获取 如何逐行读取字符串变量中保存的文本内容 在文本区域中输入的文本将以 n 输入键 来分隔行 您可以使用StringReader http msdn microsoft com en us l
  • 如何在 Javascript 中附加或连接字符串?

    所以我试图添加到一个字符串 但它显示为空 var DNA TAG var mRNA m RNA function check a b string if string a mRNA concat b function m RNA conso
  • String.Format 小数,带有千位分隔符和强制小数位

    我想String Format小数 使其同时具有千位分隔符和强制小数位 3 例如 Input 123456 12 78545 8 Output 123 456 120 78 545 800 我努力了 String Format 0 0 0
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 不使用 length() 方法的字符串长度[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在不使用字符串的情况下找到字符串的长度length String类的方法 str toCharArray length应该管用 或者怎么
  • 是否有用于 C 字符串的标准 C++ 迭代器?

    有时我需要使用通用 C 迭代器范围接口将 C 字符串传递给函数 first last 是否有针对这些情况的标准 C 迭代器类 或者无需复制字符串或调用的标准方法strlen 编辑 我知道我可以使用指针作为迭代器 但我必须知道字符串在哪里结束
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab
  • 检查给定字符串是否等于给定字符串集中的至少一个字符串的有效方法

    给定一组字符串 比如说 String1 String2 StringN C 中确定最有效的方法是什么 返回true or false 是否给定string s匹配上面集合中的任何字符串吗 Boost Regex 可以用于此任务吗 std u
  • 为什么上升沿优于下降沿

    触发器 寄存器 通常由上升沿或下降沿触发 但大多数情况下 您会在代码中看到使用上升沿触发的 if 子句 事实上 我从未见过有下降沿的代码 这是为什么 是因为程序员自然而然地使用上升沿 因为他们习惯了 还是因为某些物理 模拟定律 事实 上升沿
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset

随机推荐

  • 使用“键盘”在失焦时打开新窗口

    我正在尝试使用模块 键盘 来跟踪我的按键 而 PySide2 小部件未处于焦点状态 效果很好 但是 当我尝试使用 键盘 快捷方式创建新的小部件时 程序崩溃了 按下按钮打开一个窗口效果很好 我还可以使用 键盘 调用非 UI 功能 例如 打印功
  • 如何在jquery中添加id?

    我在 jquery 中创建了一个对话框 还有一个按钮叫做 保存 我需要给这个保存按钮添加一个id 我怎样才能在 jquery 中实现这一点 这是我的代码 function dialog dialog height 400 width 650
  • Rails 如何正确“更新”多列 - (updated_at 也应该更新)

    我在使用 Rails activerecords 正确更新多个列时遇到问题 我想使用诸如 update 之类的东西 它基本上会在更新时更新 但我只是无法传递多个列 我可以使用 update all 但它不会使用当前时间戳更新 Updated
  • LINQ 不同查询

    我有一个 C 应用程序 它加载称为 任务 的 CLR 对象列表 每个任务都具有以下属性 public int ID get set public int TypeID get set public string TypeName get s
  • 如何在 PowerShell 中隐藏 Get-Help 中的参数(不仅仅是制表符完成)?

    我四处搜寻 找不到 否 的直接答案 但也没有找到 是 的直接答案 我已经知道的 Parameter DontShow 只影响制表符完成 一个建议是使用通用参数并测试它是否存在于 PSBoundParameters 虽然技术上可行 但它的副作
  • ES6 javascript类继承,为什么我们需要从派生类调用super()

    在 javascript ES6 中 在继承中 如果派生类有构造函数 为什么必须从派生构造函数调用 super 一些失败的例子是 带有构造函数的基类 但派生类不调用超级类 class Base constructor class Deriv
  • 如何让Xcode 3.2.3构建特定的架构?

    包含静态库时出现以下错误 缺少所需的架构 i386 文件 这在 30 秒前有效 只有当我升级到 Xcode 3 2 3 时才失败 我使用 file 命令进行检查 是的 XCode 正在构建完全错误的架构 armv6 armv7 而 不是 i
  • 如何在 NopCommerce 中实施操作过滤器

    我想更改 CheckoutController 中 OpcSaveBilling 操作的操作中的一些代码 我不想改变 NopCommerce 的核心代码 所以我需要尝试用我自己的自定义代码覆盖代码 我阅读了这篇文章以开始使用http www
  • 生成签名 APK 错误:将字节码转换为 dex 时出错以及另外 1 个错误

    当我清理 重建我的项目甚至运行应用程序时 它不会返回任何错误 但是当我生成签名的 APK 时 它返回两个错误 Error Error converting bytecode to dex Cause com android dex DexE
  • 使用 Start-Job 时本地函数调用不起作用

    function F2 String var2 function F1 String var1 F2 var2 while i le count F1 dir i Start Job ScriptBlock function F1
  • 使用 hibernate 4.0 和 spring 3.1.0.release 的事件监听器?

    这些 jar 都是新发布的 并且具有 Java EE 应用程序的最新解决方案 但我在 hibernate cfg xml 中指定 hibernate 侦听器时遇到问题 在 Spring 3 1 0 之前 LocalSessionFactro
  • 如何在 JavaScript 循环中添加延迟?

    我想在 a 中添加延迟 睡眠while loop 我尝试过这样的 alert hi for var start 1 start lt 10 start setTimeout function alert hello 3000 只有第一种情况
  • 如何计算最佳批量大小?

    有时我会遇到一个问题 OOM when allocating tensor with shape e g OOM when allocating tensor with shape 1024 100 160 其中 1024 是我的批量大小
  • 如何在 Windows 上以提升的权限运行脚本

    我正在编写一个需要执行管理任务的 pyqt 应用程序 我更愿意以提升权限来启动我的脚本 我知道这个问题在 SO 或其他论坛中被多次提出 但人们建议的解决方案是看看这个SO问题从 Python 脚本中请求 UAC 提升 但是 我无法执行链接中
  • 通过扩展实现协议[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个协议来包装使用 UIImagePickerController 的过程 以使其在我的应用程序中更加精简 我基本上有这样的东西 public protocol MediaAccessor UIIm
  • CMake 未链接 Python

    抱歉 如果我重复一个问题 但我只是无法在互联网上的任何地方找到我正在寻找的解决方案 但我相信这是一个非常简单的问题 我正在尝试使用一些自定义 C 库扩展 python 并使用 CMake 构建我的 C 库 我正在按照以下说明进行操作http
  • 无法在 Opencv2 上导入 cv

    我使用的是 Windows 10 机器 并安装了 Python numpy 和 OpenCV官方链接使用预构建的二进制文件 我可以成功导入 numpy 和 cv2 但当我尝试导入 cv 时出现错误 import cv2 import num
  • 不同终端的不同 nCurses 行为

    我使用不同的终端获得两种不同的行为 这是我的代码 use ncurses initscr curs set 0 noecho start color define win newwin 20 50 1 1 wclear win box wi
  • 如何解决 Capybara::ElementNotFound 错误

    我遇到了以下问题 这是我第一次使用水豚 你知道我如何解决这个问题吗 谢谢 我使用 Rails 3 0 0 和以下 gem gem rails 3 0 0 gem capybara gem database cleaner gem cucum
  • 整数到字符串在综合中出错(宽度不匹配)

    我正在尝试将整数转换为字符串 使用integer image val 并将其填充或限制为特定长度 我已经制作了这个函数 当我使用时它可以很好地完成工作report陈述并模拟 function integer2string pad val i