找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 3721|回复: 5
打印 上一主题 下一主题

VHDL编译错误,请大家指教

[复制链接]

1

主题

5

帖子

-8984

积分

未知游客(0)

积分
-8984
跳转到指定楼层
1#
发表于 2009-10-26 16:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Annhu 于 2009-10-26 16:08 编辑
6 e' _. Q1 Q0 ~+ W0 [+ O0 r8 ^" C4 D+ ?/ n: ?. d; a
:) 下面的程序是一款CCD的驱动程序,clk1=2MHZ,enable主要是控制sh的周期是10us还是10ms icg的周期不变始终为10ms,delay用于控制sh、icg的延时0.5us。编译错误见最下方,小弟把clk和enable的位置换了一下即先判断clk1上升沿然后在判断enable问题就解决了,麻烦高手帮忙看一下这到底是什么原因呢?还有j就是程序的代码有没有可以优化的地方呢,谢谢大家!% X! s' P: ^3 w7 b' J) i1 u: e3 l
--CCDshixu
% b8 _) \! d/ b6 S1 ELIBRARY IEEE;
/ m' k* E+ K. T8 Q1 x2 hUSE IEEE.STD_LOGIC_1164.ALL;- A% I# g/ p/ i2 e( n7 j* W3 D) [1 [
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
. J8 H+ v+ a* C1 \  u! rentity divclk is
$ V& ~7 r' c! L+ T! {& A) d! J   port(clk: in std_logic;
  k) Q9 q/ o1 t' M8 x) G) n) S1 M        start:in std_logic;
( U) V( P* z9 x. E6 m        enable:in std_logic_vector(1 downto 0);
) f' X7 o8 Y' |3 e* Z0 e        o_m_clk  out std_logic;" R) [6 v/ e5 k9 e7 t  e: `2 k
        o_sh,o_icg  out std_logic;        
! X; Z2 W# l' q        stop out std_logic);' J/ _( ~/ e7 W% l! e% D+ E
end divclk;" \4 r( P; \8 ]
architecture behave1 of divclk is2 z- V: d7 {! h$ s1 {) d9 N: r
constant halftime :std_logic_vector(3 downto 0):="0101";1 B0 J9 w/ o: j1 s# U/ ]
signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu% u  c8 P: c% M0 y" C4 n& O# H$ `
signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi
+ H. L+ e6 K" u0 `* Fsignal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi( B/ Q9 \' e* \0 T- o
signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge
9 U/ D! F6 j3 B+ d" Isignal clk1: std_logic;! ?9 i) \( j, n$ N# L
begin  D) f9 v0 _3 W- K4 x: s* U
P1:process(clk,start)--24MHZ,12fenpin
- I: I5 b! e8 X   begin & T# d9 \% m+ T
     if start='1' then7 k  P& P3 V' }; T' n: s
       clk1<='0';
