找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

VHDL编译错误,请大家指教

[复制链接]

1

主题

5

帖子

-8984

积分

未知游客(0)

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

EDA365欢迎您!

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

x
本帖最后由 Annhu 于 2009-10-26 16:08 编辑
. X  k' K" b; T: c- ~  m5 n* l7 {  k  S, y' k
:) 下面的程序是一款CCD的驱动程序,clk1=2MHZ,enable主要是控制sh的周期是10us还是10ms icg的周期不变始终为10ms,delay用于控制sh、icg的延时0.5us。编译错误见最下方,小弟把clk和enable的位置换了一下即先判断clk1上升沿然后在判断enable问题就解决了,麻烦高手帮忙看一下这到底是什么原因呢?还有j就是程序的代码有没有可以优化的地方呢,谢谢大家!
- S* W/ L8 ], N* c! q) N--CCDshixu " p5 R2 Z! W  k# g+ S7 E4 ^+ J8 a# t
LIBRARY IEEE;: L$ ?* a, Y0 A' l7 p# l0 Y, L
USE IEEE.STD_LOGIC_1164.ALL;; n% s) w* e" o
USE IEEE.STD_LOGIC_UNSIGNED.ALL;4 M+ J! r) H% c6 m3 P5 W
entity divclk is
; p7 A8 ]$ c, @2 E- g- u. x! d   port(clk: in std_logic;
  _+ w7 e6 u5 x% W$ n- P  w        start:in std_logic;
; f/ C/ `9 o9 \; S) \; A3 N/ e3 F        enable:in std_logic_vector(1 downto 0);
9 x3 y2 P7 h$ ]: m- e        o_m_clk  out std_logic;5 a, F4 f' H2 f4 |9 g( F8 D
        o_sh,o_icg  out std_logic;        ' U' \& J* m: R) T: h
        stop out std_logic);
4 X- [' T4 T6 s2 N* R# t+ \end divclk;' B. l& z) u3 D" ]% x
architecture behave1 of divclk is. }, v# B& `: e- t- O
constant halftime :std_logic_vector(3 downto 0):="0101";
. f3 a; G. U; d% ysignal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu
1 R  F4 z0 c5 d; i/ P+ z' {signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi5 x/ |& |6 j3 _3 I0 M' h: [
signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi9 b# h. K- q1 y( O; a
signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge8 E, [6 s" g; n+ j9 L. b
signal clk1: std_logic;
/ {# p& W6 U2 b9 wbegin1 p: t8 K# M: R, y9 ^' K
P1:process(clk,start)--24MHZ,12fenpin  p4 q- r% R: l
   begin
# L7 J7 J: S; ^  p' ~. X     if start='1' then: ~. d5 J9 h- S" ~: q: ~
       clk1<='0';' q/ p- D* ?; D1 S; n
       divcounter<="0000";                                                                                                                                                          ' ^  {9 n. w1 F  A$ B+ U5 a
     elsif clk'event and clk='1' then
& @( ^. D5 R" q0 V& I            if divcounter = halftime then
5 U3 {( ^9 o, P9 n( X5 n               clk1 <= not clk1;
" k1 |+ e3 Q4 ]: t4 Y# b' d               divcounter <= "0000";
. u" W2 r$ R( Z8 T9 j& F4 z2 v0 U            else
- g. e' d" \$ s6 a. f# [- p% ?( r               divcounter <= divcounter + 1;
) `  C7 q9 b2 P3 G1 i& S            end if;
4 W; S( O3 l) B7 Z: p- M0 n1 H        end if;
* Q4 P0 g# ?0 X% k* p+ ?, u     o_m_clk <= clk1;
8 v' [: [8 i& y5 P- H   end process P1;
5 g9 n0 ?! ^5 w8 ]* ]2 fP2:process(clk1,start,enable)
( v0 R7 O; d# Q% Lbegin
" Y6 K. _3 ]! Q  J1 [6 [9 T4 }     if start = '1' then9 @! _4 w8 H8 h5 y5 e( n4 s8 C
        delay <="00";7 _  v- p; T3 F5 _2 K/ B% ^4 q
        shcounter <= "00000000000000";
2 w" d$ f$ O- ]* n2 S        icgcounter <= "000000000000000"; ( V3 L$ v1 U. t
        o_sh <= '0';
6 B7 n  y0 U0 z% u; Q: f  R        o_icg <='1';
5 l1 a+ J8 D9 z* E6 x7 J* b        stop <= '0';6 U' s* a* D7 T
     elsif enable = "01" then
$ r! u/ B5 c( T2 ]/ _! {        if clk1'event and clk1='1' then( l- ~7 h: O" r' }! Q$ Q, r
           if icgcounter <"100111000100000" then  -- 20000分频产生10ms的周期
' C. k+ g8 B4 Y" I              icgcounter <= icgcounter +1;! Z6 F* p- s- e7 L3 t* m
              if icgcounter <"000000000010100" then % A9 n# @! r% ?& u  |. c
                 o_icg <= '0';               
; L& v6 f  @0 ?0 _              else
7 D' u" J( o6 ]9 U4 P; o3 T0 P                 o_icg <= '1';               
3 q! |. m  L1 k              end if;( r$ Q. i9 j; s, z( @7 D
           else 8 V! i" X# M4 K
               icgcounter <= "000000000000000"; " A* O6 _* s3 C% }) G3 p
               stop<='1';) P1 w0 |$ i. R  ^, H5 s: x
           end if;+ }8 D  I. F0 G1 y
           if delay = "01"  then
4 [. Y1 J: C. W! ?9 w% O- H: k              delay <= "00";
1 z. u7 j" }& m- q. t0 |2 k              if shcounter < "00000000001001" then  -- delay用于产生ICG、SH的脉冲间隔0.5us,10us SH
* F4 _+ K0 r7 [5 a0 |                 shcounter <= shcounter +1;  a: ?% ?1 N. d( |9 [
                  if shcounter <"00000000000101" then  o_sh <= '1';
0 Q6 |. E. F2 \  O8 t" P                    else   o_sh <= '0';                     
1 d" b% g& }  T& J- [0 X                  end if;              ) }$ @, H: t0 v# w3 U" j
              else4 a# O* W. [! [# G
              shcounter<= "00000000000000";
, ~- Z3 L9 X# V: J7 K               end if;5 s0 Q8 H, t! E8 u# W
           else0 P2 @$ Q$ N, D0 e- A' J
               delay <= delay +1;
0 P/ ~0 j" C  L' ^, h) \% {1 y           end if;
) S) p; l- `) I' d4 p# o         end if;
& V! x, k, e) s3 }- V      
( h4 I) s2 h& D: z4 n0 M     elsif enable = "10" then3 t! u7 [/ I" m% K2 k
        if clk1'event and clk1='1' then
6 ^/ ^. ?7 b: A           if icgcounter <"100111000100000" then  -- 10ms ICG
" z0 e, v) E; p1 K; Q              icgcounter <= icgcounter +1;% X6 f" ~+ I4 z6 l: F! m) g# ~( J
              if icgcounter <"000000000010100" then
8 E6 e; e- a2 h, i* n" ?                 o_icg <= '0';               
0 d; B5 T  F+ G- \) G4 z- z              else
+ S  E2 u1 o( x0 l- M8 K' j. ]                 o_icg <= '1';               
$ G3 ]1 U# r+ i              end if;
0 W# F8 H: d" x8 Q% n1 U           else 1 Y, v- T% @7 c7 e$ u% q% x( ?* ]+ f
               icgcounter <= "000000000000000";
6 E7 y, D; ^0 H: B3 x- a               stop<='1';
& ?* G  r! p5 s8 ~           end if;
& F" S: X+ a! Y& ]8 l           if delay = "01"  then5 |7 c6 V: c/ G1 m" c
              delay <= "00";
6 U* w( ^" L2 E* \' i' ], h$ U. E7 Y              if shcounter < "10011100010000" then  -- 2次10000分频delay用于产生ICG、SH的脉冲间隔0.5us,10ms SH
2 W7 k9 n8 h; M6 O8 C+ }                 shcounter <= shcounter +1;
# n; Q% h$ v6 n9 ~+ l( r, y! @( L                  if shcounter <"00000000000101" then/ k& M4 s6 j2 t
                     o_sh <= '1';( \- t# d2 O: r8 \7 K
                  else
+ G8 Q6 J1 d) \: v                     o_sh <= '0';
9 z/ {% m+ H+ Q& e- e3 n                  end if;              8 f. U# \8 g" e% x9 D
              else- T3 W; h" \  C% R0 y
                  shcounter<= "00000000000000";
& @6 Z4 C' g/ N# P7 E0 \5 _& ?              end if;
' a2 b, C( a9 j           else4 h- A$ c/ ~# B: C, k8 }
               delay <= delay +1;$ i. r3 U( _+ r, B" C5 E+ b6 q
           end if;       ' r; V  N' [/ f
        end if;
5 ?* }% _: v# ^- h- Y   end if;  4 `% q5 ?! n; b
  end process P2;
$ A, p) }" y. Y7 l$ Q# a4 ]end behave1;
& G! ~$ W" U$ ?: q: oError (10821): HDL error at divclk.vhd(42): can't infer register for "stop" because its behavior does not match any supported register model3 T" |+ j# ~$ e' K; b( m7 K! `2 V8 b
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
4 r+ c( x1 u: e/ N5 V% SError (10821): HDL error at divclk.vhd(42): can't infer register for "o_sh" because its behavior does not match any supported register model  ?  K. q& r* Q0 {% j  K  o
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[0]" because its behavior does not match any supported register
! y1 c+ b) I6 J# u( [- Nmodel$ r2 {% ^7 R2 U: k7 Z
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[1]" because its behavior does not match any supported register : Q) w; K+ }. o! t! d
model
9 [+ G5 q6 N! u5 x7 qError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[2]" because its behavior does not match any supported register
% @8 p" [  c$ q3 i2 f$ }model
- ?9 J6 N5 j* G; G. ~Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[3]" because its behavior does not match any supported register
8 ]1 q7 E* A  o: Kmodel
3 }3 E- N1 Q4 O9 ~5 s* n+ [# rError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[4]" because its behavior does not match any supported register , a: ?6 u5 g& V) d9 {8 i+ {) E
model
, B# c! F4 x8 cError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[5]" because its behavior does not match any supported register 3 s" u' s! l2 m: _
model
0 `: c+ I2 m! EError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[6]" because its behavior does not match any supported register " R: O  e( a) L- A
model
" W. i/ x( I! u& vError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[7]" because its behavior does not match any supported register
9 l* P- K4 K" U$ R$ `5 {/ `; E1 Nmodel& [  O9 u, F6 D6 d. d% j, K. W
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[8]" because its behavior does not match any supported register
* d6 L  ~$ `; z4 G' i3 V' x2 Nmodel$ t+ Q$ ?. j, V/ P+ ]
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[9]" because its behavior does not match any supported register
1 b- I- r( V: r) V8 Z$ ~# Fmodel
- [4 A: D9 M' kError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[10]" because its behavior does not match any supported register
: {& ?& D7 a( {  ^9 Q5 tmodel7 A$ ?5 k& Q1 X; W2 r' o
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[11]" because its behavior does not match any supported register ) A1 L) W# G: f# t& k0 Q
model
1 q7 L3 j' g/ S7 u/ cError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[12]" because its behavior does not match any supported register
# @5 e6 c6 G" b& t' d, G, hmodel$ h( o/ d8 Q  d0 L
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[13]" because its behavior does not match any supported register
; b' i% Y3 B( B( y- C2 ^$ Gmodel
" v  _# R- S1 k: y, p* QError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[14]" because its behavior does not match any supported register
. @/ z5 Y6 p! R2 z- V  B; M" f; omodel
1 D0 q8 c; r6 t3 _7 O0 i# dError (10821): HDL error at divclk.vhd(42): can't infer register for "shcounter[0]" because its behavior does not match any supported register
" f, [, q8 c* K5 e: }% s1 tmodel4 f# ]% h" S- `* ?* V  _' N! l6 r4 u
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;
8 Z8 J7 F3 a' H USE IEEE.STD_LOGIC_1164.ALL;. o1 G& D8 x( ^  n6 k
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ( Q3 `6 \3 L% T! c' p0 d
entity divclk is 8 }% Y5 e4 d$ E1 ?5 N
   port(clk: in std_logic;
6 P/ C; [( k4 G5 d6 ?8 K6 t5 U! @/ n         start:in std_logic;
3 _0 p: E0 G  f6 I+ X) w         enable:in std_logic_vector(1 downto 0);
  l+ L1 h. {- {) R         o_m_clk : out std_logic;" \# X/ j& z% Y
         o_sh,o_icg:  out std_logic;
9 F, N! e/ G. G! q+ d$ A         stop: out std_logic);' i6 g$ l) E$ @# z0 i9 ~+ b
end divclk;
% N- n4 O, o* J5 d# N. d! ?/ S6 J# m architecture behave1 of divclk is" M3 ~: ~( {: y! N9 |- r. ~
constant halftime :std_logic_vector(3 downto 0):="0101";4 N. j& [) J5 ^3 C1 T7 R- ?
signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu
( ?0 Q! I/ O% [$ v signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi1 t: s2 {2 }8 h0 F1 o. M8 c+ ~# l( z+ C) [( y" X
signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi% d9 K0 \( Q* D7 ^- g0 Z* s# k5 L/ A: c  C) U
signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge7 o6 n3 \2 a1 H6 K* w. D" X1 I, }, c
signal clk1: std_logic;* `- ~! R3 \8 E
begin
  D! E" l( S9 s2 I) [2 k% C8 I7 g+ A P1:process(clk,start)--24MHZ,12fenpin
4 B) i$ `% ?: ]0 s: n2 O9 w8 B    begin $ ^4 ^+ X' k3 T2 ], }8 y
     if start='1' then! X$ [8 B" E  d; G# a
        clk1<='0';
* w7 ~9 o$ P" c1 z+ M4 e        divcounter<="0000";
: A. \1 Y* M+ v* Y+ h      elsif clk'event and clk='1' then. v% @1 Y& ~2 U9 |- M) R3 O3 l
             if divcounter = halftime then3 e0 z# q! j" o. J4 Q
                clk1 <= not clk1;6 ]  h" ]; g/ y1 }2 J+ J
                divcounter <= "0000";0 [3 E: T4 D  [7 v) d
             else
' z  Q/ A. u* p% O1 \               divcounter <= divcounter + 1;% y% k( `8 b/ d& R/ f
             end if;
6 @  r  h; z- S         end if;
& z& r5 h$ i, H$ \+ C      o_m_clk <= clk1;
; W+ H5 K/ _$ E+ t    end process P1;
5 y3 s) Q! j% B P2:process(clk1,start,enable)
$ i3 v+ _1 I" i9 c8 @' ]: c) R begin2 Y, K$ w' J# X, t) u
      if start <= '1' then
2 {/ q) n* E7 y! I6 y         delay <="00";
  p; V. n" N/ ^* Z) L" }9 p% H1 D         shcounter <= "00000000000000";$ B5 X4 `. Z, @; x$ O  E1 C
         icgcounter <= "000000000000000"; . A$ s- z% j0 W) E6 T  n
         o_sh <= '0';
, T, [4 w! A4 i) ]0 w- [4 F8 C         o_icg <='1';
9 \) R( ]% \; G( g+ h7 I, F         stop <= '0';6 R7 P8 s: \! ]' s
      elsif enable = "01" then
3 p6 k: ^& z0 {2 o: E         if clk1'event and clk1='1' then
! O) \& ]* `2 a0 L$ s9 y9 O            if icgcounter <"100111000100000" then    --20000....327679 e7 u9 O1 \) U0 [* Q; T
               icgcounter <= icgcounter +1;! {4 Y8 [( ^  X9 u5 f6 d
               if icgcounter <"000000000010100" then   --20) h6 e; M1 v0 ]) z8 n
                  o_icg <= '0'; 3 ?* G( s3 S! y
               else 9 @% `$ ?3 d, X8 h. r" K+ w
                 o_icg <= '1';
' @5 V# u0 j1 y! E! X+ p& T$ ~8 a               end if;. U3 o8 b: T0 A8 n  }/ s# z. t
            else
0 t3 r- ]- [/ \% y                icgcounter <= "000000000000000";
' v, Y8 ]+ E: u) C4 v; V2 X               stop<='1';
5 b3 P4 Q! ^5 C" c7 X            end if;! `& ?3 h  N# J5 K' f
            if delay = "01"  then* b# z! C' e, Y
               delay <= "00";
* h( e6 l& y) z! g# q5 H/ r               if shcounter < "00000000001001" then
1 N, G; C7 i3 T8 t                  shcounter <= shcounter +1;
6 l" b6 |' E! {; d& c! V# _$ w- F( D0 z                   if shcounter <"00000000000101" then  o_sh <= '1';+ s2 f! r' r. N* |5 ^/ x
                     else   o_sh <= '0';
0 B9 h9 a" [( F3 y                   end if;& T5 d0 t! i3 A- r
               else
3 l3 L$ m8 O; w; V$ w, w1 A               shcounter<= "00000000000000";5 z3 i& x+ L+ r% j
                end if;
1 r0 u& P6 ?4 i+ L# \' w: e            else6 j6 r, c# g5 Q( Z: {
                delay <= delay +1;
4 E/ G1 Q* v' l6 P            end if;
8 {; a) F' d% s) }* R4 b: Q* c          end if;
& b/ G1 x% t% c& ]4 h. d  m$ f        
" O: p, {7 c1 o$ H) R     elsif enable = "10" then
# {) u& {  ]. d6 O* z- m         if clk1'event and clk1='1' then3 r2 t2 f5 f. R
            if icgcounter <"100111000100000" then
& ^1 I6 f* z" k) u               icgcounter <= icgcounter +1;
, ?! F1 R* g" [* l7 w               if icgcounter <"000000000010100" then
- K1 Q6 Z1 {1 I3 ?  [! @                 o_icg <= '0';- D- `6 [8 t9 U5 X4 G
               else
$ \' J& P! I$ K- Q( G                  o_icg <= '1';
9 b3 n$ @4 K* }& ~  |               end if;
; ?$ ]% N# D# A! p/ _% K9 Y            else & w  H$ Z- m3 K
               icgcounter <= "000000000000000";
% t6 J1 H+ _+ L9 O               stop<='1';
' W" e) d+ j; d8 p1 t% ?1 G. s            end if;8 D# x4 O4 |. k4 e$ q0 x
            if delay = "01"  then$ U; H/ Z, \2 q2 l! U2 {  ?
               delay <= "00";
& F! i4 c) R/ y' N! j/ ^6 O0 `" z               if shcounter < "10011100010000" then
: \! O0 I1 |0 a# L                  shcounter <= shcounter +1;8 |* m/ N' W$ K9 n5 e
                   if shcounter <"00000000000101" then, v/ `" c9 M" Q; ?. W" ]* n
                      o_sh <= '1';! [/ ?, \4 h* r3 N1 ~
                   else8 a; P  `; h3 [, H$ p
                      o_sh <= '0';
; C5 f3 w; K' S" Z; |, ~                   end if;
, W# f3 O) i. E9 D% f               else
* U  X2 c- G1 [1 G                   shcounter<= "00000000000000";
# u. n. b; [4 K7 z, D4 `" |1 Z               end if;
- `2 o4 h2 ?2 S            else
: i- k2 Y, c- Y. y% S1 d" i                delay <= delay +1;
: s' k: x, k3 N0 ~            end if;
$ o! ?) e! G- z8 `2 V         end if;
- p! t- m7 M, ]8 _3 c    end if;, N8 n. Y0 X4 [$ u: E$ X% M
   end process P2;
. n9 y9 h8 j2 E( {; D2 e, `: U% @ end behave1;
5 t: g* i. Q7 c' V9 K  D+ Y" r

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

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-19 06:17 , Processed in 0.074753 second(s), 36 queries , Gzip On.

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

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

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