找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

VHDL编译错误,请大家指教

[复制链接]

1

主题

5

帖子

-8984

积分

未知游客(0)

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

EDA365欢迎您!

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

x
本帖最后由 Annhu 于 2009-10-26 16:08 编辑 5 t+ K& G9 Y& a  W! {) @3 m

0 H' q6 T* k3 {6 x- O:) 下面的程序是一款CCD的驱动程序,clk1=2MHZ,enable主要是控制sh的周期是10us还是10ms icg的周期不变始终为10ms,delay用于控制sh、icg的延时0.5us。编译错误见最下方,小弟把clk和enable的位置换了一下即先判断clk1上升沿然后在判断enable问题就解决了,麻烦高手帮忙看一下这到底是什么原因呢?还有j就是程序的代码有没有可以优化的地方呢,谢谢大家!
/ _2 i4 {( N2 A6 Q! R! `--CCDshixu , \) |" ^3 B9 q! s1 k2 _
LIBRARY IEEE;3 ?" e' H3 G2 \7 x. p8 r# a. Z
USE IEEE.STD_LOGIC_1164.ALL;  D; X5 q8 M& \( m/ b2 Q5 Q& d4 `
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
$ X- @9 U! V' u$ z  u( }0 Mentity divclk is 3 O/ ~- ~7 h( O) o
   port(clk: in std_logic;% w2 g$ H0 V/ w! ^  Q+ y
        start:in std_logic;3 m, `6 G8 o* \3 G, S
        enable:in std_logic_vector(1 downto 0);
7 B0 F0 b! v. L! X7 R6 q8 ~        o_m_clk  out std_logic;7 @9 O- X! c; c
        o_sh,o_icg  out std_logic;        
5 }3 m- J; h+ m/ i        stop out std_logic);3 ], |4 ?/ I1 P5 i& Q1 C$ ?
end divclk;0 E4 m6 w. W% Q) U5 c5 F# B
architecture behave1 of divclk is
" ]* Q; @# o3 R8 `constant halftime :std_logic_vector(3 downto 0):="0101";" h0 R% D/ `1 `3 W
signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu/ Y% d# u5 a% ^. ~
signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi
* H! J) m1 w6 l( Z2 `signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi
+ j: a+ L( L5 `( h1 O( Xsignal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge
( E+ i( ^2 y9 `signal clk1: std_logic;$ W; _0 \# b& O/ c  Z
begin( f( [" A; L! g8 z" e" n& Z
P1:process(clk,start)--24MHZ,12fenpin
7 s9 d3 k7 t) T4 ?' Q: V8 w1 E   begin
+ u. i+ e, A; _* [; \& |. w     if start='1' then
* l2 x$ z: ~3 m0 o0 @- p0 T0 y6 j       clk1<='0';
) F% g; A/ X3 ?- _, c       divcounter<="0000";                                                                                                                                                          8 Z, X4 O8 t) d7 o
     elsif clk'event and clk='1' then% M6 E4 o: a5 Y0 t8 e
            if divcounter = halftime then3 E. T' i; M3 y; Q  ~
               clk1 <= not clk1;
5 O3 Z% g& |" ~2 k               divcounter <= "0000";
* n' E* G- a5 T6 ~" j5 T+ ~            else
) m9 R3 Q* B7 R. l: x7 Z               divcounter <= divcounter + 1;
( b- T, e# Q/ g5 z; p3 g            end if;
; S3 n5 ?+ z& j, a) ^        end if;, B9 n+ m% x5 s# |% K% R
     o_m_clk <= clk1;/ i" n% k8 t" K( U: |8 m
   end process P1;% W" H$ T* E% W
P2:process(clk1,start,enable); K, ]4 Z+ e, U1 V+ o/ E; e
begin0 r( g3 `" S2 o
     if start = '1' then. r* ~, A4 U5 C5 t0 m$ a0 }6 B* z
        delay <="00";
0 B* W; z0 E. \& l! `+ z        shcounter <= "00000000000000";: Y' q- b, [8 B# l0 D+ z
        icgcounter <= "000000000000000"; 9 ?7 M4 j9 {6 R8 l
        o_sh <= '0';
7 r# ?  s- _! z# c+ e        o_icg <='1';
% m$ t. J4 r! S" Y5 C        stop <= '0';+ u2 S3 Q! k4 [- V$ b+ }8 |
     elsif enable = "01" then
$ d- Q- l) H4 ~3 R3 v        if clk1'event and clk1='1' then+ l: Q7 X9 d9 x6 \# ^
           if icgcounter <"100111000100000" then  -- 20000分频产生10ms的周期
6 f9 U( z! T* I& i) Q              icgcounter <= icgcounter +1;
1 _: b& Y! X% ^) @% [7 ^1 t              if icgcounter <"000000000010100" then
# q. o5 p" ]! q7 j7 V- j                 o_icg <= '0';               
8 }! q; t4 X7 f/ r' E' C              else . i: N% \/ g$ z
                 o_icg <= '1';                9 L* _/ |  s6 h: S
              end if;
7 @" h: J$ }3 f* a8 @6 N4 P8 U           else
% O# {$ T* R. x8 t1 ~. W               icgcounter <= "000000000000000"; . X# s& U9 P( f# |3 L
               stop<='1';  s; ~7 d6 h0 I
           end if;
) `, t# J, ^( d           if delay = "01"  then
" m5 d+ G7 t) Q/ _; h              delay <= "00";( E, p. i1 ?$ n$ O- M4 N1 y
              if shcounter < "00000000001001" then  -- delay用于产生ICG、SH的脉冲间隔0.5us,10us SH
/ S0 g6 F3 Y& x' ]                 shcounter <= shcounter +1;
8 [+ {) s2 i1 Z                  if shcounter <"00000000000101" then  o_sh <= '1';
7 |! H9 ^. }! h: {0 f& ~                    else   o_sh <= '0';                     & ~* B  c; N6 I' ~; P- s
                  end if;              
9 K! q5 o: B# k2 p* \              else
: t7 B: g+ e. a8 U              shcounter<= "00000000000000";
( z2 D, ]9 |: n1 ^$ s               end if;
) U/ g. X0 K) @- V; H           else
  K' Q, D3 |! V4 _               delay <= delay +1;
, P7 p' Z- k0 {# |           end if;  z+ m5 ^( q* Z, ]
         end if;9 R" a, T& ?9 s8 |7 i
      
" W. K: g+ f' j0 F     elsif enable = "10" then& f: X& }% J6 |, \6 j
        if clk1'event and clk1='1' then
2 Z1 C# w! T; D( G3 M# s           if icgcounter <"100111000100000" then  -- 10ms ICG1 f+ |; V0 K/ @0 y( T( Y
              icgcounter <= icgcounter +1;
! ^( ]  b% {1 I( P  S              if icgcounter <"000000000010100" then
. v' \) D7 y4 X                 o_icg <= '0';                : g- g1 p9 r( F) S# F6 L0 g
              else( M9 M  V0 P* q7 j8 r" o  I4 |9 z% \1 g
                 o_icg <= '1';               
4 v' C' d5 h7 p8 |              end if;
" X# J4 D7 `4 k           else & i) h1 ~$ d# B+ b' H
               icgcounter <= "000000000000000"; 4 Z  K+ u" N5 h. y& t
               stop<='1';& K3 M8 \0 Y" O& @* |' Q: W
           end if;; x3 S" Q0 ~+ g3 [0 V
           if delay = "01"  then
) l2 b6 V6 K! A# }  u- N- w              delay <= "00";
; J6 f6 e* I4 ?4 t/ M- N# }0 J8 M              if shcounter < "10011100010000" then  -- 2次10000分频delay用于产生ICG、SH的脉冲间隔0.5us,10ms SH* ~2 y6 c- i8 w' y+ P5 N: G) q/ F
                 shcounter <= shcounter +1;
/ ]1 _2 O! l0 i6 O' d0 G) u                  if shcounter <"00000000000101" then
* w7 H6 N/ N1 D! C& R3 i/ N9 I                     o_sh <= '1';
! U; p, p  D5 D7 |, u* S& W; @                  else& C3 _* ^0 R& m! V
                     o_sh <= '0';
2 {/ k1 ^  E# u# C2 D) h                  end if;              
( v1 m; t; d; i. k              else' p) \! r, f. S. K- X
                  shcounter<= "00000000000000";
: i4 j4 Y: q& @1 |/ V! Y. P" m              end if;* D6 x" j3 m# J7 C5 d0 q
           else/ J$ g; J: a9 y
               delay <= delay +1;; u- z; n: ~/ b" z  C* o) T  U( S
           end if;       7 ~$ U! u* I, I4 J3 ^6 V
        end if;
) M; S6 C0 g, w) D' D   end if;  & w1 M. n* w2 w/ A$ Q
  end process P2;
' N3 `& q1 P9 m& y2 Gend behave1;
0 r7 P+ ?# {/ j( d2 S' CError (10821): HDL error at divclk.vhd(42): can't infer register for "stop" because its behavior does not match any supported register model6 B! k" P; a' _0 ?9 k& T4 ~+ t: O
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
/ P0 w5 j- X$ Z* t  \Error (10821): HDL error at divclk.vhd(42): can't infer register for "o_sh" because its behavior does not match any supported register model1 H. V+ w6 m7 _4 |: r9 e5 P& 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
. J% V: n& L3 |model- |* U: q+ H6 m& ?. I+ \
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[1]" because its behavior does not match any supported register : B4 T/ y- r* o( R; K
model
& t4 \5 R5 m9 [1 _Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[2]" because its behavior does not match any supported register
% N/ `4 x* N+ L6 d# h) ?, A9 `model
$ G! U3 b3 Z7 P8 yError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[3]" because its behavior does not match any supported register 8 w1 E6 l6 ]5 H0 P( G2 B' ~( l
model8 a1 h6 T7 n! Z! i8 R  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
& {( K- E# U. ?7 \- Hmodel
9 g, r- r; [- Y8 ]5 @Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[5]" because its behavior does not match any supported register
7 O* G+ J3 m2 R0 Smodel3 |7 I0 a; Z! ?1 e. a& w" y
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[6]" because its behavior does not match any supported register & W3 h* l, |1 O7 S3 ^* Z0 Q$ Y
model
6 p+ k+ M, O  W- L) y8 |. r4 uError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[7]" because its behavior does not match any supported register
: Q! J! ]$ h& _* F+ B' o! rmodel
% `+ R/ M. T9 _- Z! WError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[8]" because its behavior does not match any supported register
- d9 H% t4 W8 Y+ f3 Y8 G7 a, `+ K6 dmodel
" B6 {( s* P) t# D% x- @  }* MError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[9]" because its behavior does not match any supported register ( P- J4 T- {. A% g: {& K( B
model( b& F$ A4 o; y
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[10]" because its behavior does not match any supported register $ r2 s4 D; a3 [' K
model
: [$ ?1 V; t7 X+ A# V' XError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[11]" because its behavior does not match any supported register
0 `6 ^- P) T9 p; a# T1 smodel
% _- R7 G- k, q' A) E8 d7 {1 AError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[12]" because its behavior does not match any supported register
% [# p4 P+ j" Omodel3 m3 E! y* r$ ~
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[13]" because its behavior does not match any supported register
8 I& M2 v: s, {7 s3 Pmodel
6 P. `& _5 }) Z. z# r% P6 OError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[14]" because its behavior does not match any supported register 8 y* i8 Q+ b- W8 O. A( y
model0 O# b& a" `. ]. [* }. x* y
Error (10821): HDL error at divclk.vhd(42): can't infer register for "shcounter[0]" because its behavior does not match any supported register
  M' y/ p/ {3 c* U3 U  o4 j; Imodel
) \4 @1 z2 y+ }" ~' f4 p2 g# KError: 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;
5 t& F2 R6 a( Y" q" c5 g( z USE IEEE.STD_LOGIC_1164.ALL;4 g3 l2 d. ~  W5 V
USE IEEE.STD_LOGIC_UNSIGNED.ALL; + P# E3 [, a  \3 s& \$ E0 A
entity divclk is ; e3 u7 }& K' o1 d% o- {
   port(clk: in std_logic;7 R. J/ L3 b' F4 u  H( ?
         start:in std_logic;
; r- q. Q+ i1 z+ w) ?8 v1 o7 Q8 \         enable:in std_logic_vector(1 downto 0);
$ Q. Q; ?0 y/ @3 `0 E         o_m_clk : out std_logic;
" u  y2 S$ Z, ^! l         o_sh,o_icg:  out std_logic;
/ j& r6 j- Y6 z9 E8 S% a         stop: out std_logic);
  x" p: f" p$ K9 V" A. p end divclk;" x1 }$ H: Z3 o) ]. `( E" n/ }! ]
architecture behave1 of divclk is
' {) O( V+ y; i# x& I constant halftime :std_logic_vector(3 downto 0):="0101";
: D- O, F% u8 c+ N, y& H signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu9 E5 H# ~/ m- y5 o9 j- e: X
signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi1 t: s2 {2 }8 h0 F1 o5 D/ L; U0 S9 I1 X: D4 V3 h
signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi% d9 K0 \( Q* D7 ^- g0 Z* s# k7 `- Y1 K# E: |: f, c# ?4 O
signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge7 o6 n3 \2 a1 H6 K
& D3 U, v- H% N$ D. e signal clk1: std_logic;, J# J+ g# N7 o* }9 ~
begin
" |8 }7 S$ M3 |0 L! i) q; }0 @$ p( M P1:process(clk,start)--24MHZ,12fenpin6 z+ f: y. L* v% U6 i/ C) z
    begin 4 l$ b/ N. Q( W7 J: J6 e
     if start='1' then& _3 I: H- n" V0 i$ B
        clk1<='0';
  n. v6 @3 i0 y9 l        divcounter<="0000";! k! ~* u- b7 K3 F
      elsif clk'event and clk='1' then8 p, z, G+ ]/ B% k) C  `0 ?* d6 z
             if divcounter = halftime then% s8 ^  W0 _1 f) n/ A6 y
                clk1 <= not clk1;
) f3 {+ t2 Y4 W3 G! K                divcounter <= "0000";) y/ \- X3 t* e. y7 f
             else
" r- g1 h+ K* Q/ V* l/ t               divcounter <= divcounter + 1;5 U  T/ k- |* {0 s4 E
             end if;
5 C3 O- Y4 \, t         end if;( s' T& \/ L3 L: I
      o_m_clk <= clk1;
7 z% f: k" E# E* A0 [6 v0 Z" B" c5 P    end process P1;7 @# |( X" l4 w( [0 U' U- ^. m3 B
P2:process(clk1,start,enable), q1 {+ J7 `9 }1 x/ s
begin4 r& B2 |7 i( D! t7 s3 H1 M. j- C
      if start <= '1' then
" v* `% {6 ?( y+ y+ t' z' ?         delay <="00";
: \) W8 c8 D3 x) b- v9 b$ ?         shcounter <= "00000000000000";1 z" X( Z* ~; s! [4 z0 o) V' D
         icgcounter <= "000000000000000";
" ]. G5 i( h, g% Z% P) k         o_sh <= '0';
) Y" N, d# a: l1 i* R$ n         o_icg <='1';
) ~- }0 o" y$ o         stop <= '0';
- N- k3 j& n* I' ]7 O      elsif enable = "01" then
9 d( z. {! ~- M& x% X. X         if clk1'event and clk1='1' then
9 ?) A/ b3 I/ [& m4 N            if icgcounter <"100111000100000" then    --20000....327673 o2 u) O: v% N( J
               icgcounter <= icgcounter +1;
; ~! ]7 p' D2 m+ [- @3 t               if icgcounter <"000000000010100" then   --204 i4 \& y  C" k/ h- m
                  o_icg <= '0'; ! t" _0 k2 B. c
               else : D9 s5 ]/ S# l9 F, m3 x/ `
                 o_icg <= '1'; ' ?/ ~2 S$ m- }8 n" X
               end if;
+ B) Z0 K4 ^1 n. O7 n' g4 p$ S            else# O0 m# [4 p8 M
                icgcounter <= "000000000000000"; * C& n1 S- F) N, R9 v: l
               stop<='1';2 f1 u! d- l( |& p! y
            end if;+ V9 J% z! d# V; k3 X  ^
            if delay = "01"  then$ |5 [- Q% j* _
               delay <= "00";
* y* E4 Q& |8 ]3 a               if shcounter < "00000000001001" then$ t" X/ C8 ~4 n) E
                  shcounter <= shcounter +1;. U" O) w. Y; H/ C! [
                   if shcounter <"00000000000101" then  o_sh <= '1';
1 k) q* r1 P% }$ N7 E' R                     else   o_sh <= '0';
9 P# \, G7 }/ ^' B6 b                   end if;
; p4 b" n4 u, D4 Z& {* J               else
5 A3 ]' y, c* a0 l. G/ O               shcounter<= "00000000000000";- f. N) U& |1 Z3 ]( v7 V0 }
                end if;$ A! X2 O1 i3 Z2 b# {5 h3 u
            else' K- G) N( L* L1 o6 t% ?( F. J1 {, v
                delay <= delay +1;: f7 y9 r1 V! w' W/ Y* S
            end if;5 P4 J" |% J0 M: [. n/ v
          end if;
& J" I1 k. R: i2 Z* x        8 [7 n- ^$ d% b0 ]# _8 _: E
     elsif enable = "10" then( T  N+ E( N3 W
         if clk1'event and clk1='1' then
4 V6 t" [1 J2 p            if icgcounter <"100111000100000" then , w0 g! j- y% a2 t! j/ m
               icgcounter <= icgcounter +1;
  ]$ [5 a2 h+ P               if icgcounter <"000000000010100" then 6 q8 J* y. i9 h' Z
                 o_icg <= '0';2 y4 a2 U! i  e
               else9 F7 K: l" I# q9 t$ f2 @( R  S9 y
                  o_icg <= '1'; 8 F8 {7 C* v7 d- B! L+ }
               end if;' p1 F' U' t# y9 Q5 o" ~
            else ; c( m& h+ ?$ u2 S5 S. j) N
               icgcounter <= "000000000000000"; , @, p4 F, Z  W# \
               stop<='1';* |. b  v! G+ o5 z" z& j
            end if;/ ^9 T# V6 z1 }6 n' f/ a
            if delay = "01"  then
4 ~" l6 S( m, H2 x+ Z7 o) }               delay <= "00";
7 _# I. ^: h0 b) J" ]7 W3 M               if shcounter < "10011100010000" then; @  Q0 u& ?: J- Q
                  shcounter <= shcounter +1;
/ H9 d9 M" J; B2 i4 }+ ]2 \                   if shcounter <"00000000000101" then$ o& j! }) n1 K* G" [5 N; g
                      o_sh <= '1';
) l! k5 p) i1 l) f3 ?: u                   else' g- ~2 c* l% |7 S  ^3 \: [+ a( b
                      o_sh <= '0';" o4 Y- W2 H) V' g4 z) |
                   end if;
; g+ o3 r' q; k) u9 F7 g               else
1 `. w: q4 \  v) p; H3 r( V                   shcounter<= "00000000000000";" L* `. z3 Q. c: p
               end if;
) N/ h( H% m5 }, j4 a2 o+ o- G3 ^4 Z7 a            else" h5 D1 o6 }. ^2 j& C+ U1 O
                delay <= delay +1;3 X3 x: p* ^5 v5 [; f9 S
            end if;% b3 B" r3 b8 _: Y& J1 Z1 q2 j
         end if;
* ^4 E2 a7 g/ t+ P8 ~2 @    end if;
& L$ b: M/ Y# m  b+ J* k9 P8 i   end process P2;
, u1 J' _( W) l  Z/ }) X% h# S end behave1;" T7 K' [3 N" _, H" H: e" U

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

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-28 02:06 , Processed in 0.065017 second(s), 36 queries , Gzip On.

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

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

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