找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

VHDL编译错误,请大家指教

[复制链接]

1

主题

5

帖子

-8984

积分

未知游客(0)

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

EDA365欢迎您!

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

x
本帖最后由 Annhu 于 2009-10-26 16:08 编辑 ! c6 o  d: D7 X  h* `' c3 {7 g

, C1 Y  `/ ]- s:) 下面的程序是一款CCD的驱动程序,clk1=2MHZ,enable主要是控制sh的周期是10us还是10ms icg的周期不变始终为10ms,delay用于控制sh、icg的延时0.5us。编译错误见最下方,小弟把clk和enable的位置换了一下即先判断clk1上升沿然后在判断enable问题就解决了,麻烦高手帮忙看一下这到底是什么原因呢?还有j就是程序的代码有没有可以优化的地方呢,谢谢大家!
  t' f+ v  W& h0 d# y) G--CCDshixu + v# s4 ?6 A7 |8 H" l
LIBRARY IEEE;
# f' n4 x9 j+ `2 XUSE IEEE.STD_LOGIC_1164.ALL;
( Y7 \; D$ _- R% a0 E$ x+ tUSE IEEE.STD_LOGIC_UNSIGNED.ALL;" x' p7 v5 o; l
entity divclk is * s. G; h% ]' J7 l" c
   port(clk: in std_logic;
2 \6 G" u- U* p+ p        start:in std_logic;" r6 }4 `+ F, |. s: c, S7 x2 |& x# d0 s
        enable:in std_logic_vector(1 downto 0);: `3 G  v' \8 |, y3 u4 ]* c7 `6 h
        o_m_clk  out std_logic;
; l( `" {( F1 A5 ^" l0 b        o_sh,o_icg  out std_logic;        & d6 h& J+ \  i1 ~
        stop out std_logic);( \  B: z3 ~( x' D
end divclk;+ x9 Z% L) g5 ?3 b
architecture behave1 of divclk is
; r! P: r  b9 D( Gconstant halftime :std_logic_vector(3 downto 0):="0101";4 q1 C1 P* V4 M# P6 H3 `4 y1 [
signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu2 y2 {) |; }6 u" A( D/ }8 v
signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi
9 x5 C; a. |( h$ h# M4 L6 }& U' Esignal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi7 O: |0 B/ ?, a  ^7 @$ G0 R
signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge
0 i" }. S/ e( e  o$ G7 U. H3 H7 @* usignal clk1: std_logic;8 i4 t( @' p/ P3 v+ D
begin4 I4 H! S# @4 J/ D& C3 Q$ H
P1:process(clk,start)--24MHZ,12fenpin
2 x9 s% E  y. M' }% u   begin 2 D) D$ m# z9 |; E+ d+ Y
     if start='1' then
9 l9 Y& n7 g. [) h" G* E  m# N7 N       clk1<='0';8 Y# m  A' K0 |/ k/ s
       divcounter<="0000";                                                                                                                                                         
6 ~1 J, j) r* c- N3 W/ Z     elsif clk'event and clk='1' then: {- d1 b: l: p( _( x
            if divcounter = halftime then
; N* a, ^; `% m+ o7 N( ^8 ~/ ]" x               clk1 <= not clk1;
/ o5 j! \; q5 J* \9 f9 k               divcounter <= "0000";9 Y/ [. M% v4 u6 `
            else " {% E0 o/ Q* q8 ?& D$ @" H7 \
               divcounter <= divcounter + 1;
9 n) p+ W8 e% a9 E$ A            end if;
9 [0 c+ ]% h6 }6 u, Y  h        end if;/ T& _9 I- j  J  c$ ~
     o_m_clk <= clk1;  Y9 y$ A8 E6 o) _
   end process P1;/ v- Z0 Y6 L  w( `- b5 ^
P2:process(clk1,start,enable)# @' S; q6 B* D! a1 J& ^8 _* _
begin& l$ i) X% x1 ]2 _# ]
     if start = '1' then5 k% C+ P' w6 }3 q
        delay <="00";
) U& |* T) T" m0 T$ G        shcounter <= "00000000000000";: W# {- w, G/ r' H
        icgcounter <= "000000000000000"; : Z! f0 Z4 F/ `' H
        o_sh <= '0';0 Z% W% d& e, |4 J9 a7 A1 \! w
        o_icg <='1';
6 b# d' R; ^9 c        stop <= '0';/ i' ?2 S) T4 c  `# G4 V+ K5 |  m
     elsif enable = "01" then
$ A$ c4 c5 @8 O4 p* _$ n        if clk1'event and clk1='1' then5 [4 w+ U5 {. ~
           if icgcounter <"100111000100000" then  -- 20000分频产生10ms的周期
: |. U0 [( C' K) L6 \" J' g              icgcounter <= icgcounter +1;  J- G% T: p& ]; K& _9 w
              if icgcounter <"000000000010100" then - }# D- C3 r# h% O
                 o_icg <= '0';                9 t/ V, C  M  ~  C+ x
              else
2 Z1 o& p, y/ Y& ^1 S2 u                 o_icg <= '1';               
5 V" ~* w5 E+ W5 q. b! O              end if;, P3 `8 k$ f) G3 i* A5 j3 v* m
           else
- c  \: x! a+ U, o               icgcounter <= "000000000000000";
' Z. H# g# S& [4 x0 I               stop<='1';
* W) z2 D& V! U  {' A4 V           end if;0 g7 t, y4 j4 x
           if delay = "01"  then( D/ u/ p. m' H5 R2 \7 q( n7 A
              delay <= "00";
2 m% a4 ?) C) [0 J. C              if shcounter < "00000000001001" then  -- delay用于产生ICG、SH的脉冲间隔0.5us,10us SH
) E3 R" a8 n6 ~: `; O                 shcounter <= shcounter +1;0 [. F( v5 s/ n$ C! g( c# j1 b5 P
                  if shcounter <"00000000000101" then  o_sh <= '1';
