VHDL:选择器(STRING 类型的常量“”)是一个不受约束的数组
VHDL : Selector (Constant ' ' of type STRING) is an unconstrained array
我从 http://www.intesc.mx/soporte 下载了一个 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.
我在使用 (->) 选择的行中遇到错误:
-> FUNCTION CHAR(DATO1 : STRING) 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";
WHEN d => RETURN '1'&x"0C";
WHEN e => RETURN '1'&x"0D";
WHEN f => RETURN '1'&x"0E";
WHEN g => RETURN '1'&x"0F";
WHEN h => RETURN '1'&x"10";
WHEN i => RETURN '1'&x"11";
WHEN j => RETURN '1'&x"12";
WHEN k => RETURN '1'&x"13";
WHEN l => RETURN '1'&x"14";
我知道 VHDL 的基础知识,但我不知道如何调试这些类型的错误。
感谢您的帮助。
case 语句的选择器不能是 string
,因为字符串是不受约束的数组(在指定之前长度未知的数组)并且不是局部静态类型。 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
函数的调用:检查传递的参数是否为 character
,而不是 string
。
我从 http://www.intesc.mx/soporte 下载了一个 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.
我在使用 (->) 选择的行中遇到错误:
-> FUNCTION CHAR(DATO1 : STRING) 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";
WHEN d => RETURN '1'&x"0C";
WHEN e => RETURN '1'&x"0D";
WHEN f => RETURN '1'&x"0E";
WHEN g => RETURN '1'&x"0F";
WHEN h => RETURN '1'&x"10";
WHEN i => RETURN '1'&x"11";
WHEN j => RETURN '1'&x"12";
WHEN k => RETURN '1'&x"13";
WHEN l => RETURN '1'&x"14";
我知道 VHDL 的基础知识,但我不知道如何调试这些类型的错误。
感谢您的帮助。
case 语句的选择器不能是 string
,因为字符串是不受约束的数组(在指定之前长度未知的数组)并且不是局部静态类型。 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
函数的调用:检查传递的参数是否为 character
,而不是 string
。