找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

VHDL编译错误,请大家指教

[复制链接]

1

主题

5

帖子

-8984

积分

未知游客(0)

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

EDA365欢迎您!

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

x
本帖最后由 Annhu 于 2009-10-26 16:08 编辑
4 x" [% t( {8 e8 ]
4 L# F4 i- R! O) ?0 L- H:) 下面的程序是一款CCD的驱动程序,clk1=2MHZ,enable主要是控制sh的周期是10us还是10ms icg的周期不变始终为10ms,delay用于控制sh、icg的延时0.5us。编译错误见最下方,小弟把clk和enable的位置换了一下即先判断clk1上升沿然后在判断enable问题就解决了,麻烦高手帮忙看一下这到底是什么原因呢?还有j就是程序的代码有没有可以优化的地方呢,谢谢大家!
0 E! t/ B6 d" q+ g& W2 @* a--CCDshixu ' l( s9 d1 u" F( z6 r( f6 a' [
LIBRARY IEEE;5 i% `# `9 r6 }7 p
USE IEEE.STD_LOGIC_1164.ALL;8 t) r% j- ?7 \4 w" Q% I
USE IEEE.STD_LOGIC_UNSIGNED.ALL;- @! K9 g) q6 {1 m( D) f
entity divclk is 7 F- f- s8 [5 j
   port(clk: in std_logic;/ J) r7 y2 I) T6 l0 D2 n
        start:in std_logic;. \+ \3 e: j3 w  w' g
        enable:in std_logic_vector(1 downto 0);
; D+ {. M" x# _" Y2 f        o_m_clk  out std_logic;
$ O" r, A$ |- f* H: v! b3 s        o_sh,o_icg  out std_logic;        ; ], F! A$ t& `, i' N7 n
        stop out std_logic);  M% V6 k8 a5 }
end divclk;8 g( `& {9 _* o! ~# E* `" a& X
architecture behave1 of divclk is
7 D3 o8 Z' H( E  Wconstant halftime :std_logic_vector(3 downto 0):="0101";5 n" d3 w, z& a" f' k) o0 S0 B
signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu
8 |; s: n" d. D" X8 Gsignal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi# [/ N2 q4 G' w9 Z8 Y, f3 w# t  _: @
signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi, T# _0 q  V5 P. c/ B" I3 c
signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge
& [, v; X2 ^# M; u3 B/ csignal clk1: std_logic;
& i* ~: I) x* s" }: Ebegin0 Y& r; f0 P" o) y
P1:process(clk,start)--24MHZ,12fenpin
' p+ V6 g' z* r7 }4 E+ Y   begin 6 ~* O$ |/ o8 e0 e4 c+ L
     if start='1' then: J1 f2 y: b  v. G) l8 V
       clk1<='0';# f7 _4 Z! q6 u! m& b7 `4 O
       divcounter<="0000";                                                                                                                                                         
