VHDL - 合格表达式必须与上下文

时间:2016-05-28 17:38:44

标签: vhdl

这个问题是my last question的延续。

正如我之前提到的,我正在尝试与经典的HD44780 LCD接口。我已经实现了本地ram,我将其写入我想要显示在显示屏上的数据。

ram以这种方式定义(与上一个问题略有不同):

type ram_type is array (integer range <>) of std_logic_vector(7 downto 0);
signal lcd_mem : ram_type(0 to 16*2-1);

我想在液晶显示屏上的某个位置显示一堆常量字符和数字,我尝试通过这种方式直接写入lcd_mem来实现这一点:

lcd_mem <= (0 => x"45", 1 => x"72", 2 => x"72", 3 => x"6F", 4 => x"72", 5 => x"73", 6 => x"3A", 15 => x"30",    16 => x"54", 17 => x"58", 18 => x"3A", 30 => x"4D", 31 => x"3A", others => x"20");

第79行:

lcd_mem(22 to 28) <= get_ascii(1234567); --to_integer(unsigned(n_bits(39 downto 20)))

整数1234567稍后将被to_integer注释替换。

我编写了get_ascii函数,该函数应该通过向bcd表示添加0x30将整数转换为bcd表示而不是ascii。 以下是该功能的一部分:

variable num    : ram_type(0 to 16*2-1);
variable temp   : std_logic_vector(number'range);
variable bcd    : unsigned ((4*7-1) downto 0) := (others => '0');
.
.
.
num(0) := std_logic_vector(bcd(3 downto 0) + x"30");
num(1) := std_logic_vector(bcd(7 downto 4) + x"30");
num(2) := std_logic_vector(bcd(11 downto 8) + x"30");
num(3) := std_logic_vector(bcd(15 downto 12) + x"30");
num(4) := std_logic_vector(bcd(19 downto 16) + x"30");
num(5) := std_logic_vector(bcd(23 downto 20) + x"30");
num(6) := std_logic_vector(bcd(27 downto 24) + x"30");          
return num;

编译时我收到以下错误:

  

错误(10511):display_ber.vhd(79)中的VHDL合格表达式错误:合格表达式中指定的get_ascii类型必须与上下文隐含的ram_type类型相匹配

我无法理解消息的含义。 我已经尝试定义一个较短的ram_type变量(0到6)来接收get_ascii函数的值,但这没有帮助。

1 个答案:

答案 0 :(得分:0)

好的,显然这是因为我在包和架构中都定义了类型“ram_type”。

删除架构中的“ram_type”定义后,错误就消失了。