提问人:jo132123sda 提问时间:7/20/2023 最后编辑:Mikefjo132123sda 更新时间:7/21/2023 访问量:46
Aldec ActiveHdl 中的自然数不会溢出
Natural number not overflowing in Aldec ActiveHdl
问:
获取运行时 error_0067 值 -1 超出范围(0 到 7)。Buf_ptr 被设置为自然数,但仍然变为负数,因为它没有溢出回 7。这可以通过 if 语句轻松修复,但是 ActiveHdl 中是否有我需要启用的设置以允许自然溢出?
.....
signal buf_ptr : natural range 0 to 7
....
....
....
dma_wrt_Data(7 downto 0) <= incoming_data(buf_ptr);
bytes_available <= bytes_available - 1;
buf buf_ptr <= buf_ptr - 1;
packet_byte_count <= packet_byte_count -1;
rcv_pkt_bct <= rcv_pkt_bct - 1;
在网上搜索了一下,看看是否有其他人有这个问题,找不到任何:(
答:
1赞
Tricky
7/21/2023
#1
VHDL 是一种强类型语言。因此,整数类型没有上溢/下溢的概念。当为对象分配超出范围的值时,这是一个运行时错误。
如果你想要显式上溢/下溢,你可以用 / types from package 来做到这一点。unsigned
signed
ieee.numeric_std
2赞
Jim Lewis
7/21/2023
#2
范围不这样做。Mod 可以:
buf_ptr <= (buf_ptr - 1) mod 8;
就像@Tricky说的,范围的目的是允许在赋值期间检查边界。
Ada 有模块化类型可以做到这一点。这些在VHDL中可能是有趣的东西,但必须有人想要在语言的这一方面工作。此类活动的起点是:https://gitlab.com/IEEE-P1076/VHDL-Issues/-/issues
评论