找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

VHDL编译错误,请大家指教

[复制链接]

1

主题

5

帖子

-8984

积分

未知游客(0)

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

EDA365欢迎您!

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

x
本帖最后由 Annhu 于 2009-10-26 16:08 编辑
1 J0 {$ d* a% y' t6 A) X5 p/ q. Q7 [1 Y6 ]  B
:) 下面的程序是一款CCD的驱动程序,clk1=2MHZ,enable主要是控制sh的周期是10us还是10ms icg的周期不变始终为10ms,delay用于控制sh、icg的延时0.5us。编译错误见最下方,小弟把clk和enable的位置换了一下即先判断clk1上升沿然后在判断enable问题就解决了,麻烦高手帮忙看一下这到底是什么原因呢?还有j就是程序的代码有没有可以优化的地方呢,谢谢大家!
! g+ V" L/ c' h1 X--CCDshixu
( G3 f! u. ^( `: C! HLIBRARY IEEE;
0 ^' ^# W7 {% A' `1 c% xUSE IEEE.STD_LOGIC_1164.ALL;- [' m4 g+ H" A, B7 a
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
& e+ ]2 Z+ h- u' a* g" U. mentity divclk is
* O7 |5 z, C9 X; @   port(clk: in std_logic;2 X4 R/ A# B% m9 j3 {
        start:in std_logic;: ^& n- K- `' p- F% a2 G
        enable:in std_logic_vector(1 downto 0);
! o& ?* A2 H0 E7 k        o_m_clk  out std_logic;
: B& {/ n  P: {) A# I# S        o_sh,o_icg  out std_logic;        / z" `' l! ~: Y" b
        stop out std_logic);
1 b/ A$ k1 n# O* K+ D. Lend divclk;
% L6 o3 `: O7 D  \3 Q( f8 Yarchitecture behave1 of divclk is2 d7 Y* w" \2 M
constant halftime :std_logic_vector(3 downto 0):="0101";. Q  h) {1 `, N+ O& v$ M$ \8 t
signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu
3 p; m' e7 ?7 ?4 |signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi
+ _- K; p! P  P& Bsignal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi
# f: I8 K. S+ Y) r; |signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge: @$ p; ~3 r' T' z6 c
signal clk1: std_logic;
, R4 Q# |. L7 W3 \  g9 X) Qbegin$ h1 C2 P" e' I! B7 Q
P1:process(clk,start)--24MHZ,12fenpin
. L4 Z" ~% X; }& T" i   begin
& i$ H9 g5 g+ i- L, M' _' t     if start='1' then8 f  p) M5 i. p- l- X( s; `
       clk1<='0';8 j0 \; L! s/ O- j# V7 M
       divcounter<="0000";                                                                                                                                                          # A0 f/ F% P# ?, K- p
     elsif clk'event and clk='1' then
# A) v3 V. ^  d" f. J            if divcounter = halftime then
7 `# x' J; k$ w- g6 a: m6 u3 S               clk1 <= not clk1;, Z6 i/ O2 v( D7 z" m8 ^
               divcounter <= "0000";4 |1 S: m! L" V& ]) a1 L
            else
0 u6 A5 z7 U% O               divcounter <= divcounter + 1;8 g* e0 u- c  e' ~# r! ?* H
            end if;
7 [( `+ w& F5 v" P5 w& x5 Y$ Y- ?        end if;  F8 k, V2 D' q  v: ?5 \; Y
     o_m_clk <= clk1;( I6 E- @* I+ v4 Q
   end process P1;% n, H. k! z' G* W1 w2 w1 L
P2:process(clk1,start,enable)) j# w0 X, `* \
begin
! z* m4 `  T2 e% K( O/ C5 c     if start = '1' then
, _7 e- @8 j" o8 u9 E  v        delay <="00";
- x, {. u- }5 L8 l: B        shcounter <= "00000000000000";( d" E' N* D) H/ P& i
        icgcounter <= "000000000000000"; + n# ?3 `$ R, H
        o_sh <= '0';6 Y7 F! d; q6 q6 A
        o_icg <='1';
& l) ]. T; P1 s+ R4 y) L! Q; Z9 ]) r        stop <= '0';0 g/ z: Y0 E* O: @
     elsif enable = "01" then$ ^6 h, E# \5 x/ u) o+ N
        if clk1'event and clk1='1' then