6 j& A, D! ]( `2 v3 r     elsif clk'event and clk='1' then' ~3 `/ N% q5 T0 v
            if divcounter = halftime then
  ~9 ~4 j" m  U               clk1 <= not clk1;1 L; d+ a$ ]  }8 X% d9 c. P, U
               divcounter <= "0000";6 y+ ^6 v; z  W  q' e
            else " ]: p' I$ c4 J# d8 M% b
               divcounter <= divcounter + 1;
, @( q( r( X* ^7 H5 @            end if;
4 ?6 X# R( j; k8 S$ ?        end if;
, v4 r4 X3 X/ L! n9 L3 H7 V7 p     o_m_clk <= clk1;
) \2 \+ S, k5 U" i' n6 m   end process P1;3 \4 H* }5 A" r! }1 h/ ~& i
P2:process(clk1,start,enable)" A' m* |( o8 M( v8 u4 [
begin
# d" J' _& F+ }$ r# V  m5 ]  b     if start = '1' then
- P8 D, a2 p2 B' n% T9 u; S1 |        delay <="00";
! N- w* g' {7 k        shcounter <= "00000000000000";
; S, t: p! G. R* o6 d, r( l/ o        icgcounter <= "000000000000000";
5 L- Z3 a/ L( }1 T0 N3 f        o_sh <= '0';
* x( q; F  G! K4 r& _) @        o_icg <='1';
, y$ O& q; J8 I6 U        stop <= '0';
0 V9 g, b' V4 ^2 T6 q     elsif enable = "01" then* A4 O1 m9 A; v
        if clk1'event and clk1='1' then8 o& |! F8 T  a9 o0 p5 ]( C8 E
           if icgcounter <"100111000100000" then  -- 20000分频产生10ms的周期
0 H5 T1 y9 j! o% u              icgcounter <= icgcounter +1;
" i4 c$ Y* G6 C' ]4 q( {              if icgcounter <"000000000010100" then 2 t% E5 W( \' n- F
                 o_icg <= '0';               
6 d2 x. U9 r' i, u9 ?) `              else 1 y) i4 a" ]7 @! o* v* r
                 o_icg <= '1';                " C" ^! a5 k* G
              end if;# v3 }6 T8 Z' w
           else ) z" Y0 E3 [! ~. D9 A( |
               icgcounter <= "000000000000000"; " p4 m! b- [( }
               stop<='1';
& j3 z1 u9 f3 t1 @, O! q5 M           end if;
# g* q3 @5 H0 c: r8 s( Z& n5 w           if delay = "01"  then! T3 s' |0 Q' F* y/ v) P5 w* r+ {
              delay <= "00";# p& g0 N- O0 U5 U) [; n) N
              if shcounter < "00000000001001" then  -- delay用于产生ICG、SH的脉冲间隔0.5us,10us SH
! j9 v6 ~8 c3 U; W; ^5 K+ t8 g                 shcounter <= shcounter +1;
( g' t4 G5 g- D: r. T0 B                  if shcounter <"00000000000101" then  o_sh <= '1';1 E4 S, Z& v) b- U  g
                    else   o_sh <= '0';                     7 V* m" Y( A: z! ^2 E
                  end if;              
' r+ b6 R/ L1 p- h% d              else
2 H2 A: {8 Q! U& _, e6 i8 I3 ?              shcounter<= "00000000000000";( x# ]% `' q; e; L( l: U
               end if;
2 W# `; l9 N1 r+ P           else: V# T2 L0 o; v
               delay <= delay +1;! ~( W  R$ F1 R
           end if;
5 W5 B: k( B4 i7 t& Q3 m  m         end if;
4 ?6 ]9 [# _1 D! _      
' L0 l/ x! E5 _: U     elsif enable = "10" then
. O, a! v/ r: o6 k2 }2 W7 g        if clk1'event and clk1='1' then
: C6 }* H/ H- g  V% N. R# \           if icgcounter <"100111000100000" then  -- 10ms ICG
# q/ [+ D! w) v* e, B' G  E$ _              icgcounter <= icgcounter +1;
7 J% v( x/ M1 l              if icgcounter <"000000000010100" then % Z! y4 F% d6 R) L6 @
                 o_icg <= '0';                1 B/ o( Y0 b7 T7 U
              else
3 v, E5 C* g, {7 i% f7 d$ B                 o_icg <= '1';                ( v# m9 J5 f7 h  T! R5 q8 v
              end if;
$ A( p. Z& E+ ]  J- {3 t           else
, _9 R/ g' l+ q$ v3 N+ F               icgcounter <= "000000000000000"; + G) ?/ S$ K: ~8 Q4 k
               stop<='1';
( k! v: z( H5 k           end if;
, |' N: _4 E% L; {% Y           if delay = "01"  then' i( Q& Q) F, c6 c: X
              delay <= "00";
2 ]/ b6 L$ V1 h; e6 F0 d              if shcounter < "10011100010000" then  -- 2次10000分频delay用于产生ICG、SH的脉冲间隔0.5us,10ms SH
& ^9 l5 C4 W; Y! E. ?9 N  W' F0 @                 shcounter <= shcounter +1;
0 Z  g% v5 t, l8 p  L1 t                  if shcounter <"00000000000101" then
. m8 N7 a4 Z0 W1 [1 s                     o_sh <= '1';
" K& D5 x/ [1 @. D. e7 W9 Q8 N) u) H                  else. k' r! |* }, v- @  D
                     o_sh <= '0';
* l+ c$ U# h1 d( [; ]8 ~1 d                  end if;              2 j% E5 k$ H. k, d/ ^6 d# P! t7 Y% e/ l
              else) F6 O/ _( G1 ~3 B3 o  C
                  shcounter<= "00000000000000";% o. G4 i' L% ^" Z5 ^/ I  C( G
              end if;. T0 m: `6 ~1 i+ t. g2 _& k- m: u- _
           else
1 m7 e' `4 p  G* M3 }               delay <= delay +1;
: l9 z% `/ f9 e2 b. b3 c8 V- M           end if;       ) _! S* J! H7 I/ `- q8 [2 K& ]" T
        end if;
+ z7 A; s9 ]0 ^- x7 s* j( Z* q   end if;  
; ?+ P' l$ D4 a/ p  end process P2;, |- t# [2 C$ o* @8 m5 w7 i
end behave1;, a$ q% w: ^( P6 m+ ^3 _
Error (10821): HDL error at divclk.vhd(42): can't infer register for "stop" because its behavior does not match any supported register model7 E2 v9 S. j9 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 model
# L3 R$ T2 [' ~! a) D0 J6 Q! |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" I/ f& y  ~( y; [6 B
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[0]" because its behavior does not match any supported register ( y2 m: a9 U) \7 E, m
model
2 A5 z$ l2 n3 W* ^8 @Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[1]" because its behavior does not match any supported register ' u, Q/ [$ b* s
model
; b: x; u% P* `- N& ^5 h+ IError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[2]" because its behavior does not match any supported register 2 E6 X! K; X7 k' a! ^$ u
model
# [' |6 H, ~5 q& yError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[3]" because its behavior does not match any supported register % f5 ~8 c2 D" a0 Y6 E4 E8 {
model" M. k# v" q& p' ~
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[4]" because its behavior does not match any supported register . B1 W- D* \6 f4 ]
model
2 A! f- o9 \: _7 cError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[5]" because its behavior does not match any supported register % E# r, ^7 F9 d" \. W  z/ ^7 Y
model) p) r) Q3 l4 o' p4 }* F
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[6]" because its behavior does not match any supported register ! U9 z& z& j7 h4 `
model
% s% x1 c+ G( T; {; ]Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[7]" because its behavior does not match any supported register
6 D# |; k1 U( u% E- Z& _% ymodel5 }- F% l$ j  }" e* P
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[8]" because its behavior does not match any supported register " V- O) v% Q6 L0 s& d3 P
model
( W; X: Y/ [' j: h: xError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[9]" because its behavior does not match any supported register
# P- r4 X8 N' R- W1 U1 u+ \* M' Fmodel
$ m" Q7 C9 Q- J6 P% t! oError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[10]" because its behavior does not match any supported register
4 G  _5 R1 L/ g/ [" G( S2 K0 dmodel
  a( j. D; z8 L% r- ZError (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[11]" because its behavior does not match any supported register
" Y0 }, f; I$ Jmodel. L% }! j2 A! Y) Q0 j
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[12]" because its behavior does not match any supported register 5 x9 ?: B, V+ b) t% {7 T2 V
model' v# }  A' h4 Q# 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 - B8 b- u" Z% @
model) r4 A, g- d6 g  K! V8 o) |; K
Error (10821): HDL error at divclk.vhd(42): can't infer register for "icgcounter[14]" because its behavior does not match any supported register
) T! s9 ?1 E" B$ ?" gmodel
3 n6 p+ J7 _4 ^  r# o; ~5 t* y9 gError (10821): HDL error at divclk.vhd(42): can't infer register for "shcounter[0]" because its behavior does not match any supported register
% D! Q0 W, S% Imodel
0 R$ Q/ X9 V( N5 A/ FError: 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;
* T0 T7 X: D1 l7 ~ USE IEEE.STD_LOGIC_1164.ALL;
6 C3 M! v9 e, }, d. X% A8 ^3 h USE IEEE.STD_LOGIC_UNSIGNED.ALL; 1 u- T: e6 @: g+ y/ f( x- i
entity divclk is
; U" F/ o4 w- S3 _9 G& D+ A$ i, Q   port(clk: in std_logic;
4 f5 S; J( @* N         start:in std_logic;$ _6 t5 S' l7 n& q( E8 T
         enable:in std_logic_vector(1 downto 0);
2 g4 j; i7 `! I) W& i/ D         o_m_clk : out std_logic;. R' ]3 I( A$ ^! O
         o_sh,o_icg:  out std_logic;  t- ?$ G# z2 L; A, C" O; P! I
         stop: out std_logic);
4 T+ K- K) z9 c' n$ H+ h/ j end divclk;# [4 b9 ?2 j$ U, j( q% a
architecture behave1 of divclk is
. k( T2 m$ _1 z; S$ Z  A constant halftime :std_logic_vector(3 downto 0):="0101";
$ N  B' O1 b) A7 U signal divcounter: std_logic_vector(3 downto 0);--shizhong fenpinjishu' _( e, J# `" t0 u% u4 k6 ?9 F
signal shcounter : std_logic_vector(13 downto 0);--tiaozheng sh zhouqi he zhan kong bi1 t: s2 {2 }8 h0 F1 o5 o$ q) I4 G. D
signal icgcounter :std_logic_vector (14 downto 0);--tiao zheng icg zhouqi he zhan kong bi% d9 K0 \( Q* D7 ^- g0 Z* s# k6 t2 r, H; p1 s3 O& v5 G
signal delay :std_logic_vector(1 downto 0);--shixian ICG/SH de mai chong jian ge7 o6 n3 \2 a1 H6 K
) T0 X2 X4 ~7 H" v signal clk1: std_logic;
. k) A# ~+ Y2 G0 q6 L begin
& B8 U3 o9 K' p& }, f  ` P1:process(clk,start)--24MHZ,12fenpin
: Z" X' Q; }8 T# x0 P    begin
3 m, h$ v% f! _/ k4 u3 q5 Z6 ?     if start='1' then- v& V1 y' f7 A# u5 t" U8 y6 a
        clk1<='0';
6 j7 G3 M/ y, x$ z: E( @        divcounter<="0000";
4 a9 g1 E$ z0 }9 c. I2 s      elsif clk'event and clk='1' then
9 }8 i+ n, x0 p1 E             if divcounter = halftime then
' g; B' x3 ]+ F* q& \! F( j                clk1 <= not clk1;1 g) L6 t3 t1 E4 _8 S4 S+ ^, M
                divcounter <= "0000";& C1 F2 J/ D4 u: R0 ?" o
             else
' H, ^4 w+ }# m( X1 A               divcounter <= divcounter + 1;
. S5 o" v! `! Z7 m& e" t+ _& B             end if;
: Y% ^1 v6 L/ E' I         end if;8 o6 B- n) P2 a: h; t& U
      o_m_clk <= clk1;
: Q+ w+ I3 v' L% @5 J& @! b0 o# c; |    end process P1;
1 y, S8 p9 z; B1 c0 W& K# }8 X  w' E P2:process(clk1,start,enable)9 f2 V$ G& c* W
begin
4 v! z* K! B! M! n+ I  q      if start <= '1' then) F, V& y% `* P2 h' A2 Y. ~
         delay <="00";
) x8 W$ Y8 K0 g0 F+ [( U         shcounter <= "00000000000000";
6 r9 m8 F! s, E& T  T- [$ H7 [  Q1 U         icgcounter <= "000000000000000";
* e& e1 i" b# s& X' U         o_sh <= '0';
# v" i3 t* v- b( o1 C         o_icg <='1';, m4 H" f" h! M5 _2 u- T
         stop <= '0';
: s! n9 x# R4 U6 u$ l      elsif enable = "01" then
6 w# a% d, |; b& }         if clk1'event and clk1='1' then
" C1 [. c8 r1 o+ a" {- W9 T7 `            if icgcounter <"100111000100000" then    --20000....32767
2 \$ `8 P' d0 }2 J, Z$ l               icgcounter <= icgcounter +1;
# c! y& n0 L: c0 O7 X               if icgcounter <"000000000010100" then   --20/ H0 j$ t, k% F7 z' h" X
                  o_icg <= '0'; ( Z: s7 ^6 Q7 H
               else
, Z/ ?! z0 I) E3 J                 o_icg <= '1';
: c5 f7 P4 A  }               end if;* F' R0 Q7 X! [8 ~" j3 E' r
            else* c2 F; ?- ]) y0 k" C* {
                icgcounter <= "000000000000000"; ! M5 v3 t3 r; w9 `
               stop<='1';' p0 G" M4 [; d! a  O
            end if;: J4 N8 C/ g3 I
            if delay = "01"  then
" v% |6 y0 k$ b5 b1 X               delay <= "00";
: X9 b" M3 @& P               if shcounter < "00000000001001" then
1 `* d9 R! m; Z! D0 s                  shcounter <= shcounter +1;
5 v4 W! j+ I' W' x                   if shcounter <"00000000000101" then  o_sh <= '1';& N# E1 B5 u! j9 I
                     else   o_sh <= '0';
2 i  N+ m* A6 S7 f  Q                   end if;
6 D* ^" e& J: B+ ~9 ~+ f               else
" _2 l: n; {/ l) ^( `- A$ y& B               shcounter<= "00000000000000";
" ^+ J$ S5 b$ B. w                end if;
% H9 B6 P- I4 s: f- U4 B            else
% u. D' y- k0 D+ }6 J- I                delay <= delay +1;
: Y0 K- }: y; J% y, F/ X/ F: p. ^/ v            end if;
. H* h" V* ?- p* h, u$ G          end if;! b7 A9 a1 q. ?' }; |
        " G4 U& d$ Q& |
     elsif enable = "10" then
  k  @: Z+ v8 c. O         if clk1'event and clk1='1' then; r/ Z* z+ K3 y1 u9 }$ ?4 ~5 M" p
            if icgcounter <"100111000100000" then ' }3 C2 i# M: P; Y
               icgcounter <= icgcounter +1;# I. M3 ?$ A6 s
               if icgcounter <"000000000010100" then
' s$ D% c0 l4 }* \; c% c                 o_icg <= '0';
8 d3 `" |  N! ]. _               else
( y" A; A3 j3 L0 Q                  o_icg <= '1'; - q' T9 `3 y9 f" z0 Y1 f) Y8 S4 w
               end if;& I+ R7 ]' T# n3 ?4 u& J+ C. R% E
            else
. f5 i: i6 |4 |: v6 x               icgcounter <= "000000000000000";
  l0 d: C# l2 l& i# L; |2 ^. C% c               stop<='1';8 }" R4 T' T; l6 j7 Q
            end if;
! ]  @& W8 u8 X) ~* F0 f            if delay = "01"  then  b/ V5 }% c- a/ H
               delay <= "00";
, |2 |$ C/ {  [: i8 C8 l! V               if shcounter < "10011100010000" then$ M/ ~/ d8 Z: C$ |/ c( s6 X. ]
                  shcounter <= shcounter +1;
& E# Q9 a; P1 b* {; K0 A, y                   if shcounter <"00000000000101" then
2 o9 \% f% M4 H& |                      o_sh <= '1';
# q& m1 B! ^+ k! m1 M. w                   else
+ }; W; ^& ~- u- |                      o_sh <= '0';0 W2 z+ D7 Y0 h; o
                   end if;- |2 i7 k. k' ]6 ?5 {
               else" x' v( ?' U: Q$ g5 z9 {
                   shcounter<= "00000000000000";
! C" z4 P- @  x! B. Y/ b9 A               end if;
+ i4 t! q" D- _7 [            else8 G/ {" |* u( `+ W- X
                delay <= delay +1;" ^, V8 h  K  W  V; I* A4 C2 v* p' G
            end if;
4 R& @7 C7 i+ h: d% E8 h; z         end if;0 p8 g" K2 L5 u+ p7 y& w5 L
    end if;0 Y' W% w1 Z* ~
   end process P2;
* D3 D8 ]1 h8 G* {+ G" P% m end behave1;4 n7 X* V$ T5 o6 m

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

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-24 08:52 , Processed in 0.066728 second(s), 36 queries , Gzip On.

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

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

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