本帖最后由 吴下阿蒙 于 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;
此帖出自
小平头技术问答
下面原来是elsif的,已经改过来了.编译时还出现一个错误:
Error (12006): Node instance "gen_10M" instantiates undefined entity "gen_div"
在这里:
gen_10M: -- 分频产生10M信号
gen_div generic map(2) -- 4分频
有劳您指点一下。
一周热门 更多>