, i0 z1 U2 `5 I' H       divcounter<="0000";                                                                                                                                                         
( b- l" W2 Q) F: ?0 A1 Y8 i     elsif clk'event and clk='1' then
" H& I) X, \5 v5 Q& Y, G            if divcounter = halftime then
& f. ^2 X& d3 k' `% U  {8 [+ C               clk1 <= not clk1;
& e& t0 {7 \: y& o3 A               divcounter <= "0000";
' ]% u  A8 \6 Y' f7 q/ {- k            else 9 F/ n" L2 Q3 }# Z- j1 \
               divcounter <= divcounter + 1;
* \9 v  T+ i- Q, Y3 J            end if;$ R' K# X; k, E8 b
        end if;
( B4 K+ g* |; c. b     o_m_clk <= clk1;
8 f- n: x  N9 U  |   end process P1;
- ]1 n0 J) C  V6 j% ]P2:process(clk1,start,enable)( q# l, h/ C4 R
begin
1 n8 @: K2 m5 f' T' R' e, w     if start = '1' then
6 L* @4 Q; X; L3 {8 G9 D3 ?+ J        delay <="00";6 S4 T. ^  p0 {! d0 @
        shcounter <= "00000000000000";  _. _! B" i7 k4 H% X
        icgcounter <= "000000000000000"; 7 L) L+ e7 U2 L, b. s
        o_sh <= '0';9 v7 M" ~9 K5 a
        o_icg <='1';6 @5 u. O- a" P3 r8 u
        stop <= '0';7 y: N, g  W- Y7 E) \- ^
     elsif enable = "01" then+ R! r: Y4 k* N3 H$ a" n9 f
        if clk1'event and clk1='1' then# ^7 E8 g% k* {7 o: k: o. n
           if icgcounter <"100111000100000" then  -- 20000分频产生10ms的周期
) A( Q( z. K3 h/ i' {" `4 h0 ~              icgcounter <= icgcounter +1;
( ]  {7 D7 H+ T/ E/ {7 W* D# {              if icgcounter <"000000000010100" then 8 R- M8 w5 I* W% G8 M
                 o_icg <= '0';               
( z6 T0 @) F( j- v7 H              else
- a6 x2 ~. @: x: e' V                 o_icg <= '1';               
# o6 L! E) p) W6 Z, i( }; [3 O, m              end if;# n2 z* Y2 R: c
           else
5 R( g7 O& X: D/ c               icgcounter <= "000000000000000"; , \9 k+ b6 G0 g# \! y1 w% \
               stop<='1';% I  H4 g8 @0 C6 O1 B3 E
           end if;# _( q7 T) {5 e
           if delay = "01"  then* M7 S' ]5 p- B' |8 Q* a
              delay <= "00";
+ i' b8 \' Z/ X: J              if shcounter < "00000000001001" then  -- delay用于产生ICG、SH的脉冲间隔0.5us,10us SH  O# a: x; P8 @9 E2 s
                 shcounter <= shcounter +1;
7 P* p8 J- g; o$ ~+ C) M                  if shcounter <"00000000000101" then  o_sh <= '1';
$ Z. b& d" O: g- x9 x                    else   o_sh <= '0';                     
/ U* w2 \/ H& g6 O6 u" G$ {                  end if;              / ]% [- q2 W4 U1 s& A8 {! Z5 T: |, y
              else
: }0 Z5 I5 u' y              shcounter<= "00000000000000";
  S9 w& n$ Y/ [( x3 p( E8 w% t               end if;
0 C3 ^$ D% y4 n/ }! P           else
( e! x* l& b& S* r2 S; z  o+ z7 H- i               delay <= delay +1;
  \: L4 g! L) e$ m8 t           end if;6 P, i' h; E* O+ P$ o
         end if;
& @* D# t4 r# q2 }8 i/ ^4 y      
8 t( }: F4 C4 j# L/ Z     elsif enable = "10" then8 Z9 z# M: \* P- m5 q
        if clk1'event and clk1='1' then
" I6 S* m* U0 R# p. B; m2 b0 F$ o           if icgcounter <"100111000100000" then  -- 10ms ICG) E/ U7 {7 s8 S
              icgcounter <= icgcounter +1;( A( [( j8 s+ G1 g5 A
              if icgcounter <"000000000010100" then
) R. z9 m% N. O" O; w* R                 o_icg <= '0';               
  _9 C. F: p; V: d% `1 t              else6 a3 E+ T- g* a- J8 V- g' d; R
                 o_icg <= '1';               
9 N7 s1 G. @7 Y              end if;
( ~; z: y! x8 h) Q           else 9 H4 k8 O8 R& w- ?) }+ j4 G# N
               icgcounter <= "000000000000000"; ) v' o7 S# z/ @9 m2 V! w. L+ m$ Y
               stop<='1';  }- B1 Z, p$ r* c6 K. j6 s+ Q8 ^( Y* I
           end if;
, v( C% k, F# K1 P           if delay = "01"  then
- J. Z! x3 C; W# O) E              delay <= "00";, T. j5 k. J' c- X6 l: r  o) y
              if shcounter < "10011100010000" then  -- 2次10000分频delay用于产生ICG、SH的脉冲间隔0.5us,10ms SH
# u: Z4 S- h& Z1 O# v1 T% u" g/ r                 shcounter <= shcounter +1;
+ G. W4 n9 m  a; z- u                  if shcounter <"00000000000101" then
) r# ~% v: D% O( f8 v. t                     o_sh <= '1';
/ n( `  G8 P$ P                  else
" m* s0 ?2 m3 v1 @6 f' T, o" j- ?                     o_sh <= '0';
# O- z5 `+ u# V5 C" U; U                  end if;              & c: w' y2 R" ?" _; n/ X
              else
. N5 q9 U8 x9 B( U                  shcounter<= "00000000000000";8 d0 K7 `% [1 z
              end if;
) P: N6 o8 }2 e! u" R$ r% n4 L           else8 U+ s8 _1 H# H6 ^; Y+ N1 @8 a
               delay <= delay +1;
, ^6 p) \& x/ l& Y; u& w& w& s           end if;       / k! P2 t, B8 h
        end if;/ a+ W& d9 p$ z9 X; p
   end if;    N" A) c! r* G0 w  f( c- a- h
  end process P2;2 W  c5 k. p. m6 A
end behave1;: ]0 m! p2 N( n' a+ E3 v8 ]
Error (10821): HDL error at divclk.vhd(42): can't infer register for "stop" because its behavior does not match any supported register model
+ O3 L1 T9 [$ H. d0 }Error (10821): HDL error at divclk.vhd(42): can't infer register for "o_icg" because its behavior does not match any supported register model* a4 A$ D# d4 X9 `+ a# \
Error (10821): HDL error at divclk.vhd(42): can't infer register for "o_sh" because its behavior does not match any supported register model
. _* [* F# d: J; ^. ^) _Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[0]" because its behavior does not match any supported register
* x0 s# Y$ j7 ^+ M# Wmodel
7 j7 L! q+ p2 m# ?Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[1]" because its behavior does not match any supported register ! r- {1 O4 z0 e* Z
model( m4 T. `8 @+ y; O; j
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[2]" because its behavior does not match any supported register
5 r! Z1 ~7 Y, F) b/ \4 Lmodel
8 h5 m9 s1 a: ?: k3 D8 y/ lError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[3]" because its behavior does not match any supported register
1 e) L1 h0 X6 u1 ]+ Fmodel$ ]/ `/ y3 a) \! ]7 [% ?* O
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[4]" because its behavior does not match any supported register
3 `" p2 _1 h- K/ ymodel
5 W# U( b9 X& H  A& }Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[5]" because its behavior does not match any supported register
# g* o9 d, r( k1 T4 E. K8 Rmodel
5 c6 N" K2 r+ R% {' K' U4 IError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[6]" because its behavior does not match any supported register
& g- ?' h! u7 p( lmodel1 N" Y2 c. x) t, ~& \
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[7]" because its behavior does not match any supported register
" \. ?3 [3 {3 Y% \# Omodel
- c$ p# M" {' Y1 E3 ?7 \" H  p2 yError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[8]" because its behavior does not match any supported register 5 i+ U/ z5 O$ h0 D. f  N: _
model
; L' S4 D8 R% D- L6 H! B! I3 VError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[9]" because its behavior does not match any supported register / l2 z5 P+ h% b; h+ s" ^0 h+ s# ]5 |
model
2 {& j6 {0 Z- r% ]8 _% S) hError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[10]" because its behavior does not match any supported register 1 g' n- c+ y  e0 f: S9 P* w
model
2 I9 O1 h: @- n3 k0 c0 fError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[11]" because its behavior does not match any supported register ; f! c  s; e0 w) G7 y0 b7 [
model
  a# \, T  G! w5 O; MError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[12]" because its behavior does not match any supported register
0 _; l$ d2 Q/ ]1 m3 b) B4 cmodel
# ?3 Z$ T8 ~/ ]/ P8 M0 L1 i+ EError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[13]" because its behavior does not match any supported register
' m" \2 h5 d' r, A% }' F* s" `: Gmodel
  k, L8 e- S" c; r+ `Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[14]" because its behavior does not match any supported register
9 @& E4 ^. F" m  Wmodel
5 N# R- W; x8 c6 f+ v" ?Error (10821): HDL error at divclk.vhd(42): can't infer register for "shcounter[0]" because its behavior does not match any supported register
/ ~1 I) [6 I- E: P6 \model
2 ^9 E; r  B( g- y' `/ M# c; \Error: Can't elaborate top-level user hierarchy
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
天分-速度,勤奋-高度

1

主题

5

帖子

-8984

积分

未知游客(0)

积分
-8984
2#
 楼主| 发表于 2009-10-28 19:32 | 只看该作者
怎么没人理呢?
天分-速度,勤奋-高度

0

主题

7

帖子

-8991

积分

未知游客(0)

积分
-8991
3#
发表于 2009-11-4 19:43 | 只看该作者
错误太多了 得一步一步找 一下是看不出来的 所以没人里

26

主题

141

帖子

1639

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1639
4#
发表于 2010-5-15 10:53 | 只看该作者
爱莫能助

6

主题

30

帖子

144

积分

二级会员(20)

Rank: 2Rank: 2

积分
144
5#
发表于 2012-2-24 20:35 | 只看该作者
这么长,自己慢慢找吧,细心点总能找出来的

6

主题

30

帖子

144

积分

二级会员(20)

Rank: 2Rank: 2

积分
144
6#
发表于 2012-2-26 13:58 | 只看该作者
LIBRARY IEEE;+ n& U0 o- d" w9 K4 b
USE IEEE.STD_LOGIC_1164.ALL;
8 A! s+ U$ ^% H6 u% _; }7 w4 P4 K USE IEEE.STD_LOGIC_UNSIGNED.ALL; 8 @; W( e$ R. s
entity divclk is
" _3 Z" Y8 ^9 ]$ l. a   port(clk: in std_logic;
8 K$ O5 {, P) d% M8 b5 [: {         start:in std_logic;
1 }, l; W! K7 X. p, D: m4 A         enable:in std_logic_vector(1 downto 0);4 }4 a* E8 r* M6 e
         o_m_clk : out std_logic;
# n, Z$ V: z/ N" ^         o_sh,o_icg:  out std_logic;
' K# d- U4 ]" ]% N4 U         stop: out std_logic);
% S! A7 R' n( `7 `2 ^8 n8 c end divclk;+ h5 h+ y. j3 u
architecture behave1 of divclk is
0 k; w# j# D3 y6 d- K# p7 E4 H constant halftime :std_logic_vector(3 downto 0):="0101";! p: F( P0 E; Q# F4 X& C
signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu
. W7 }/ u3 U4 T+ } signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi1 t: s2 {2 }8 h0 F1 o
+ T) T; r; J' ]7 H: m4 F* F9 E/ r: Y signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi% d9 K0 \( Q* D7 ^- g0 Z* s# k1 p& t% t: M$ ^' q+ w7 `: W
signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge7 o6 n3 \2 a1 H6 K
8 T5 `2 _7 G( r signal clk1: std_logic;
3 A* m0 E% ~1 C. U begin8 [: H4 V' {, ~; V* C6 e
P1:process(clk,start)--24MHZ,12fenpin9 t2 ~$ C! P7 E) q+ {* [* E! ?
    begin
2 h* ?' R. A: Y  }5 N5 O4 ]$ f     if start='1' then
% s" O! h3 H$ Z% t! x9 `. t        clk1<='0';
1 V/ K1 a+ k: Z8 u7 L6 B$ _1 I' r        divcounter<="0000";
' w9 O! W2 o& J      elsif clk'event and clk='1' then
8 V9 C) @$ s/ R1 q( s9 K+ N6 T% N             if divcounter = halftime then" ^' p- h: k% P' T( U6 x% I
                clk1 <= not clk1;# h) W2 H6 J5 Z! f5 [
                divcounter <= "0000";4 @) J; H! }# \" W4 R3 p5 h! q- o
             else
7 b0 E4 o/ [/ w  O+ S  N               divcounter <= divcounter + 1;1 y  c& }/ `, ^7 w
             end if;4 q5 L4 z: u: M$ \" `
         end if;* ~+ r5 w( ~1 ?# K; t; R0 D
      o_m_clk <= clk1;% x% i7 K( J8 y2 c' |2 V
    end process P1;
) z; E7 S6 C' i1 x P2:process(clk1,start,enable)- h3 \' y% n; l& p
begin3 Z1 p9 t0 d* f: W$ Y- G& Z4 W; x
      if start <= '1' then# B5 n: J  _% v- \( {0 E7 p
         delay <="00";# O. }' o, m" H0 W
         shcounter <= "00000000000000";
, U% Y3 f" ^4 Y# O' _         icgcounter <= "000000000000000";
$ ~5 U. U- ?/ a         o_sh <= '0';
5 L" {1 c# N" @" [( ]         o_icg <='1';
* G1 o/ [1 O! R' b  t' Q3 \         stop <= '0';$ w+ q# e1 R! D/ o; ~  ~3 U3 {
      elsif enable = "01" then& G" d. n! r2 l8 M
         if clk1'event and clk1='1' then
" m; E. v$ ^* K            if icgcounter <"100111000100000" then    --20000....327677 \+ X. C- v* S! |0 Y, t7 [6 B: k
               icgcounter <= icgcounter +1;
# _( r1 |5 U  d' G2 d3 A* D               if icgcounter <"000000000010100" then   --201 o6 |/ i/ A. T+ Z
                  o_icg <= '0'; + C# i5 G2 _* z  _* l
               else
2 G; W5 L+ C+ Z                 o_icg <= '1'; , J) y8 l* C& V: _
               end if;
: s- A! I" Q5 P5 |            else
/ ]; K7 Q% O% Y) v/ H( w                icgcounter <= "000000000000000";   p' e# q5 b2 \
               stop<='1';. K. |$ P( M7 C+ A" u1 o8 T
            end if;' L& y& Y9 B' P. M4 {8 X
            if delay = "01"  then
" F% Q' K. k3 j3 R               delay <= "00";
9 s" v  ~# M! {$ v4 q8 x1 V               if shcounter < "00000000001001" then
: O0 }: l1 W; G- I; v0 u. c1 n                  shcounter <= shcounter +1;* \" X5 E( Q5 w3 B0 M
                   if shcounter <"00000000000101" then  o_sh <= '1';( G/ E1 I4 u/ _8 n# v
                     else   o_sh <= '0';( g7 W3 L6 e, X: L6 p" ]
                   end if;
! {4 [$ ?# p: t& \               else
3 j. m, U4 I* v) P  D               shcounter<= "00000000000000";
. Q1 X. T; o. u3 a% z4 |# {3 z                end if;
$ n! L6 f) R/ C1 M. [% @            else
  Z8 B- S+ I, v8 |- P; f                delay <= delay +1;
$ m6 s+ Z9 ~1 o9 o; u: _4 g            end if;
( i* K5 E" q# C9 r1 t          end if;
6 E* ?- e4 Q  c5 y7 T7 S        
5 |1 H$ E0 B4 b     elsif enable = "10" then8 U+ H! c; ?. O2 L
         if clk1'event and clk1='1' then) @6 n! ^, Z; E- ^9 ]
            if icgcounter <"100111000100000" then   ~1 s( |5 K, F& i
               icgcounter <= icgcounter +1;
% n4 h% M2 [% H. R3 R               if icgcounter <"000000000010100" then
; I6 J2 U: ^1 g7 Z( F9 z" F                 o_icg <= '0';
, y/ c: L! X$ ]1 ~7 h4 G               else
8 Y! W5 b# V" O* V9 }0 l: @                  o_icg <= '1'; 8 V3 k) R1 f4 j# a+ A! R% L! S2 o
               end if;
1 v8 P3 p- j% _  t# n9 y            else $ ]' u' i' f! ~1 O
               icgcounter <= "000000000000000";
1 F( `1 Z0 ^7 Z( A; D% W# o% l- R4 {               stop<='1';9 K! b$ y. |( [
            end if;
1 ^$ |# |  V$ o, @0 }7 l0 C, ~; d            if delay = "01"  then
" _* g0 e3 z+ U% P! {+ C3 v/ F! B- I               delay <= "00";
1 D6 J, s) @& ?/ C, R1 ^               if shcounter < "10011100010000" then) `" o7 Q% Y. Y/ N- M- z# |
                  shcounter <= shcounter +1;- {( C% U/ P2 E* H) ^* P9 l
                   if shcounter <"00000000000101" then
! Y4 s$ w8 |' T, }* g                      o_sh <= '1';
: @  q0 ?( x2 S% C                   else
! F+ U% x- |; r  Y- v                      o_sh <= '0';- O" F" a: D9 @- J
                   end if;
9 A+ j* j3 d; r: r/ l" x8 }               else
4 ]  I2 _- @3 G6 k5 l                   shcounter<= "00000000000000";3 f% T) d! x+ ~9 C
               end if;
; K* q: l  j9 i* J% R5 E            else
8 C, ^2 u3 m0 s4 l* ~+ X                delay <= delay +1;
) [" ~* ~0 @; m" @            end if;
) e+ K* a2 D1 e0 g         end if;: r9 m: K9 R6 j6 Z) e" o
    end if;
' ?. ?$ j. ?7 u6 i3 ^   end process P2;
, j; X1 [6 h4 d3 n# H. G end behave1;
; {# K: g$ g  C+ Z" A" J

未命名.jpg (36.61 KB, 下载次数: 1)

未命名.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-28 04:49 , Processed in 0.064615 second(s), 36 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表