3903|5

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求问高手一个VHDL的语言出错的问题 [复制链接]

其实是一个比较简单的不同时区的时间转换的程序

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY srxs4 IS
PORT(clk1 , clk2 , clk3 , clk4 , clk5 ,clk9,clk8:IN STD_LOGIC;
dis_out1 , dis_out2 , dis_out3, dis_out4:out STD_LOGIC_VECTOR(4 DOWNTO 0));
END srxs4;

ARCHITECTURE sq OF srxs4 IS

BEGIN
PROCESS(clk1 , clk2 , clk3 , clk4 , clk5 , clk9,clk8)
variable i1 , i2, i3 ,i4 ,i5 ,a1, a2,b1,b2,c1,c2: integer :=0;
variable X1,X2,X3,X4:STD_LOGIC_VECTOR(4 DOWNTO 0);


BEGIN

                  IF (clk1='1') then
                  i1:=1;
                  else i1:=0;
                  end if;
                 
                     
                  IF (clk2='1') then
                  i2:=8;
                  else i2:=0;
                  end if;
                  
                     
                  IF (clk3='1') then
                  i3:=4;
                  else i3:=0;
                  end if;
                  
                     
                  IF (clk4='1') then
                  i4:=2;
                  else i4:=0;
                  end if;
                  
                     
                  IF (clk5='1') then
                  i5:=1;
                  else i5:=0;
                  end if;
                  
                  
                     
                  if (clk9'event and clk9='1')then
                  a1:=i2 +i3+ i4 +i5;
                  
                   CASE a1 IS
                WHEN 0 => X2:="00000";--显示0 gfedcba
                WHEN 1 => X2:="00001";--显示1
                WHEN 2 => X2:="00010";--显示2
                WHEN 3 => X2:="00011";--显示3
                WHEN 4 => X2:="00100";--显示4
                WHEN 5 => X2:="00101";--显示5
                WHEN 6 => X2:="00110";--显示6
                WHEN 7 => X2:="00111";--显示7
                WHEN 8 => X2:="01000";--显示8
                WHEN 9 => X2:="01001";--显示9
                WHEN 10 => X2:="01010";--显示A
                WHEN 11 => X2:="01011";--显示B
                WHEN 12 =>X2:="01100";--显示C
                WHEN OTHERS => X2:="00000";
              END CASE;
              if i1=1 then X1:="01110";         
              else X2:="10011";                                 
              end if;
     
           c1:=i1;                                         --记录第一次的东时区or西时区
           b1:=a1;                                         --记录第一次的时区
          end if;
             
             if (clk9'event and clk9='0')then
             a2:=(i1*10+ i2 +i3+ i4 +i5);
                  
              CASE a2 IS
                WHEN 0 =>X3:="00000";
                         X4:="00000";--显示00
                WHEN 1 => X3:="00000";
                          X4:="00001";--显示01
                WHEN 2 => X3:="00000";
                          X4:="00010";--显示02
                WHEN 3 => X3:="00000";
                          X4:="00011";--显示03
                WHEN 4 => X3:="00000";
                          X4:="00100";--显示04
                WHEN 5 => X3:="00000";
                          X4:="00101";--显示05
                WHEN 6 => X3:="00000";
                          X4:="00110";--显示06
                WHEN 7 => X3:="00000";
                          X4:="00111";--显示07
                WHEN 8 => X3:="00000";
                          X4:="01000";--显示08
                WHEN 9 => X3:="00000";
                          X4:="01001";--显示09
                WHEN 10 =>X3:="00001";
                          X4:="00000";--显示10
                WHEN 11 =>X3:="00001";
                          X4:="00001";--显示11
                WHEN 12 => X3:="00001";
                           X4:="00010";--显示12
                WHEN 13 => X3:="00001";
                           X4:="00011";--显示13
                WHEN 14 => X3:="00001";
                           X4:="00100";--显示14
                WHEN 15 => X3:="00001";
                           X4:="00101";--显示15
                WHEN 16 => X3:="00001";
                           X4:="00110";--显示16
                WHEN 17 => X3:="00001";
                           X4:="00111";--显示17
                WHEN 18 => X3:="00001";
                           X4:="01000";--显示18
                WHEN 19 => X3:="00001";
                           X4:="01001";--显示19
                WHEN 20 => X3:="00010";
                           X4:="00000";--显示20
                WHEN 21 => X3:="00010";
                           X4:="00001";--显示21
                WHEN 22 => X3:="00010";
                           X4:="00010";--显示22
                WHEN 23 => X3:="00010";
                           X4:="00011";--显示23
                WHEN 24 => X3:="00010";
                           X4:="00100";--显示24
            WHEN OTHERS => X3:="00000";
                           X4:="00000";
              END CASE;
   
             b2:=a2;                                            --记录第一次的时间

             end if;



--第二次开始
IF clk8='1' then
           
          IF (clk1='1') then
                  i1:=1;
                  else i1:=0;
                  end if;
                 
                     
                  IF (clk2='1') then
                  i2:=8;
                  else i2:=0;
                  end if;
                  
                     
                  IF (clk3='1') then
                  i3:=4;
                  else i3:=0;
                  end if;
                  
                     
                  IF (clk4='1') then
                  i4:=2;
                  else i4:=0;
                  end if;
                  
                     
                  IF (clk5='1') then
                  i5:=1;
                  else i5:=0;
                  end if;
                  
                  
                     
                if(clk9'event and clk9='1')then
                  a1:=i2 +i3+ i4 +i5;
                  
                   CASE a1 IS
        WHEN 0 => X2:="00000";--显示0 gfedcba
                WHEN 1 => X2:="00001";--显示1
                WHEN 2 => X2:="00010";--显示2
                WHEN 3 => X2:="00011";--显示3
                WHEN 4 => X2:="00100";--显示4
                WHEN 5 => X2:="00101";--显示5
                WHEN 6 => X2:="00110";--显示6
                WHEN 7 => X2:="00111";--显示7
                WHEN 8 => X2:="01000";--显示8
                WHEN 9 => X2:="01001";--显示9
                WHEN 10 => X2:="01010";--显示A
                WHEN 11 => X2:="01011";--显示B
                WHEN 12 =>X2:="01100";--显示C
                WHEN OTHERS => X2:="00000";
              END CASE;
              if i1=1 then X1:="01110";         
              else X2:="10011";                                                   
                 end if;
        dis_out1<=X1;
        dis_out2<=X2;
        end if;

--开始计算

             if c1=1 then
                if i1=1 then
                   c2:= b2+a1-b1;
                else c2:=b2-b1-a1;
                end if;
             end if;
            
             if c1=0 then
                if i1=0 then
                   c2:= b2-(a1-b1);
                else c2:=b2+b1+a1;
                end if;
             end if;     
         
           if c2>24 then c2:=c2-24;
           end if;
           
           if c2<0  then c2:=c2+24;
           end if;            

      if (clk9'event and clk9='0')then
          a2:=c2;
       CASE a2 IS
                WHEN 0 =>X3:="00000";
                         X4:="00000";--显示00
                WHEN 1 => X3:="00000";
                          X4:="00001";--显示01
                WHEN 2 => X3:="00000";
                          X4:="00010";--显示02
                WHEN 3 => X3:="00000";
                          X4:="00011";--显示03
                WHEN 4 => X3:="00000";
                          X4:="00100";--显示04
                WHEN 5 => X3:="00000";
                          X4:="00101";--显示05
                WHEN 6 => X3:="00000";
                          X4:="00110";--显示06
                WHEN 7 => X3:="00000";
                          X4:="00111";--显示07
                WHEN 8 => X3:="00000";
                          X4:="01000";--显示08
                WHEN 9 => X3:="00000";
                          X4:="01001";--显示09
                WHEN 10 =>X3:="00001";
                          X4:="00000";--显示10
                WHEN 11 =>X3:="00001";
                          X4:="00001";--显示11
                WHEN 12 => X3:="00001";
                           X4:="00010";--显示12
                WHEN 13 => X3:="00001";
                           X4:="00011";--显示13
                WHEN 14 => X3:="00001";
                           X4:="00100";--显示14
                WHEN 15 => X3:="00001";
                           X4:="00101";--显示15
                WHEN 16 => X3:="00001";
                           X4:="00110";--显示16
                WHEN 17 => X3:="00001";
                           X4:="00111";--显示17
                WHEN 18 => X3:="00001";
                           X4:="01000";--显示18
                WHEN 19 => X3:="00001";
                           X4:="01001";--显示19
                WHEN 20 => X3:="00010";
                           X4:="00000";--显示20
                WHEN 21 => X3:="00010";
                           X4:="00001";--显示21
                WHEN 22 => X3:="00010";
                           X4:="00010";--显示22
                WHEN 23 => X3:="00010";
                           X4:="00011";--显示23
                WHEN 24 => X3:="00010";
                           X4:="00100";--显示24
            WHEN OTHERS => X3:="00000";
                           X4:="00000";
              END CASE;
      
       end if;

END IF;
       dis_out1<=X1;
       dis_out2<=X2;
       dis_out3<=X3;
       dis_out4<=X4;
      
      
END PROCESS ;
END sq;

可是一直出现
Error (10821): HDL error at srxs4.vhd(142): can't infer register for "X4[0]" because its behavior does not match any supported register model
这个问题,不知道是什么原因,求教一下。。。谢谢!
小弟是刚刚开始学,请多多包涵呐~
此帖出自FPGA/CPLD论坛

最新回复

这样啊,楼主的程序这个方面做的不好。普通信号和时钟信号命名都差不多。  详情 回复 发表于 2011-6-10 08:55
点赞 关注
 

回复
举报

6892

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

可是一直出现
Error (10821): HDL error at srxs4.vhd(142): can't infer register for "X4[0]" because its behavior does not match any supported register model

 

上面意思说,X4[0]相关的寄存器不能综合,原因在于他的行为不匹配任何硬件可以支持的寄存器模型!

 

 

需要给你说明

在一个PROCESS的进程中只能有如下风格;

PROCESS(CLK,RST)

BGEGIN

IF (RST='1') THEN

  NULL;

ELSIF CLK'EVENT AND CLK='1'  THEN

  -----------语句

END IF;

 

 

 

END PROCESS;

 

 

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
端口信号是什么意思??
此帖出自FPGA/CPLD论坛
 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

4
 

楼上的兄弟说的啥端口信号问题?

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

5
 
不是,是我看不懂,不知道那些端口信号是时钟呢还是普通信号
此帖出自FPGA/CPLD论坛
 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

6
 
这样啊,楼主的程序这个方面做的不好。普通信号和时钟信号命名都差不多。
此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表