Vhdl 如何向控制台写入自定义数组类型
我对VHDL相当陌生,我正在运行一段代码中的一些片段,以了解它在做什么。我想在控制台中看到一个自定义数组类型,但在尝试编写它时,我得到了一个错误Vhdl 如何向控制台写入自定义数组类型,vhdl,Vhdl,我对VHDL相当陌生,我正在运行一段代码中的一些片段,以了解它在做什么。我想在控制台中看到一个自定义数组类型,但在尝试编写它时,我得到了一个错误 entity hello_world is end entity hello_world; library STD; library IEEE; use IEEE.std_logic_1164.all; use STD.text
entity hello_world is
end entity hello_world;
library STD;
library IEEE;
use IEEE.std_logic_1164.all;
use STD.textio.all;
use IEEE.std_logic_textio.all;
use IEEE.numeric_std.all;
architecture test of hello_world is
type row_type is array(0 to 2) of std_logic_vector(3 downto 0);
type new_type is array(0 to 1) of row_type;
signal max_new : new_type := (others => (others => (others => '0')));
begin
my_print : process is
variable my_line : line;
begin
write(my_line, string'("Value of max_new"));
write(my_line, max_new);
writeline(output, my_line);
wait;
end process my_print;
end architecture test;
我在运行模拟时遇到的错误是:
错误:“max\u new”附近的类型错误:应为“std\u ulogic”类型。错误:模式inout的形式“l”必须具有关联的实际值。错误:形式“值”没有实际值或默认值。错误:索引名称前缀类型“void”不是数组类型 如果我理解正确,行类型是一个大小为3的数组,在每个位置我有一个由4位组成的向量。新的_类型是一个大小为2的数组,在每个位置我都有一个row_类型,它是一个大小为3的数组,每个位置有一个4位向量。这是正确的吗?因为它被初始化为0,所以我只希望看到它 我使用Vivado 2018.3进行模拟 任何帮助都将不胜感激 std.textio的函数write可以将以下参数作为值():
- 钻头
- 比特向量
- 布尔值
- 性格
- 整数
- 真实的
- 串
- 时间
my_print : process is
variable my_line : line;
begin
write(my_line, string'("Value of max_new"));
for I in 0 to 1 loop
for J in 0 to 2 loop
write(my_line, max_new(I)(J));
end loop;
end loop;
writeline(output, my_line);
wait;
end process my_print;
您也可以编写自己的编写过程:
实体hello\u world是
世界末日;
--图书馆标准;
图书馆IEEE;
使用IEEE.std_logic_1164.all;
使用STD.textio.all;
使用IEEE.std_logic_textio.all;
--使用IEEE.numeric_std.all;
hello_world的架构测试是
类型行类型是标准逻辑向量(3到0)的数组(0到2);
type new_type是行类型的数组(0到1);
信号最大新:新类型:=(其他=>(其他=>(其他=>“0”);
过程写入(l:inout行;新类型\值:在新类型中)为
开始
写(l,字符串“(”);
对于新_类型“范围循环”中的i
写(l,字符串“(”);
对于行中的j_类型“范围循环”
写(l,字符串“(”);
写入(l,新类型值(i)(j));
写(l,字符串“(”);
如果j/=row_type'正确,则
写入(l,字符串“(“,”));
如果结束;
端环;
写(l,字符串“(”);
如果i/=new_type'正确,则
写入(l,字符串“(“,”));
如果结束;
端环;
写(l,字符串“(”);
结束程序;
开始
我的照片:
过程是
变量my_line:line;
开始
写入(我的行,字符串'(“max_new=”的值);
写(我的行,马克斯新);
writeline(输出,my_行);
等待
结束我的打印过程;
终端架构测试;
ghdl-r hello\u world
最大新值=((“0000”、“0000”、“0000”)、(“0000”、“0000”、“0000”))
使用先前存在的写过程重载作为构建块
您还可以使用特定于类型的字符串转换,消除对Synopsys软件包std_logic_textio的依赖,并引入使用报表语句的功能:
ieee库;
使用ieee.std_logic_1164.all;
使用std.textio.all;
hello\u world的架构无标准逻辑文本是
类型行类型是标准逻辑向量(3到0)的数组(0到2);
type new_type是行类型的数组(0到1);
信号最大新:新类型:=(其他=>(其他=>(其他=>“0”);
--对于VHDL版本<-2008:
函数到_字符串(inp:std_逻辑_向量)的返回字符串为
变量image_str:字符串(1到inp'长度);
别名输入\u str:std\u逻辑\u向量(1到inp'长度)是inp;
开始
对于输入_str'range循环中的i
图像(i):=字符值(标准逻辑)图像(输入(i));
端环;
返回图像;
末端功能;
函数到\u字符串(nt:新\u类型)返回字符串为
变量l:直线;
开始
写(l,字符串“(”);
对于新_类型“范围循环”中的i
写(l,字符串“(”);
对于行中的j_类型“范围循环”
写(l),“,”到字符串(nt(i)(j))&'”;
如果j/=row_type'正确,则
写入(l,字符串“(“,”));
如果结束;
端环;
写(l,字符串“(”);
如果i/=new_type'正确,则
写入(l,字符串“(“,”));
如果结束;
端环;
写(l,字符串“(”);
返回l.all;
末端功能;
开始
我的照片:
过程是
变量my_line:line;
开始
写入(我的行,字符串'(“max_new=”的值);
写入(我的行,到字符串(max_new));
writeline(输出,my_行);
报告LF&HT和“max_new=”和to_字符串(max_new);
等待
结束我的打印过程;
终端架构无标准逻辑文本;
这演示了写入输出和报告语句:
ghdl-r hello\u world
最大新值=((“0000”、“0000”、“0000”)、(“0000”、“0000”、“0000”))
hello_world.vhdl:95:9:@0ms:(报告注释):
最大新值=((“0000”、“0000”、“0000”)、(“0000”、“0000”、“0000”))
这正是我需要的,谢谢。为了便于记录,这是输出:max_new 0000的值