1 a  X8 M& d7 L) z8 }           if icgcounter <"100111000100000" then  -- 20000分频产生10ms的周期8 o- G% c; V, b5 T% F) D3 @0 u
              icgcounter <= icgcounter +1;
3 R  E3 o  C1 i' Y  g5 V              if icgcounter <"000000000010100" then
* [' k2 J/ M$ Q/ D                 o_icg <= '0';               
2 q2 P  N6 P6 a0 v( |              else ' J, X' }8 D+ c# t
                 o_icg <= '1';               
( {" B5 ]$ R# @3 [/ `              end if;, {$ Q1 [( u0 q
           else 7 r/ v1 m$ V2 q* ~+ Q) \0 ?
               icgcounter <= "000000000000000";
! B) Q' q* S, p- P& T               stop<='1';& b9 x8 o! N9 l5 s! R! j
           end if;
; K. F( f+ b+ Q4 C. n0 v7 \           if delay = "01"  then
) p0 W1 T0 k' |8 c/ P* k9 o              delay <= "00";
4 P: h7 j" V$ U% w  \- U9 g: x              if shcounter < "00000000001001" then  -- delay用于产生ICG、SH的脉冲间隔0.5us,10us SH6 M2 N1 F1 C: V$ A' c, A, H
                 shcounter <= shcounter +1;' y. ~" e5 i  V- Q$ Z4 U6 ~* [
                  if shcounter <"00000000000101" then  o_sh <= '1';
, e. V$ o. r& w, ]- C) I                    else   o_sh <= '0';                     / I, R3 A5 y8 a2 C9 \
                  end if;              ; P8 q4 @0 J$ ^- H8 S1 b9 ~: H
              else+ E2 v3 `4 F6 o0 N% e( n0 z
              shcounter<= "00000000000000";1 C6 d: k6 l8 t. ~3 J
               end if;
0 L) O' |- a+ @           else
4 ~( m" X+ c! F+ A% D) J               delay <= delay +1;
$ s+ U$ Y; T, D           end if;
$ @3 V/ [$ \# d- l6 I         end if;5 v! R! X% h7 j& X5 I
       * U# r2 b9 F6 ^6 S+ y6 l, v
     elsif enable = "10" then
$ R! V! ^0 O" b" T" |+ Z8 }        if clk1'event and clk1='1' then! n2 {. u6 w, {: D
           if icgcounter <"100111000100000" then  -- 10ms ICG6 V2 S( B; j( Z6 r; X
              icgcounter <= icgcounter +1;
! p0 x0 M. F- e6 d6 l              if icgcounter <"000000000010100" then : U' s; W# U& }) F# t: }% A5 h
                 o_icg <= '0';               
7 U8 s! H8 `% A. x              else" D: X+ E0 ?+ U: D
                 o_icg <= '1';                " f, u0 W' J9 S3 v
              end if;
" {9 K; P; k0 v, ^" h0 U7 ^! u           else % M% K4 s* f$ C" o% c; L
               icgcounter <= "000000000000000"; * ^. z8 U0 j- \: l% _" w4 m
               stop<='1';3 Z* ~; Y- O4 r9 G3 L
           end if;
9 g$ i4 m) c. V8 ~           if delay = "01"  then
/ q# l' [! n; ~- Q# y              delay <= "00";
2 _; K4 a5 s. J1 B  P' G# a              if shcounter < "10011100010000" then  -- 2次10000分频delay用于产生ICG、SH的脉冲间隔0.5us,10ms SH
8 d! Q9 ^* L6 }' {1 s& D# p4 Q                 shcounter <= shcounter +1;
0 Q5 a- w7 M* `" D2 n                  if shcounter <"00000000000101" then  o3 `- r6 A8 a; Z6 b1 H5 n, M; g- f/ D% u
                     o_sh <= '1';
8 B( u6 M" S9 p' l, `; G                  else
6 W4 A$ @5 }. @4 Z                     o_sh <= '0';
; B, c5 ^1 R' T" @/ X                  end if;              
! a5 W+ k" j" R! j              else
, C# u) y4 Z! E                  shcounter<= "00000000000000";
  A% J/ X1 ~9 f              end if;
