首页 文章

在vhdl中创建线性搜索算法

提问于
浏览
-1

我正在尝试使用vhdl实现线性搜索算法我的代码是

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity q1 is port(
input : in integer;
output : out integer
);
end q1;
architecture beh of q1 is
type my_array is array (0 to 6) of integer;
constant sequence: my_array := (0,1,2,3,4,5,6,7);
begin
process(input) 

for i in sequence' range generate
    begin
        GenIf: if (input=my_array(i)) generate then
            output <=input;
        else
    output <=0; 
                end generate GenIf;
            end generate;
    end process;
    end beh;

我得到的错误信息是:

错误(10500):Search.vhd(16)附近文本“for”的VHDL语法错误;期待“开始”或声明语句错误(10500):Search.vhd(18)附近文本“生成”的VHDL语法错误;期待“然后”错误(10500):Search.vhd(20)的VHDL语法错误接近文本“else”;期望“结束”,或“(”或标识符(“else”是保留关键字),或顺序语句错误(10500):Search.vhd(22)处文本“end generate GenIf;”附近的VHDL语法错误;期望“结束”,或“(”,或标识符,或顺序语句错误(10500):Search.vhd(22)附近文本信息的VHDL语法错误:在源文件中找到0个设计单元,包括0个实体search.vhd

1 回答

  • 0

    总是值得纠正第一个错误或第一个错误 . 之后,它变得毫无意义,因为后续错误取决于前一个或两个错误 . 所以,我看了前两个:

    错误(10500):Search.vhd(16)附近文本“for”的VHDL语法错误;期待“开始”或声明

    您的流程需要 begin 语句 . 所有进程都需要 begin 语句:

    process(input)
    begin
    

    错误(10500):Search.vhd(18)附近文本“生成”的VHDL语法错误;期待“然后”

    Generate 语句不属于进程内部 . (实际上,您可以将进程放在 generate 语句中) . 我认为你需要修改生成语句 . 你只需要一个普通的 for loopif 语句:

    process(input) 
    begin
    for i in sequence'range loop
            GenIf: if input=sequence(i)  then
    

    (你的意思是 sequence 而不是 my_array . )

    在纠正这些之后,您会发现有更多不同的错误要纠正,由于之前的错误而未报告 .

相关问题