* w* L1 i  [7 H$ Q0 h; }                    else   o_sh <= '0';                     - M6 k( b2 K' y9 i4 X  S* \
                  end if;              
( l. y; m3 f. [              else
# i6 ]9 F, n; t              shcounter<= "00000000000000";5 Q, W$ E9 L; ^# A
               end if;5 Y9 M2 l- ]- s0 w2 H' X
           else$ h# ]3 |; b' W7 C& O. Z2 B, k. p
               delay <= delay +1;
6 i% u' f2 m3 ]* F           end if;# L. B8 T: I3 a7 j! d+ L
         end if;* {1 L3 Y% ]3 ^0 y
      
1 U; u' J* g) ^     elsif enable = "10" then0 o* E' c' C8 F5 ?2 J+ v
        if clk1'event and clk1='1' then5 j& k# i- x% W* ]$ D  x- N
           if icgcounter <"100111000100000" then  -- 10ms ICG4 b+ r8 N$ q" i& m* m: w
              icgcounter <= icgcounter +1;+ f0 N* X1 R! v
              if icgcounter <"000000000010100" then ! _5 z  g& q* a! n7 z
                 o_icg <= '0';                8 u' p2 _  r# h7 a1 x+ d
              else
# b' u4 j) m& C* k6 n                 o_icg <= '1';               
, ^, H. h$ x/ O5 c! o$ s              end if;' H' G: R, h1 P4 ?+ e2 D
           else
; C, x( l$ G& E) q& r7 d5 W               icgcounter <= "000000000000000"; 1 t: T6 B# Y4 E; t$ h/ h" ?
               stop<='1';
, q1 g6 w6 \+ B$ H           end if;* U0 P: I2 K4 V' J  n5 o, D4 g
           if delay = "01"  then- t- ]9 A$ M( m/ a
              delay <= "00";
2 \8 h4 z, P: e0 J              if shcounter < "10011100010000" then  -- 2次10000分频delay用于产生ICG、SH的脉冲间隔0.5us,10ms SH" R; a- I, n! k/ w# K# R( j' }
                 shcounter <= shcounter +1;
1 C" w  t5 ?# r6 O                  if shcounter <"00000000000101" then
/ d& J! O( U* N3 M2 n                     o_sh <= '1';4 M3 g9 |; I! H* ]6 O1 A2 J% L; j
                  else2 o6 @& \( Y1 E3 l* ^5 b, L9 p
                     o_sh <= '0';
7 Q4 y5 K0 J6 G                  end if;              
/ B+ q) m  \& ]+ F8 }              else+ \  c8 e, S5 r; Y
                  shcounter<= "00000000000000";* b- d2 [3 r3 @+ S; c4 Y
              end if;
; Z7 q  V9 O* X! v. v           else2 z) a6 w5 q7 S! e7 Z! F1 O) C
               delay <= delay +1;