1 t7 `+ H) Y2 Q           else5 {% B' e9 v6 C& n) f  c* r" k6 f0 {
               delay <= delay +1;
2 p! s% @+ |& u0 t/ p7 t8 P           end if;       . n8 A) F& y  P+ E3 i% a5 z! ?0 p& t
        end if;
# J' G3 L; u$ z0 v# D: C   end if;  7 y) _, w: l+ {- I( C' @
  end process P2;
; l. a: r$ u. L; V7 ~end behave1;- @: N0 w4 i  H0 ?% y4 P3 O% k7 l  i
Error (10821): HDL error at divclk.vhd(42): can't infer register for "stop" because its behavior does not match any supported register model
+ D  i* k5 x6 _1 K; f) B, yError (10821): HDL error at divclk.vhd(42): can't infer register for "o_icg" because its behavior does not match any supported register model
2 U7 F( E& e" v: H6 F  rError (10821): HDL error at divclk.vhd(42): can't infer register for "o_sh" because its behavior does not match any supported register model9 u6 W1 m1 J5 h* b& ?! C
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[0]" because its behavior does not match any supported register
  X$ q! h' k" s! rmodel
  ]: z- ?; X/ r0 K  Y- CError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[1]" because its behavior does not match any supported register # J: m" C+ X6 ^+ i
model" ?7 r. C, {: K5 \) a! q( L
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[2]" because its behavior does not match any supported register
% |% j) I+ p" ?$ p/ r' omodel" Z+ y/ E" }& a- }* n( D6 F
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[3]" because its behavior does not match any supported register 6 G' H+ ~. W+ m! t
model/ Z2 p" B* ~1 N: |" e5 r5 s" _" F
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[4]" because its behavior does not match any supported register
  {' T3 m* |' q! g& I: h0 q3 p3 bmodel  o% M9 F: t; 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
1 }7 V6 W2 u7 }) q! ~7 @3 }model
2 i. Y; P  }( F8 j  g# G+ X, n8 [Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[6]" because its behavior does not match any supported register 4 m' f( P- j9 p1 O( x
model7 n/ ?- X  }: o  X
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[7]" because its behavior does not match any supported register
) A2 A1 }0 _4 x2 vmodel
* b6 L* d  \$ x8 b- mError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[8]" because its behavior does not match any supported register 8 w* f0 Y! }7 D
model
' ^2 ~% b/ o7 [8 A% k+ BError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[9]" because its behavior does not match any supported register & l4 Q$ {( t, f
model$ O( M" E2 S  T, D+ T
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[10]" because its behavior does not match any supported register " s; |2 t+ {, {3 z1 w
model- \" t. O4 {& s3 ?' r6 s0 |
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[11]" because its behavior does not match any supported register : @. d0 ?% m3 x2 I. F6 y- V
model
8 D7 ^% q" K& V1 _( J- X* r4 nError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[12]" because its behavior does not match any supported register
& V# }/ G1 S2 Fmodel
2 W3 G' O& c# ^1 XError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[13]" because its behavior does not match any supported register * a; C9 @. t8 ?1 w
model
5 x; D3 T# x7 o- G$ W" NError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[14]" because its behavior does not match any supported register " t( J, |0 f0 M1 n5 q
model3 h- v2 Q  @- _
Error (10821): HDL error at divclk.vhd(42): can't infer register for "shcounter[0]" because its behavior does not match any supported register ) I1 Z3 G7 e' G
model
3 t+ K1 I# S% F) iError: Can't elaborate top-level user hierarchy
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
天分-速度,勤奋-高度

6

主题

30

帖子

144

积分

二级会员(20)

Rank: 2Rank: 2

积分
144
6#
发表于 2012-2-26 13:58 | 只看该作者
LIBRARY IEEE;% A5 g8 z9 c  N; R& c! q7 Z3 d, Y
USE IEEE.STD_LOGIC_1164.ALL;: i, x- f* W! K$ C; B- D6 @3 E( q
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ' s; J( x5 f3 P- e
entity divclk is ' @* G9 r  p5 C  @
   port(clk: in std_logic;
- h# \+ v, Y$ q3 h         start:in std_logic;" X6 {+ d; W) B2 G8 z. }' @/ w
         enable:in std_logic_vector(1 downto 0);- s  @+ _4 o/ `7 Z# Y
         o_m_clk : out std_logic;; q  T* d  c, D) H" w+ R0 l/ W
         o_sh,o_icg:  out std_logic;& V+ X& `5 _3 U& R8 i; h
         stop: out std_logic);- u. @; _& ^7 P8 L8 f
end divclk;6 j& }2 b0 t; U# C
architecture behave1 of divclk is: X. O& N; s% C  L3 J" h
constant halftime :std_logic_vector(3 downto 0):="0101";
, z" G5 _2 i; _3 G; v4 |1 q signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu
* e% e  U" g) g5 Z' l signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi1 t: s2 {2 }8 h0 F1 o
; I( o, J9 ?: N$ {! i! s signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi% d9 K0 \( Q* D7 ^- g0 Z* s# k
, m3 p5 S( ^/ O, \0 z signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge7 o6 n3 \2 a1 H6 K1 H0 U; B  t4 `4 v9 t% ^
signal clk1: std_logic;1 O5 o7 h8 h" B/ K5 r
begin
: R- W, o9 [- X P1:process(clk,start)--24MHZ,12fenpin
# b1 X3 |. t8 \    begin
3 W" B7 ~$ k( l0 i9 C     if start='1' then
9 j; u! ]5 }$ }6 [5 m        clk1<='0';+ T; U5 d8 X$ F1 e& x  \) B
        divcounter<="0000";
) n# h6 w" J2 B7 D6 _! _0 i% W      elsif clk'event and clk='1' then
& A; j9 a' C" m2 c7 }* c2 O5 P+ m0 Y             if divcounter = halftime then8 W) O- P8 C" ~' V& z/ X
                clk1 <= not clk1;
) n& M6 U5 d" B+ M                divcounter <= "0000";4 U9 Y. K9 |; i" g
             else : @- M( A( |0 _6 g) M# g: _
               divcounter <= divcounter + 1;1 r; B. P/ f; _: F  f) e
             end if;% \0 [4 J6 C4 ?( g8 E
         end if;" e; _1 i' |9 u8 ?
      o_m_clk <= clk1;
* w" |$ b; n* S( `- V    end process P1;
9 L7 k% q$ s; }, x P2:process(clk1,start,enable). F$ d, J( s0 T2 J1 F. _
begin9 d4 |8 _! |( h. c( v
      if start <= '1' then
( E: Q/ O5 R5 L9 T         delay <="00";* f7 O& K% I3 b2 D. a# W1 ^& f
         shcounter <= "00000000000000";1 q. o; u2 F4 e( j$ n& l0 X* f5 I
         icgcounter <= "000000000000000";
" ]7 }" s& Z6 Z3 ]         o_sh <= '0';5 S" l) d1 m) V  A3 D2 }3 v, @9 `
         o_icg <='1';% D) t) Z1 h- B+ y- T& |
         stop <= '0';7 T0 }: k; v6 M. ?
      elsif enable = "01" then$ v& [6 h/ S. V: E) k2 ~2 D
         if clk1'event and clk1='1' then" ~, \$ M$ K. O, {5 Q% O: o
            if icgcounter <"100111000100000" then    --20000....32767) e6 N9 [% X+ }4 p2 U/ c
               icgcounter <= icgcounter +1;6 @4 e$ R" c3 k3 b# q
               if icgcounter <"000000000010100" then   --20
# I  T- U. y& |2 N) T; k9 @) w                  o_icg <= '0';
( Y. ]3 r+ }4 p4 X               else ! l( x. v! s: [! w, R" C& {
                 o_icg <= '1';
4 P; n6 w/ y; ]/ t) K( T" P               end if;
  z! I5 z( t+ A( u, E0 G& H            else
7 Q5 c2 t+ ^( N2 b                icgcounter <= "000000000000000";
; ?% q% n( V# @               stop<='1';( x+ K0 O5 ?, O2 i4 \: w- B2 ?. h! f* {
            end if;
* o! b1 @* K$ z5 j7 G. d4 W, l6 ]            if delay = "01"  then
) H8 k! [3 K( v/ M. V               delay <= "00";$ f! u3 Z; p% n# e, T
               if shcounter < "00000000001001" then
/ S; Q5 k$ a( B' D$ }                  shcounter <= shcounter +1;
3 @6 b! d+ n) V$ I# k5 y                   if shcounter <"00000000000101" then  o_sh <= '1';
' z3 _3 b9 ^, E6 p                     else   o_sh <= '0';0 e7 _7 A2 c: ]- t' I9 a0 A1 U
                   end if;3 t( i- [2 `. M9 J) D
               else$ n  a7 y5 G2 R! H& X
               shcounter<= "00000000000000";
. M- l' @5 m' V; _4 a                end if;
, f0 u2 s  M" t: o            else
$ ]/ [% Y$ c1 A2 I, U9 |+ [                delay <= delay +1;6 a/ P2 `# Y9 i3 Q# k; K# ~2 T9 b
            end if;
( Z) {8 i4 Z7 l) ^- |# P0 J2 L$ q( ]          end if;
- F5 @4 k' V7 L/ Q& u9 g        ) R5 Z4 ?% c! s: D: p: w8 T
     elsif enable = "10" then
0 G; u+ Y5 \$ T9 _! J         if clk1'event and clk1='1' then
9 T1 Z6 H2 ^- t) [0 K3 L( R4 F+ f8 y            if icgcounter <"100111000100000" then
% A3 H; A: z# C# F# R: o               icgcounter <= icgcounter +1;
2 y3 {* j$ ?* U4 _8 r               if icgcounter <"000000000010100" then ; N' k+ M, f0 Y
                 o_icg <= '0';
% h) {) H) u5 v2 V4 Z3 G7 B1 c               else
( Z; p. H8 k6 ~, I8 d                  o_icg <= '1'; 7 d- s* y7 D9 p" i4 n" L# e
               end if;
) o8 P* |% [% U7 R5 o            else . q$ o0 p) _: p1 ]) ]+ h1 {5 m: H
               icgcounter <= "000000000000000";
/ C% V. _; W" L9 f9 d+ r" L               stop<='1';
" u7 g& o! y4 N0 X$ A( n' y7 G            end if;
4 w& }/ q8 p6 o, n* A5 Y3 S            if delay = "01"  then) E+ k+ e! ~/ D8 j7 j; J8 r
               delay <= "00";$ c6 r0 P6 [7 `2 \( i
               if shcounter < "10011100010000" then
, W$ U( Y  C, K" v' o                  shcounter <= shcounter +1;
0 K- }0 b# V8 \* F                   if shcounter <"00000000000101" then
* }( C3 C1 L& ?) U1 k& Z+ x                      o_sh <= '1';
( L2 X! U2 J( p) O/ {: Q                   else0 A: m+ V+ b1 U9 Q
                      o_sh <= '0';
$ i- S" u4 R* K# {/ c- f, L                   end if;2 C) f& Q- P0 j2 [9 f- L6 U+ g
               else6 Y, K0 S/ T+ y# I* [, s
                   shcounter<= "00000000000000";
! r$ B. ~5 [8 t' T  X+ t, m( r               end if;; V; k4 ^4 z9 m
            else* I  a/ |6 D, j1 x* o. e- l
                delay <= delay +1;* m8 f4 o! X, c6 b3 V1 y- R
            end if;
; v& j3 V3 x: a         end if;
2 Y5 d4 }7 a3 U  ~    end if;1 Z# n* R3 b8 ?5 N. p6 {, ^
   end process P2;: J  o- G% E$ g/ q+ D2 I
end behave1;! z3 P: j+ T) V/ o

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

未命名.jpg

6

主题

30

帖子

144

积分

二级会员(20)

Rank: 2Rank: 2

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

26

主题

141

帖子

1639

积分

四级会员(40)

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

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

0

主题

7

帖子

-8991

积分

未知游客(0)

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

1

主题

5

帖子

-8984

积分

未知游客(0)

积分
-8984
2#
 楼主| 发表于 2009-10-28 19:32 | 只看该作者
怎么没人理呢?
天分-速度,勤奋-高度
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-19 05:59 , Processed in 0.061840 second(s), 36 queries , Gzip On.

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

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

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