VHDL syntax error 请各位朋友帮忙找一下错误[谢谢各位,已解决]

2019-03-25 07:53发布

本帖最后由 吴下阿蒙 于 2015-2-17 17:36 编辑

Error (10500): VHDL syntax error at bell.vhd(80) near text "process";  expecting "if"
在下刚刚学习cpld,下面的代码是我根据教程输进去的,编译不了,提示上面的错误信息,实在找不到是那里不对,请各位帮忙一下。

--蜂鸣器发出 1,2,3,4,5,6,7
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity bell is
        port
        (
                clk_in: in std_logic; -- 系统时钟
                reset_in: in std_logic; -- 复位
               
                bell_out: out std_logic        
        );
end entity;

architecture behave of bell is

signal clk_tmp:std_logic; -- 10M时钟
signal bell_tmp:std_logic; -- 输出信号
signal pre_div:std_logic_vector(15 DOWNTO 0); -- 分频系数


component gen_div is -- 分频无件调用声明
        generic(div_param:integer:=2); -- 4分频的,产生10M脉冲
        port
        (
                clk:in std_logic;
                bclk:out std_logic;
                resetb:in std_logic               
        );
        end component;
begin
--------------------------
bell_out<=bell_tmp;
--------------------------
gen_10M:        -- 分频产生10M信号
        gen_div generic map(2) -- 4分频
        port map -- 分频无件例化
        (
                clk=>clk_in,
                resetb=>reset_in,
                bclk=>clk_tmp
        );
process(clk_tmp,reset_in)
        variable cnt:std_logic_vector(15 DOWNTO 0):=X"0000";
        variable cnt_p:integer range 0 to 7000:=0;
        begin
                if reset_in='1' then
                        bell_tmp<='0';
                        cnt:=X"0000";
                        cnt_p:=0;
                        pre_div<=X"4A8B"; --1
                else
                        if rising_edge(clk_tmp) then
                                if cnt>=pre_div then
                                        bell_tmp<= not bell_tmp;
                                        cnt:=X"0000";
                                        cnt_p:=cnt_p + 1;
                                        if cnt_p=1000 then
                                                pre_div:=X"426E"; --2
                                        if cnt_p=2000 then
                                                pre_div:=X"3B2F"; --3
                                        if cnt_p=3000 then
                                                pre_div:=X"37F6"; --4
                                        if cnt_p=4000 then
                                                pre_div:=X"31D3"; --5
                                        if cnt_p=5000 then
                                                pre_div:=X"2C63"; --6
                                        if cnt_p=6000 then
                                                pre_div:=X"2789"; --7
                                        if cnt_p=7000 then
                                                cnt_p:=0;
                                                pre_div:=X"4A8B";
                                        end if;
                                else
                                        cnt:=cnt+'1';
                                end if;
                        end if;
                end if;
        end process;  -- 第 80 行
end behave;



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
k331922164
1楼-- · 2019-03-25 14:39
< / if cnt_p=1000 then
                                                pre_div:=X"426E"; --2
                                        if cnt_p=2000 then
                                                pre_div:=X"3B2F"; --3
                                        if cnt_p=3000 then
                                                pre_div:=X"37F6"; --4
                                        if cnt_p=4000 then
                                                pre_div:=X"31D3"; --5
                                        if cnt_p=5000 then
                                                pre_div:=X"2C63"; --6
                                        if cnt_p=6000 then
                                                pre_div:=X"2789"; --7
这些if后面没有end if;
吴下阿蒙
2楼-- · 2019-03-25 17:47
谢谢k331922164!

下面原来是elsif的,已经改过来了.编译时还出现一个错误:
Error (12006): Node instance "gen_10M" instantiates undefined entity "gen_div"

在这里:
gen_10M:        -- 分频产生10M信号
gen_div generic map(2) -- 4分频

有劳您指点一下。
吴下阿蒙
3楼-- · 2019-03-25 19:10
问题解决了,原因是还有一个文件(gen_div.vhd)没有复制到项目的目录下。

一周热门 更多>