3 l7 p+ w2 R$ `0 q. {           end if;      
$ p3 G: \) A+ V! v        end if;9 U4 V/ P  d# K/ z+ c7 K. }
   end if;  
5 m0 U8 [- Y3 d+ k2 ]6 C  end process P2;
" h! S  o6 _7 e6 E. n0 kend behave1;
' c9 Z) K7 s( N: M5 x7 n8 jError (10821): HDL error at divclk.vhd(42): can't infer register for "stop" because its behavior does not match any supported register model' r! @+ i2 d! k
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
$ m$ Z$ s) w( t9 i5 {5 OError (10821): HDL error at divclk.vhd(42): can't infer register for "o_sh" because its behavior does not match any supported register model4 V- A5 E- a, [! O% r
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[0]" because its behavior does not match any supported register ( S2 H1 l8 h5 s/ ]
model
, @8 m; f; [7 ]7 [# 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 ! s7 w6 ^  N2 v; x5 W4 ^( l
model
+ M# _* x3 J1 I  o* f! x1 N7 UError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[2]" because its behavior does not match any supported register % s( W$ Y5 b/ i
model
# G# k# x/ v- o* d. E5 _3 lError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[3]" because its behavior does not match any supported register
% M) D7 _- n6 _model
0 c6 {) y: N! ~6 Q, N0 ^Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[4]" because its behavior does not match any supported register ; t" C+ T! h- b$ b$ g1 d. L" K2 n
model
; R1 g' g6 ]/ P( E9 N8 t6 A, Q- FError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[5]" because its behavior does not match any supported register
" y% T: B$ ^, |) Q" |% {model* Q* B) R6 {! _4 ]; G* E% L
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[6]" because its behavior does not match any supported register " w$ V+ W0 J0 _- F6 T& P
model7 N, C, ^4 ?5 \% C3 |
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[7]" because its behavior does not match any supported register
! X7 v: Z1 K1 d: u( S# v' tmodel
6 {2 ]# Y& O+ [) S# {/ NError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[8]" because its behavior does not match any supported register 6 O8 @0 F. }1 E  P7 r/ B( o
model4 x" U4 S4 v; t3 c
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[9]" because its behavior does not match any supported register 7 `8 s. Z7 p- }0 x" G- F5 ~
model
$ s" R5 e0 N# T7 J4 j% aError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[10]" because its behavior does not match any supported register
! d5 U  s2 {8 Y0 c; q" Xmodel
1 L. n9 U, c3 ~7 J: I+ G& EError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[11]" because its behavior does not match any supported register
# w* D8 Z" {$ ]" kmodel
) Q) c' |, e3 z1 f/ B8 g4 p: B0 |Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[12]" because its behavior does not match any supported register
) r0 b  m, F7 d% smodel
3 j: F$ [% v. S' @Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[13]" because its behavior does not match any supported register
; g& J4 S1 t- Hmodel4 b# N# H1 C9 w, F1 g
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[14]" because its behavior does not match any supported register 0 A8 q& t. [  Z: b8 C2 s2 I
model
. j, F: |' r* Q2 UError (10821): HDL error at divclk.vhd(42): can't infer register for "shcounter[0]" because its behavior does not match any supported register
- h7 u2 j2 \( i% _. i6 Jmodel$ }5 x  t3 n" ?- ?; R: |2 P( }
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;
* Q3 s6 Q- E$ k4 l+ u# }" ]3 B USE IEEE.STD_LOGIC_1164.ALL;
" b! _  T4 S' e: u$ i- x2 V+ P; o USE IEEE.STD_LOGIC_UNSIGNED.ALL;
8 S! a  O, _% q" V entity divclk is
, @- X. s2 z0 v2 x  g0 b   port(clk: in std_logic;4 e) N. V7 C/ U# T# H
         start:in std_logic;
4 f& R  ?# z7 }: F. ^+ g, V         enable:in std_logic_vector(1 downto 0);
( Z' J! S2 p& \/ H" M' f         o_m_clk : out std_logic;
% F$ Q" L" V/ C& b4 e) G         o_sh,o_icg:  out std_logic;
1 b$ g; O7 I1 Y) U* G% Y7 _% J& a         stop: out std_logic);
; S0 l/ Q; e- N* i' Q end divclk;* k& _3 j. b/ _7 B; t  i+ C4 D4 ]
architecture behave1 of divclk is$ m8 X4 z) d4 J8 `$ T
constant halftime :std_logic_vector(3 downto 0):="0101";
9 V! C1 M8 R' M1 o3 h4 F signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu
  Q/ ^" D! t9 @$ ^) A. J9 }+ x3 D5 [6 L signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi1 t: s2 {2 }8 h0 F1 o7 y% N! w6 j6 m
signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi% d9 K0 \( Q* D7 ^- g0 Z* s# k
  H- x: ]) ~9 j6 I* U$ ^2 p, H, L signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge7 o6 n3 \2 a1 H6 K1 }. ~# W" q+ n6 O! R) @. F- c# p4 U
signal clk1: std_logic;
+ D! F' @- g8 s begin
7 t- c" {6 u" G9 ~: d# I P1:process(clk,start)--24MHZ,12fenpin+ r$ A2 z$ |& y, {! o
    begin
$ A2 @5 f. r1 H3 Z, p     if start='1' then; P7 ~/ o. _" r- N' Y
        clk1<='0';* J3 Y$ v# R: M) J! }8 M
        divcounter<="0000";+ G( V. F: [" @, m
      elsif clk'event and clk='1' then
- o, N) }' E; G. w0 J. W             if divcounter = halftime then
5 q% d4 t+ C# {2 `                clk1 <= not clk1;: }9 v. j& ?8 t8 c/ E% {. {+ D
                divcounter <= "0000";
5 S8 ~% d: z2 _' @/ {) B             else
. C: Z4 q4 p7 |1 n' K7 z1 z, k$ \               divcounter <= divcounter + 1;( O1 m1 X/ e: e' K/ N( W; z
             end if;
. P. u4 D; F1 ]* F, I         end if;
9 p" G7 T# @& V+ `( X      o_m_clk <= clk1;: V( c! _0 \" i; O/ w
    end process P1;3 \5 p; R9 E! m( g
P2:process(clk1,start,enable)/ F# u' k0 c! {6 b
begin8 k6 r& F3 x0 J  D5 S
      if start <= '1' then
0 n) R- c. l( d' {; J         delay <="00";1 ~0 w. p8 n$ x" B; }- j* X  `
         shcounter <= "00000000000000";
6 c# D: B" ?. _2 J) ~; n4 A         icgcounter <= "000000000000000";
+ p) f5 _) Y: b0 U5 R9 e/ d) C, @         o_sh <= '0';
6 d0 N# d' J$ Y+ r! O# W         o_icg <='1';4 w3 m- D& _: _- d- k2 t
         stop <= '0';( B! z: k6 I  ~5 g
      elsif enable = "01" then6 b% r3 C! O* L2 V) q
         if clk1'event and clk1='1' then
