VHDL:选择器(字符串类型的常量和)是一个无约束数组

VHDL:选择器(字符串类型的常量和)是一个无约束数组,vhdl,xilinx-ise,spartan,Vhdl,Xilinx Ise,Spartan,我从下载了VHDL LCD库,检查语法时出现以下错误: Started : "Check Syntax for LIB_LCD_INTESC_REVB". Running xst... Command Line: xst -intstyle ise -ifn {D:/My pc/My documents/ISE/Libreria/LIB_LCD_INTESC_REVB.xst} -ofn LIB_LCD_INTESC_REVB.stx =============================

我从下载了VHDL LCD库,检查语法时出现以下错误:

Started : "Check Syntax for LIB_LCD_INTESC_REVB".
Running xst...
Command Line: xst -intstyle ise -ifn {D:/My pc/My documents/ISE/Libreria/LIB_LCD_INTESC_REVB.xst} -ofn LIB_LCD_INTESC_REVB.stx

=========================================================================
*                          HDL Compilation                              *
=========================================================================
Compiling vhdl file "D:/Drive/Cetys/3R semestre/Digitales 2/Morsese/LCD2x16RevB/LCD2x16RevB/COMANDOS_LCD_REVB.vhd" in Library work.
ERROR:HDLParsers:839 - "D:/Drive/Cetys/3R semestre/Digitales 2/Morsese/LCD2x16RevB/LCD2x16RevB/COMANDOS_LCD_REVB.vhd" Line 77. Selector (Constant 'DATO1' of type STRING) is an unconstrained array.
我在用(->)选择的行中得到错误:

我知道VHDL的基础知识,但我不知道如何调试这些类型的错误


感谢您的帮助。

case语句的选择器不能是
字符串
,因为字符串是无约束数组(数组的长度在您指定之前是未知的),并且不是本地静态类型。VHDL case语句只接受本地静态类型的选择器。此外,
a
b
c
。。。不是字符串文字。您下载的不是VHDL。您可以尝试通过修改代码来修复所有这些问题,但我甚至不会尝试。它是由不懂VHDL的人编写的,可能还有无数其他问题。无论如何,您可以尝试以下方法:

FUNCTION CHAR(DATO1 : character) RETURN STD_LOGIC_VECTOR IS     
VARIABLE DATAOUT1 : STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
    CASE DATO1 IS
    WHEN 'a' => RETURN '1'&x"09";
    WHEN 'b' => RETURN '1'&x"0A";
    WHEN 'c' => RETURN '1'&x"0B";
    ...

当然,您还必须编辑对
CHAR
函数的调用:检查传递的参数是否为
字符
,而不是
字符串
。。。常量字符串是常量a:STRING:=“a”;常数j:字符串:=“j”;,等等…谢谢你的快速回答!您如何判断代码不是VHDL,或者它是由不懂VHDL的人编写的?我照你说的做了,我设法解决了它,还有其他一些小问题。很简单:有人认为
a
b
c
。。。字符串文字在VHDL中不流畅,并且他的代码不是简单有效的VHDL。。。除非您没有向我们展示整个代码,并且有名为
a
b
c
…的字符串常量声明,但主要原因是相信case语句的选择器可以是string类型。我想这不是有效的VHDL,甚至还没有经过测试。哦,好吧,谢谢你的回答!我将跳过此库并实现我自己的库。
FUNCTION CHAR(DATO1 : character) RETURN STD_LOGIC_VECTOR IS     
VARIABLE DATAOUT1 : STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
    CASE DATO1 IS
    WHEN 'a' => RETURN '1'&x"09";
    WHEN 'b' => RETURN '1'&x"0A";
    WHEN 'c' => RETURN '1'&x"0B";
    ...