VHDL案例选择不是局部静态的

VHDL案例选择不是局部静态的,vhdl,ghdl,Vhdl,Ghdl,此代码与一些工具配合使用 阿尔代克海滨酒店 但不是其他人 GHDL(错误选择必须是本地静态表达式) 由于CMD_A和CMD_B被声明为常量记录,因此我希望这会起作用 有什么智慧的话吗?或者这只是一个坏主意?尝试将约束条件放入整数中 instruction : IN INTEGER RANGE 0 TO ...; 我不确定EDA游乐场上的ghdl-0.35版本是否能够在不尝试的情况下处理此问题。最新的ghdl-0.37-dev版本显示它可以工作: ghdl-a--std=08指令\u处

此代码与一些工具配合使用

  • 阿尔代克海滨酒店
但不是其他人

  • GHDL(错误选择必须是本地静态表达式)

由于CMD_A和CMD_B被声明为常量记录,因此我希望这会起作用


有什么智慧的话吗?或者这只是一个坏主意?

尝试将约束条件放入整数中

instruction : IN INTEGER RANGE 0 TO ...;

我不确定EDA游乐场上的ghdl-0.35版本是否能够在不尝试的情况下处理此问题。最新的ghdl-0.37-dev版本显示它可以工作:

ghdl-a--std=08指令\u处理器.vhdl
ghdl-e--std=08 tb
指令\u处理器。vhdl:68:8:错误:对于组件实例“uut”的默认端口绑定:
指令\处理器。vhdl:68:8:错误:第56:9行声明的信号接口“指令”类型
指令\处理器。vhdl:68:8:错误:与第9:9行声明的端口“指令”类型不兼容
指令处理器。vhdl:68:8:错误:信号接口“周期”在实体“指令处理器”中没有关联
ghdl:错误:编译错误
即使测试台和/或实体头需要一些工作。指令处理器和TB都位于上面使用的同一设计文件中

IEEE Std 1076-2008修订版更改了9.4.2局部静态初级中的一些定义

9.4.2局部静态基色

当且仅当表达式中的每个运算符表示隐式定义的运算符或库IEEE中STD_LOGIC_1164、NUMERIC_BIT、NUMERIC_STD、NUMERIC_BIT_UNSIGNED或NUMERIC_STD_UNSIGNED包之一中定义的运算符时,表达式称为局部静态表达式,如果表达式中的每个主项都是本地静态主项,则本地静态主项定义为以下内容之一:


m) 一种记录聚合,其中元素关联中的所有表达式都是本地静态表达式。

在-2008年之前,聚合不能是局部静态的。聚合是一个表达式,它是“定义值计算的公式”,以前对于常量声明值表达式总是全局静态的

允许某些表达式在本地是静态的来自VHDL-200x的努力,它产生了-2008修订版(快速通道方案)。其思想是,带有局部静态原语的表达式,这些原语从基本或预定义操作(包括上面列出的IEEE库包中的操作)生成值,这些表达式作为纯函数实现,不依赖于精化。为了避免混淆,过程调用是一个语句

使用Aldec Riviera Pro分析代码时使用了符合-2008标准的标志,具体如下:


如果由于工具链约束要求对标准进行早期修订,则case语句可替换为if语句或并发条件赋值语句,这意味着与if语句等效。另一方面,选定的信号分配语句意味着case语句,并且符合相同的语义。

添加了一个示例:感谢@Ahmad,我尝试使用std_logic_向量来完全约束类型,但没有任何区别。[std_logic_vector(3到0);]使用std_logic_vector表示您没有使用整数。std_logic_向量没有数字表示形式。请尝试在此过程中声明一个约束整数变量,并为其分配指令,然后在case语句中使用该变量。感谢非常好的解释,使用--std=08在本地GHDL上进行了测试,结果与预期相符。
instruction : IN INTEGER RANGE 0 TO ...;