; B1 |8 q8 ?8 m6 x9 R            if icgcounter <"100111000100000" then    --20000....327670 G+ e  C, P# _8 X, J
               icgcounter <= icgcounter +1;
+ s9 S* q7 E: a0 u! c               if icgcounter <"000000000010100" then   --20  Y- K$ c, V1 A3 ~' m
                  o_icg <= '0'; 5 S1 s1 M* v+ V2 C3 Z
               else
! B7 `3 y8 J3 a7 n# V0 Q0 L                 o_icg <= '1'; " s) W) M1 C( Z5 R
               end if;
! E9 b# v; ]3 X            else8 U9 t0 M3 K" }8 P9 P4 `
                icgcounter <= "000000000000000"; . G# V& Z! e2 n3 X" R
               stop<='1';+ J, Y8 D0 z# m1 [* c$ H1 c
            end if;3 j3 S. t7 `+ ~6 m% l3 G5 u
            if delay = "01"  then
% O3 a+ @( w' t0 u               delay <= "00";- j# g0 r8 [. T/ b  H
               if shcounter < "00000000001001" then
& @& x" R3 L8 j6 `                  shcounter <= shcounter +1;" }- E6 {- g/ Y% ?
                   if shcounter <"00000000000101" then  o_sh <= '1';% l% _& I7 C0 M" d9 W
                     else   o_sh <= '0';
