找回密码
 注册
关于网站域名变更的通知
查看: 5077|回复: 5
打印 上一主题 下一主题

VHDL编译错误,请大家指教

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Annhu 于 2009-10-26 16:08 编辑 ) _! Q. p* W- k+ W9 N' R/ Y  r5 N
9 [& e+ R$ y0 {2 v" ^! \5 g
:) 下面的程序是一款CCD的驱动程序,clk1=2MHZ,enable主要是控制sh的周期是10us还是10ms icg的周期不变始终为10ms,delay用于控制sh、icg的延时0.5us。编译错误见最下方,小弟把clk和enable的位置换了一下即先判断clk1上升沿然后在判断enable问题就解决了,麻烦高手帮忙看一下这到底是什么原因呢?还有j就是程序的代码有没有可以优化的地方呢,谢谢大家!# j' c1 ~2 o5 X8 c! q
--CCDshixu
! N; A2 k6 x8 ILIBRARY IEEE;4 v: A& A  R* ^- D5 q
USE IEEE.STD_LOGIC_1164.ALL;
1 D  ?+ Q: t! s0 jUSE IEEE.STD_LOGIC_UNSIGNED.ALL;! \( q4 \3 j; c3 E" n: B/ q% L6 [
entity divclk is
. j4 e% O) v* n   port(clk: in std_logic;0 r# e. d2 E( o) F- i
        start:in std_logic;# ]$ ^- n9 ?8 ]0 g- ?
        enable:in std_logic_vector(1 downto 0);
( l  @) h+ \, U4 M7 s$ z' }& M        o_m_clk  out std_logic;
+ G/ h/ i# A4 i& D6 r        o_sh,o_icg  out std_logic;        : ~/ h* z% ^% X  @9 Q
        stop out std_logic);
& y  Q6 `" y! R. u' C% U  L' T6 r, Aend divclk;
! U  M0 Y& U4 J* h( m* rarchitecture behave1 of divclk is* _9 @! f; A  e
constant halftime :std_logic_vector(3 downto 0):="0101";
( {) r$ I# n+ T5 f3 m) b$ [' Wsignal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu
  H. {! i8 J9 t+ M' C  Gsignal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi
: k2 m5 K& n( o0 z* A- osignal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi
/ P/ A+ z. P6 J+ A' J4 nsignal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge
/ V4 E3 q  @: Osignal clk1: std_logic;; q* ~) h( n) A; p9 d; [2 M
begin
: V5 {& n' J5 y: A3 K5 y7 |P1:process(clk,start)--24MHZ,12fenpin
! e5 C8 f5 W5 Q2 G. K5 t   begin
8 u! X. g  t: }" O& `     if start='1' then
: p6 s" v, D' P' ^) s  q       clk1<='0';: u6 m  Z, Q  w4 q' I. j' S
       divcounter<="0000";                                                                                                                                                          7 G6 n0 n6 p' ]* v5 Q: @! Q* f
     elsif clk'event and clk='1' then
! `# x+ c4 N" r) C# e* Z: s$ p1 Q4 S, o            if divcounter = halftime then+ h7 y8 J1 ]! L+ V2 U
               clk1 <= not clk1;
5 L9 n3 x! ^- I: ]6 i  E: e3 Q# Z               divcounter <= "0000";( Z2 y& h# `6 M
            else
( R% ?# e1 a2 b               divcounter <= divcounter + 1;
6 M1 j  e2 R& ~4 d6 t" c            end if;
- ~- c# [3 R0 Z0 X6 r3 N: h        end if;" Y* ]" v: j# J4 n
     o_m_clk <= clk1;# {( K- @/ q& P0 U* s& g+ |+ w+ G  D
   end process P1;5 q: ]* D( z/ K: h" S
P2:process(clk1,start,enable)
. X" J- S9 _6 ^. abegin# f" q1 ^$ ^7 q! q$ v4 h$ `
     if start = '1' then
& x  m- P9 Q4 v! s$ j  A5 h        delay <="00";, t! z. r/ ^; ~' D0 B. A$ O9 k
        shcounter <= "00000000000000";/ T% q" D- n6 j( Z# Y
        icgcounter <= "000000000000000";
& Z7 Y) U4 O# t8 G# u  F7 N        o_sh <= '0';& m; n5 w7 E  i2 N4 G9 P5 Z3 ~
        o_icg <='1';( D' j5 D9 H1 n4 u
        stop <= '0';( _: w4 L& p" I, k/ m- D
     elsif enable = "01" then0 F) K+ v& w1 h" }4 N8 L7 L) b
        if clk1'event and clk1='1' then1 U9 s- f/ c3 z
           if icgcounter <"100111000100000" then  -- 20000分频产生10ms的周期! i+ @; @/ G, Z  k# `  b
              icgcounter <= icgcounter +1;
# J, Y; @  _% y/ y+ W; I% v5 c) A3 f& |              if icgcounter <"000000000010100" then * ^, `( {! e, _' z) W
                 o_icg <= '0';                6 q% ~4 T( t0 f! S
              else
: B) N2 Z. D6 h3 A% v, t                 o_icg <= '1';                $ k4 O, D5 U& q* {" {6 U
              end if;
- L9 b3 L2 L/ i  K- E1 y           else
& f7 H. j/ X' d               icgcounter <= "000000000000000"; " C0 U6 @: L# k
               stop<='1';# a4 J& `3 z( L4 j& y* j7 R" y/ S
           end if;
# H; W  ^  N, R0 |, g7 X. T           if delay = "01"  then
( I! y1 k6 f+ o1 g' d              delay <= "00";7 @+ q& s/ D& a/ b: q
              if shcounter < "00000000001001" then  -- delay用于产生ICG、SH的脉冲间隔0.5us,10us SH" Q+ q  E) e0 ~* \! n* f: A
                 shcounter <= shcounter +1;3 Z1 I. E' o$ \% X
                  if shcounter <"00000000000101" then  o_sh <= '1';
  t* O0 ?) U! M6 V0 b0 x" t* l# w                    else   o_sh <= '0';                     
( m% t+ P+ t( r1 y2 k                  end if;              8 h: E& l6 z1 `# z7 p% u1 k
              else; O7 f& d8 Y6 Z0 N& I( P
              shcounter<= "00000000000000";/ |6 |8 p1 |# p& u/ P
               end if;* N" V6 I- V  `$ j0 O
           else
# I9 J% I% J, f% p9 H8 B- {; O               delay <= delay +1;: Y3 p# Y* F: L1 B7 I
           end if;1 P; g# S( \8 Q- T
         end if;2 H! w' E' m3 h5 T8 n6 s
      
6 u7 z  a7 _$ t4 i! F     elsif enable = "10" then
& x- V3 k9 s* D" O4 ^/ H, e        if clk1'event and clk1='1' then6 K$ z/ T: a# o& u9 m; r
           if icgcounter <"100111000100000" then  -- 10ms ICG& {3 }6 @& |0 @
              icgcounter <= icgcounter +1;  i: w. A% E( y' H0 n$ D5 k
              if icgcounter <"000000000010100" then
5 R  H  P. ]: l( X, S0 P                 o_icg <= '0';               
  O. z2 o) `. w8 \. q1 }6 v/ t9 I              else9 l) Q4 a" `5 ~. G! v
                 o_icg <= '1';               
9 E; @8 V- c. F. S7 }6 `, d              end if;+ g  X/ O0 b3 H8 P1 m
           else 7 V1 N1 I5 n" e0 Z
               icgcounter <= "000000000000000";
* d$ K+ \6 Y0 h" U               stop<='1';
$ v8 T6 _1 q# y, ^& I+ i           end if;
7 o0 e6 {3 N- Q; ?           if delay = "01"  then" k9 M' c# J1 O4 b$ u9 c
              delay <= "00";1 B' a5 J  `0 O0 u" c' n* ?/ Y
              if shcounter < "10011100010000" then  -- 2次10000分频delay用于产生ICG、SH的脉冲间隔0.5us,10ms SH
  G" V' `6 z. F* f: {, `# [                 shcounter <= shcounter +1;
  }& R& }- Y: Q, r# Z                  if shcounter <"00000000000101" then
- L; O. v  W8 ^( n1 Q7 `% {% ^                     o_sh <= '1';
2 T3 C( `, T* T; m# W4 G- k                  else* D* r2 o  J# h1 N3 _6 _! D8 A6 g
                     o_sh <= '0';
( n, ^" L* p. V& t- T* Y                  end if;              6 j; N7 f5 w; v  n$ i
              else! A1 u' N" S) K. h9 B  d
                  shcounter<= "00000000000000";
5 K  s! L, F4 k, E- u+ X) A) I( X% u4 d              end if;
2 ~% {- T* C! E# M           else9 q  y$ [8 G% ^, |
               delay <= delay +1;
3 o( ?! ]/ M, F0 f+ I0 h5 j           end if;      
5 p0 e' w7 g9 x6 R/ M7 H8 K        end if;
$ @( z) q# `( a$ K. t" l  v   end if;  2 V1 G( b4 ]& d; v3 ]. R& ]
  end process P2;
/ R& G& P+ u" w& ]0 X' A( h' @: Wend behave1;7 g9 V0 D8 _) G9 y5 s
Error (10821): HDL error at divclk.vhd(42): can't infer register for "stop" because its behavior does not match any supported register model& P3 c. ?: G' S( S  c
Error (10821): HDL error at divclk.vhd(42): can't infer register for "o_icg" because its behavior does not match any supported register model2 h" }5 L+ B: [% Z; `1 ^- W1 ?
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
+ O5 l5 U' z& C% v. O  J- |: z7 ]Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[0]" because its behavior does not match any supported register ' O$ ]4 H: y' D# e
model! O- @# @( e: B& n- y$ ^
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[1]" because its behavior does not match any supported register
" T$ ]) `( L, f2 l. b* |model
- r7 q9 E& n/ {; @. o, [" K# |* rError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[2]" because its behavior does not match any supported register
9 G* D' r8 S$ s- Z! Z  G5 \model
! n( q4 I% L2 `2 c/ ]% W5 _Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[3]" because its behavior does not match any supported register 5 f# W& y, ^+ F  Y
model
# c; I) \: H: ~3 W8 S# IError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[4]" because its behavior does not match any supported register
/ z  ~# Q1 l7 _# e$ O. zmodel
9 O7 ^# c% i( z; A$ Z# CError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[5]" because its behavior does not match any supported register
1 `5 g- h: p' f4 rmodel
( n$ b2 I9 w  L6 ZError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[6]" because its behavior does not match any supported register
$ C  X  f  r' ~( Zmodel
- g( s# L% m( XError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[7]" because its behavior does not match any supported register
  g' s; W4 K. d0 a, T. k* ^4 cmodel& l8 L3 H, i$ H: E2 w5 d
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[8]" because its behavior does not match any supported register
' I0 S: M- g2 J" {  O2 b! ymodel8 H( ^& q9 m; L4 A& j# \
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[9]" because its behavior does not match any supported register 0 _( Z3 U7 {; T& B) V5 Q& a
model) K4 A* j$ S; T) t8 u
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[10]" because its behavior does not match any supported register 4 L. V5 U) x8 x! q
model: s/ H9 z$ A' o3 Q9 m* x
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[11]" because its behavior does not match any supported register 7 D" |9 J1 U, G# P" O+ ?& r8 Q
model
& z" Y: a) f( }% |: xError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[12]" because its behavior does not match any supported register
# T  D% v0 Q" e, Omodel9 o' p8 G$ `( D. W
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[13]" because its behavior does not match any supported register - C7 {  z3 X7 e5 p
model/ Y2 U1 B$ K% }) V4 |
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[14]" because its behavior does not match any supported register
- d& ^" w3 X- u# K' I& |; M) x" L3 gmodel7 W4 x) o0 N, k8 V3 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 , H2 I& }1 t  Z$ Q. ?' G; I6 Q0 ~
model( G' ~, H  e2 J, w
Error: Can't elaborate top-level user hierarchy

该用户从未签到

2#
 楼主| 发表于 2009-10-28 19:32 | 只看该作者
怎么没人理呢?

该用户从未签到

3#
发表于 2009-11-4 19:43 | 只看该作者
错误太多了 得一步一步找 一下是看不出来的 所以没人里
  • TA的每日心情
    无聊
    2019-11-20 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

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

    该用户从未签到

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

    该用户从未签到

    6#
    发表于 2012-2-26 13:58 | 只看该作者
    LIBRARY IEEE;
    $ Z1 v+ C* E; |$ a4 | USE IEEE.STD_LOGIC_1164.ALL;
    + S" s# }' i. n; h) k0 p+ Z USE IEEE.STD_LOGIC_UNSIGNED.ALL;
    9 J: P' ~0 S' W1 _" |; T entity divclk is 9 E3 s7 V+ t9 {3 p# ~
       port(clk: in std_logic;/ i6 ?6 @  ?9 E. I0 w. L' X! B
             start:in std_logic;6 ^/ r3 o0 Q. ]# O3 v" k! x' A- O1 t
             enable:in std_logic_vector(1 downto 0);) ]6 T, o' e, h# l5 z
             o_m_clk : out std_logic;
    - Q0 |  V; }4 B6 A1 D% j. T         o_sh,o_icg:  out std_logic;
    ( M+ t( K2 W, s+ p         stop: out std_logic);
    : c1 R% S  c5 ~5 k5 q end divclk;
    9 ]$ N5 H6 o9 ~/ E5 y# U9 u architecture behave1 of divclk is
    " G$ }8 {# x) g4 N8 v constant halftime :std_logic_vector(3 downto 0):="0101";
    ! m3 n" J! S# m1 X" N- M signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu: m5 p/ T: O/ W: t
    signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi1 t: s2 {2 }8 h0 F1 o% w/ L1 H0 [$ I/ R9 U, V! p  A
    signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi% d9 K0 \( Q* D7 ^- g0 Z* s# k
    " x! i1 o* w% l8 E signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge7 o6 n3 \2 a1 H6 K
    ! s! m; E! J9 ]+ R0 Z' g signal clk1: std_logic;
    ! ~, x) q* F( m! M, Q/ Y1 Z begin
    : _0 [+ f) R: L. W. N P1:process(clk,start)--24MHZ,12fenpin
    : ^- q. Y) z" R/ j" i4 p    begin 0 ^5 H. o/ F! D% E
         if start='1' then
    ) U4 {! h8 \6 c0 A        clk1<='0';
    1 I9 V! g, @4 F2 Q        divcounter<="0000";" j+ |; g  _; v* ]8 `- J  w7 P6 ]3 g$ J8 d
          elsif clk'event and clk='1' then
    ' T  v! J8 }/ x( C( h" \             if divcounter = halftime then0 Z* t- }. I" A) e
                    clk1 <= not clk1;* \( u- J6 n8 `: r# P
                    divcounter <= "0000";. O2 ]0 u. I: ]* v' n
                 else 5 d. ^4 P' d) g* \- t+ C0 ^1 F
                   divcounter <= divcounter + 1;. B9 i* [- e0 g6 d% z5 Z0 X8 D: \% x" T
                 end if;0 Y1 _' m# r) r' T3 ^8 @8 X1 b
             end if;' N; z) q) B9 e
          o_m_clk <= clk1;' y0 h' x& m9 q6 r4 U9 R  \3 c
        end process P1;
    " x% f0 g' K( @# M) U/ @3 R0 d P2:process(clk1,start,enable)2 U; `, L, Y) Y9 Z* d0 u5 s
    begin4 w" O. a5 P1 [1 o
          if start <= '1' then: D; p6 R5 F# |5 H7 S2 g0 F! S5 }
             delay <="00";
    # w4 o# b$ B1 j! [1 t# o         shcounter <= "00000000000000";) N( D8 W& L' `
             icgcounter <= "000000000000000"; ; o* K% g6 v# a
             o_sh <= '0';# @7 y8 x$ m1 `* R  m1 B* m" u
             o_icg <='1';) W! j; ~. H) q6 {$ D; d
             stop <= '0';
    * v" J+ c) P: L; e      elsif enable = "01" then8 W1 _3 P0 _" r# }, `3 ]' r
             if clk1'event and clk1='1' then
    0 \+ J- ]  g* A6 a/ V* H  V            if icgcounter <"100111000100000" then    --20000....32767' z3 e  c- z" I# W. f9 ^$ t3 e
                   icgcounter <= icgcounter +1;9 Y0 o3 v2 w6 r" h+ h: |' K; V3 l: ]
                   if icgcounter <"000000000010100" then   --20" Z4 L! z8 m5 z) ]
                      o_icg <= '0';
    7 Z9 R7 u2 z: }; |0 b+ v1 E               else
    $ G! L8 K8 g7 R2 }" y: q7 S                 o_icg <= '1';
    4 V  I) S8 m1 x0 n# V2 {/ _. e  l$ C               end if;# N7 t" l) K4 f2 V/ d% S; A* T) @
                else: ]4 a/ e2 I+ \# `' ]* O& v+ `. c
                    icgcounter <= "000000000000000";
    ; c! C4 M. Y8 ?& \  v- Q, c& u               stop<='1';6 {7 v, l* v8 @' Y1 n
                end if;) S( W' a! `; C
                if delay = "01"  then
    6 E  d( x. B7 f% p4 b               delay <= "00";
    ' v- z; ?2 ~  x7 B               if shcounter < "00000000001001" then
    4 h9 m) ~, B9 t+ w                  shcounter <= shcounter +1;" l$ a! ^4 _1 s/ F
                       if shcounter <"00000000000101" then  o_sh <= '1';/ M- C& ^0 r) e1 ?
                         else   o_sh <= '0';& A! ?. v. d) Q( |/ v) D1 S( }$ u
                       end if;
    " {+ u+ S' {- Q. }( O: S. A# S               else
    ! j, t2 [8 p' i: I3 X               shcounter<= "00000000000000";9 s6 J5 a# Z) [- f; V
                    end if;
    - e1 H1 V+ J2 o( g" x1 @            else; O# _3 |: N& S, o5 y1 W) Q
                    delay <= delay +1;
    / S. L/ V9 P1 q0 N% Z$ E            end if;* l! C; Y; [( u6 S: p
              end if;
    % g, r5 T0 g: D; r/ [: s        $ a; P. _- Z! a" A& ?
         elsif enable = "10" then8 U: p# `3 ~6 n% {
             if clk1'event and clk1='1' then
    " x: E, S8 M. X  f/ w" |2 p            if icgcounter <"100111000100000" then
    1 Q3 z& G9 n1 e% W* E8 U               icgcounter <= icgcounter +1;: `7 W+ u5 @$ j$ Z+ K% J
                   if icgcounter <"000000000010100" then % L$ {" A' ~& e2 Y7 y
                     o_icg <= '0';  x4 S7 j5 h# A
                   else, Q; E  t! @% P9 C  N9 |. T6 k
                      o_icg <= '1';
    ) U( @" F% P6 W" q               end if;
    8 `, }( w  Z1 _8 i& l            else - Z2 K! p9 k* E# z7 h
                   icgcounter <= "000000000000000"; $ n  h4 S1 z. ~3 _9 F6 t6 _+ s
                   stop<='1';
    ; l( `7 s+ ]" E, G            end if;4 e1 d. A. d0 r" U* \9 w# t
                if delay = "01"  then
    : `% R$ S/ B5 T4 {# ~* k               delay <= "00";4 a% Y% I+ S! B, ~7 E# l
                   if shcounter < "10011100010000" then# d+ P3 O( @* d
                      shcounter <= shcounter +1;
    7 k: n. X0 M, `- ?                   if shcounter <"00000000000101" then
    % y  V, V. J, L* Z  O- w! {                      o_sh <= '1';
    # y7 v0 f8 d' j/ d- n2 O. _/ e# P                   else6 `2 R9 T+ q: e7 l* D- }8 a
                          o_sh <= '0';" ~0 _$ ^" e$ V9 |, R, ~, ^  s
                       end if;: ^+ Y& H/ E8 h
                   else, {/ L% n- z1 _- c: O( w0 n' Y, w
                       shcounter<= "00000000000000";8 x/ j9 P0 S: h$ ~5 Y' p/ R
                   end if;# @, w: T6 o" V+ F# [' `
                else& _+ X) l" g# f6 m: V
                    delay <= delay +1;
    9 b7 ~- Y) D! W) m, Q            end if;
    - l# U0 }# u2 I( ~; J% D0 @         end if;& G; Y9 H; w2 ?/ ^, F% G/ H, T+ Q
        end if;
    0 b( Q# P' d% C3 E( O   end process P2;+ T" h; \% g5 h; o( X+ G
    end behave1;) F* Y- U2 R3 J: `  j9 ~

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

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

    本版积分规则

    关闭

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

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-30 04:11 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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