关于vhdl中数组查找最大值
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
type arr is array(35 downto 0) of std_logic_vector(8 downto 0);
entity findmax is
port (en:in std_logic;
ori-matrix:in arr;
maxut std_logic_vector(8 downto 0);
p,qut integer);
end findmax;
architecture behavioral of findmax is
signal a:std_logic_vector(8 downto 0);
begin
variable i:integer:=0;
if en='1' then
while i<35 loop
if i=0or7or14or21or28or35 then
i<=i+1;
elsif ori-matrix(i)(7 down to 0)>ori-matrix(i+1)(7 down to 0)
then a<=ori-matrix(i);
else a<=ori-matrix(i+1);
i<=i+1;
end if;
end if;
end loop;
p<=i/6+1;
q<=rem(i/6)+1;
end if;
max<=a;
end behavioral;
编译提示错误
** Error: D:/pca/findmax.vhd(5): near "type": expecting: ARCHITECTURE CONFIGURATION ENTITY LIBRARY PACKAGE USE
** Error: D:/pca/findmax.vhd(8): near "-": expecting: ':'
** Error: D:/pca/findmax.vhd(16): near "variable": expecting: END
觉得你的程序有很多问题
1.没有见过将数组定义为输入端口的
2.你的进程(process)在哪里?没有敏感信号,怎么做事情?
还有我觉得你是在用c语言的思路在写vhdl,最好参照别人写的代码来规范自己
我是从fpga的角度来说的,呵呵,不对的话请见谅
** Error: D:/pca/findmax.vhd(5): near "type": expecting: ARCHITECTURE CONFIGURATION ENTITY LIBRARY PACKAGE USE
** Error: D:/pca/findmax.vhd(8): near "-": expecting: ':'
** Error: D:/pca/findmax.vhd(16): near "variable": expecting: END
同意楼上说法,这里仅解释你提出的这几个错误:
第一行,你的数据类型应该定义在包集合中或构造体中;
第二行,端口命名只能用下划线;
第三行,变量应定义在进程或过程或函数中。
2# qd0090
哦,谢谢,我去尝试下..刚学VHDL光看书好多语法规则都没有..
2# qd0090 还有个问题,就是我的输入端需要一个矩阵怎么办,不用数组,应该用什么呢?
你需要补充硬件基本知识,这不是写软件,是描述硬件电路。
你写的每句代码,先在脑里想想,这句话对应的硬件电路是什么
in port的类型可以是任意的。你可以将这个port定义为数组类型。矩阵也是数组,是二维数组。
学Verilog吧上手快点
vhdl规则复杂得很
8# lhlhualin
毕设要去用VHDL。我也没办法啊...
报错信息很清楚的说明需要修改的地方了