* z1 u+ l9 s! C3 d                   end if;
) O. G8 b" h; \7 x( b8 E               else
8 t! A) V- V+ O* O* X" K: Q# G1 ]               shcounter<= "00000000000000";! e* j! T0 W& g
                end if;
* n; H- O' Z, r' ^            else4 ]' e7 D2 }& X( g5 q: n
                delay <= delay +1;
3 {" {; ^" ~& p& o/ O            end if;1 D  q' h/ z. v; E
          end if;4 r5 [/ L# g$ M1 L& q" d
        
/ V# c$ i  H+ ?9 h) ]2 v     elsif enable = "10" then
3 L0 `: \8 @6 Y# z. h3 L0 ?         if clk1'event and clk1='1' then
# ~( N6 G7 l7 s( Z            if icgcounter <"100111000100000" then
9 G& F( g6 J0 {4 x               icgcounter <= icgcounter +1;
9 @- g8 {5 b! L8 A5 `( ]6 N. ]               if icgcounter <"000000000010100" then + `3 J5 g( t+ J; j5 H$ Q) e" {
                 o_icg <= '0';  c5 E/ C0 b& T! f5 V% a  D. d
               else
$ y# G" J4 U' @: {8 [1 m# J6 f+ ?                  o_icg <= '1';
0 q( o# f$ k' Z0 [               end if;. ~# A- w  J/ v" f' S4 p2 F, J0 r
            else + S+ Z9 p" o5 Z2 e$ q) j6 c; T+ i
               icgcounter <= "000000000000000";
/ P0 E- e' `! t+ i               stop<='1';
& S- D# y) A' ]: `3 h( d: ^            end if;* p$ Y  g. ~: J$ E0 q
            if delay = "01"  then/ w  K, ~" A, |& N
               delay <= "00";
4 [: A, u  u7 X4 q  t               if shcounter < "10011100010000" then
1 g! O* a7 y( m' [; A                  shcounter <= shcounter +1;
8 ]& j8 w/ t  b6 G1 }* R                   if shcounter <"00000000000101" then
9 W$ I% K" k7 H6 m8 ~                      o_sh <= '1';0 p& _$ m) s& b8 }
                   else
! y* E0 B1 E7 t' Q7 V, s# [1 E                      o_sh <= '0';
, |5 G% J% U- G" [& Y                   end if;
4 h2 R! [4 q% V6 B  ?% M0 u; L& x               else
# L, e3 _) R. K                   shcounter<= "00000000000000";
  n& }) s9 y  M$ B               end if;
6 q+ F6 v( A0 n$ z2 p5 e5 f            else  h7 u6 S3 M3 i. F
                delay <= delay +1;
! T9 I- l% \) ^  P) Q6 A            end if;
. V# ?  u7 \) i+ h: ]         end if;
' P! B( \; ~* G) _    end if;
! [" A$ e# w4 P' I! h# Y+ \9 ?   end process P2;/ G9 Q$ W# ]2 C% \
end behave1;% V) l" L# N7 ]1 e" U

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

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

本版积分规则

关闭

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

巢课

技术风云榜

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

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

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

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

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