【问题标题】:VHDL : Selector (Constant ' ' of type STRING) is an unconstrained arrayVHDL:选择器(字符串类型的常量'')是一个不受约束的数组
【发布时间】:2015-12-09 15:00:17
【问题描述】:

我从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 的基础知识,但我不知道如何调试这些类型的错误。

感谢您的帮助。

【问题讨论】:

  • a, b, c... 是常量字符串 CONSTANT a:STRING:="a";常数 j:STRING:="j"; 等...

标签: vhdl xilinx-ise spartan


【解决方案1】:

case 语句的选择器不能是string,因为字符串是不受约束的数组(在指定之前长度未知的数组)并且不是本地静态类型。 VHDL case 语句只接受本地静态类型的选择器。此外,abc... 不是字符串文字。你下载的不是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

【讨论】:

  • 感谢您的快速回答!您如何判断代码不是 VHDL 或者它是由不了解 VHDL 的人编写的?我按照你说的做了,并设法修复了它,以及其他一些小事。
  • 简单:认为abc... 是字符串文字的人在 VHDL 中并不流利,而且他编写的代码也不是普通有效的 VHDL... 除非您没有向我们展示整个代码,并且有名为 abc... 的字符串常量的声明
  • 但主要原因是相信case语句的选择器可以是字符串类型。我猜这不是有效的 VHDL,甚至还没有经过测试。
  • 哦,好的,谢谢您的回答!我将跳过这个库并实现我自己的。
猜你喜欢
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多