打印

急切解决的VHDL问题,大家帮下忙!

[复制链接]
3123|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jht123456789|  楼主 | 2010-3-18 15:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jht123456789 于 2010-4-29 22:15 编辑

一下程序出现此错误:Error (10500): VHDL syntax error at counter.vhd(82) near text "process";  expecting "if"

程序:
1、LIBRARY IEEE;
2、USE IEEE.STD_LOGIC_1164.ALL;
3、USE IEEE.STD_LOGIC_UNSIGNED.ALL;
4、ENTITY counter IS
5、PORT(rst:in std_logic;
6、ADD: IN STD_LOGIC;
7、CHOS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);   
8、A2,A1,A0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
9、B2,B1,B0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
10、C2,C1,C0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
11、D2,D1,D0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
12、END counter;
13、ARCHITECTURE rtl OF counter IS
14、BEGIN
15、PROCESS(rst,ADD,CHOS)   
16、VARIABLE POINTS_A2:STD_LOGIC_VECTOR(3 DOWNTO 0);   
17、VARIABLE POINTS_A1:STD_LOGIC_VECTOR(3 DOWNTO 0);   
18、VARIABLE POINTS_B2:STD_LOGIC_VECTOR(3 DOWNTO 0);   
19、VARIABLE POINTS_B1:STD_LOGIC_VECTOR(3 DOWNTO 0);   
20、VARIABLE POINTS_C2:STD_LOGIC_VECTOR(3 DOWNTO 0);   
21、VARIABLE POINTS_C1:STD_LOGIC_VECTOR(3 DOWNTO 0);   
22、VARIABLE POINTS_D2:STD_LOGIC_VECTOR(3 DOWNTO 0);  
23、VARIABLE POINTS_D1:STD_LOGIC_VECTOR(3 DOWNTO 0);  
24、BEGIN
25、case rst is
26、when 0 => points_a2:="0001";points_a1:="0000";
27、          points_b2:="0001";points_b1:="0000";
28、          points_c2:="0001";points_c1:="0000";
29、          points_d2:="0001";points_d1:="0000";
30、end case;                                         ---加分信号上升沿有效  
31、if (ADD'EVENT AND ADD='1') THEN      
32、if chos="0001" then           ---A组答对,加10分
33、  IF POINTS_A1= "1001" then              --十位为9
34、  POINTS_A1:="0000";
35、else POINTS_A2:=POINTS_A2+"0001";                   ----十位清零
36、IF points_a2="1001" then           ----百位为9
37、POINTS_A2:="0000";
38、else POINTS_A1:=(POINTS_A1)+"0001";
39、end if;                    ----百位清零
40、END IF;
41、IF (CHOS="0010") THEN
42、IF POINTS_B1="1001" THEN
43、   else POINTS_B1:="0000";
44、POINTS_B2:=POINTS_B2+"0001";
45、   IF POINTS_B2="1001" THEN
46、POINTS_B2:="0000";
47、else POINTS_B1:=POINTS_B1+"0001";
48、END IF;
49、end if;
50、IF CHOS="0010" THEN
51、IF POINTS_C1="1001" THEN
52、   POINTS_C1:="0000";
53、else POINTS_C2:=POINTS_C2+"0001";
54、   IF POINTS_C2="1001" THEN
55、  POINTS_C2:="0000";
56、else POINTS_C1:=POINTS_C1+"0001";
57、END IF;
58、end if;
59、IF CHOS="0010" THEN
60、IF POINTS_D1="1001" THEN
61、  POINTS_D1:="0000";
62、else POINTS_D2:=POINTS_D2+"0001";
63、   IF POINTS_D2="1001" THEN
64、POINTS_D2:="0000";
65、else POINTS_D1:=POINTS_D1+"0001";
66、END IF;
67、END IF;
68、END IF;
69、   A2<=POINTS_A2;  -------将各组得分赋给输出信号
70、A1<=POINTS_A1;
71、A0<="0000";
72、B2<=POINTS_B2;
73、B1<=POINTS_B1;
74、B0<="0000";
75、   C2<=POINTS_C2;
76、C1<=POINTS_C1;
77、C0<="0000";
78、   D2<=POINTS_D2;
79、D1<=POINTS_D1;
80、D0<="0000";
81、end if;
82、end process;
END rtl;

相关帖子

沙发
mr.king| | 2010-3-18 19:52 | 只看该作者
82行

使用特权

评论回复
板凳
jht123456789|  楼主 | 2010-3-26 21:49 | 只看该作者
就是82行到底出什么事了???
求帮助啊!

使用特权

评论回复
地板
mr.king| | 2010-3-26 22:00 | 只看该作者
楼主,你不标行号,没人看,我好心帮你数了下,你是if end if个数不匹配

使用特权

评论回复
5
sassos| | 2010-3-29 15:06 | 只看该作者
错误提示已经说得很清楚了 expecting  "if"
ls好心 但是对lz没好处呢

使用特权

评论回复
6
jht123456789|  楼主 | 2010-4-29 22:07 | 只看该作者

RE: 急切解决的VHDL问题,大家帮下忙!

楼主,你不标行号,没人看,我好心帮你数了下,你是if end if个数不匹配
mr.king 发表于 2010-3-26 22:00
不好意思,我真的是个菜鸟,不知道怎样改,请大侠指明我哪里缺少哪个语句号吗?哪里expecting  “if”.....

使用特权

评论回复
7
jht123456789|  楼主 | 2010-4-29 22:18 | 只看该作者
高手,强手,熟手.......大家帮下忙!!!无以言报了

使用特权

评论回复
8
mr.king| | 2010-4-30 12:44 | 只看该作者
本帖最后由 mr.king 于 2010-4-30 12:46 编辑

42、IF POINTS_B1="1001" THEN
43、   else POINTS_B1:="0000";
42行后少代码

使用特权

评论回复
9
jht123456789|  楼主 | 2010-5-1 16:47 | 只看该作者
但是为甚么显示是82行错误呢???
缺了个if??
怎么改啊啊啊啊啊啊啊!~help

使用特权

评论回复
10
mr.king| | 2010-5-1 19:02 | 只看该作者
因为配不上呀,你42行后没有任何代码下面就ELSE,如果真的不用操作,简单办法加个NULL

使用特权

评论回复
11
jht123456789|  楼主 | 2010-5-1 21:35 | 只看该作者
试过了,结果还是出现一样的错误啊!!1

使用特权

评论回复
12
mr.king| | 2010-5-2 07:14 | 只看该作者
BEGIN
case rst is
        when 0 => points_a2:="0001";points_a1:="0000";
          points_b2:="0001";points_b1:="0000";
          points_c2:="0001";points_c1:="0000";
          points_d2:="0001";points_d1:="0000";
        end case;                                         ---加分信号上升沿有效  
        if (ADD'EVENT AND ADD='1') THEN      
                if chos="0001" then           ---A组答对,加10分
                  IF POINTS_A1= "1001" then              --十位为9
                          POINTS_A1:="0000";
                        else
                                POINTS_A2:=POINTS_A2+"0001";                   ----十位清零
                                IF points_a2="1001" then           ----百位为9
                                        POINTS_A2:="0000";
                                else
                                        POINTS_A1:=(POINTS_A1)+"0001";
                                end if;                    ----百位清零
                        END IF;
                END IF;
                IF (CHOS="0010") THEN
                        IF POINTS_B1="1001" THEN
                           POINTS_B1:="0000";
                        else
                                POINTS_B2:=POINTS_B2+"0001";
                           IF POINTS_B2="1001" THEN
                                        POINTS_B2:="0000";
                                else
                                        POINTS_B1:=POINTS_B1+"0001";
                                END IF;
                        end if;
                end if;
                IF CHOS="0100" THEN
                        IF POINTS_C1="1001" THEN
                                POINTS_C1:="0000";
                        else
                                POINTS_C2:=POINTS_C2+"0001";
                          IF POINTS_C2="1001" THEN
                                  POINTS_C2:="0000";
                                else
                                        POINTS_C1:=POINTS_C1+"0001";
                                END IF;
                        end if;
        end if;               
        IF CHOS="1000" THEN
                IF POINTS_D1="1001" THEN
                  POINTS_D1:="0000";
                else
                        POINTS_D2:=POINTS_D2+"0001";
                   IF POINTS_D2="1001" THEN
                                POINTS_D2:="0000";
                        else
                                POINTS_D1:=POINTS_D1+"0001";
                        END IF;
                END IF;
        END IF;
  A2<=POINTS_A2;  -------将各组得分赋给输出信号
        A1<=POINTS_A1;
        A0<="0000";
        B2<=POINTS_B2;
        B1<=POINTS_B1;
        B0<="0000";
  C2<=POINTS_C2;
        C1<=POINTS_C1;
        C0<="0000";
  D2<=POINTS_D2;
        D1<=POINTS_D1;
        D0<="0000";
end if;
end process;
END rtl;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

0

粉丝