找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

FPGA问题

[复制链接]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
跳转到指定楼层
1#
发表于 2014-6-30 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

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

x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频
/ p/ E/ p4 |' O/ [+ E, g) ~//divdFACTOR--分频系数,实际分频数为divdFACTOR*2  X2 x6 ]) p' K) p& i
//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
. k/ ~" ^/ Z3 C4 d% R! o( B  Pmodule gen_divd(reset,clkin,clkout);
+ s1 G5 K. X' `/ R0 c7 ]  ^        input reset,clkin;) T; d  ~6 d# b9 C& J8 P" H
        output clkout;- U; G% Q4 I" X4 M
        parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
, |. B) s+ b4 q9 h$ z- [! _) Y6 a# }        parameter divdFACTOR=1;//分频系数是divdFACTOR*2
- O+ p3 {* V! T+ w, W3 `0 a* f        reg clkout;; l8 \( Y! N1 J, X" e
        reg [divdWIDTH:0] cnt;( e6 A6 x/ S8 ?7 s
        9 J: `$ p) b2 O
        6 _$ p9 `( {; k3 e1 W
        always @ (negedge reset or posedge clkin)$ _  p( U% u, L) f% o5 D0 W
                if(reset==1'b0)
4 [! e7 ~, H. i6 _5 j                        begin
& t$ T9 y/ _, D0 y. r9 b                        cnt=0;
5 L' _$ O4 I/ [  f  X+ V                        clkout=0;
" [: s7 ^* g0 C9 L) J( q4 v                        end3 y2 w! ?  `; L0 y0 h# F
                else: F! g. A5 w1 |# A8 E8 p2 g4 s, ?
                        begin3 X1 x, b5 w# U' F7 a+ c
                        cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的
) u" d3 Z  H! D, Y/ k6 y5 n                        if(cnt>=divdFACTOR), |9 U( p) H! y3 T; ]4 g
                                begin
) X0 P; x6 R  E& ]: w                                cnt=0;
' g5 O' C, z0 Y* p2 G                                clkout=~clkout;% A# m- ^6 u, ^' p
                                end
; z. n: L0 p) R8 {7 H- {# E                        end% x/ l; V. \9 F, C
) n5 \6 t1 o5 O2 M
endmodule
0 z% @: O0 L( a) C4 g
3 q. i7 z" Q8 J5 y. ^) a- C`include "gen_divd.v"
! q9 q( s/ Q2 m7 M
) F) O. M" g- m) Z' f4 A4 T2 N+ ^module led_w_dir
& e+ T3 }: H3 R        (2 Y) M- N2 C# H! q2 A
                ClkIn,( Q" c9 |  k9 ?" _) Y
                KeyIn,
9 g6 l; A* Y  a% I! d                Resetb," ~  w7 f3 I% G( T2 i1 ?- ]( W
                LedOut
7 j% q- D( z! I) T8 V        );
: b, ]! t) o) H3 B        input ClkIn,Resetb;
4 m9 Q( L( j7 c, P  {0 X        input [2:0] KeyIn;
: Q0 v1 |$ Q7 `2 W5 c5 g6 l        output [2:0] LedOut;
2 x4 y4 Y. D, ^2 M        : _. w! W" {% O8 X$ D
        reg [2:0] LedOut;
: R9 V6 k' s0 q+ L        wire ClkLed;9 L8 y) ]2 D) ~: G5 v; U# a+ k
        reg [2:0] Cnt;7 j* F: E) t" t1 u
        # x* |- m  N, o  ~( _* g
        defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频7 k0 \, C2 G9 f, _2 m, h2 r4 {( G
        gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));       
//帮忙解释一下是什么意思啊。% v5 b$ T, P$ C# Q1 I* d% H) _
       
6 Z5 f, a; ]4 y0 e        always @ (posedge ClkLed or negedge Resetb)1 O( G4 B, e9 Q6 J( N# K- x
                if(Resetb==1'b0)7 T7 X% L( x: a% q  Q
                        begin
7 ]6 D5 J' g5 V; J. l* e                        LedOut<=3'b111;
3 z. `" J( h9 `9 ^+ x7 E& x- Q& u                        Cnt<=3'd0;
# }' E$ {8 @: ^' ?3 p                        end
: G7 C0 M: Q& ?8 `3 c' h                else2 r4 v; G! K+ }* W# c6 Y- @
                        begin  N" Z" b2 |" C# x- o* B1 R
                        if(KeyIn==3'b000)% k: C4 t. x' n: m1 F& F
                                begin
* S$ _2 P/ c( B! D  x! a                                if(Cnt<=3'd2), G) y$ M# `* m! M6 W* c
                                        begin
+ R6 C+ ?$ P" `1 j7 K; R, p                                        Cnt<=Cnt+1'b1;  a0 N2 x  @) d+ U' z
                                        LedOut<={LedOut[1:0],1'b0};//拼接# P/ A+ g' Q, l- f6 `5 Q: H
                                        end
' E( r6 C+ x+ }                                else       
" x- k9 R  V, W                                        begin7 D* ], N2 ~. \" n
                                        Cnt<=3'd0;- w) m# r- n4 s9 r- ]
                                        LedOut<=3'b001;5 }8 v+ A+ V4 V* X1 X
                                        end5 X: v$ Z7 y% U& M# e% b
                                end
' c1 y, W, A5 K8 E2 G* w1 p                        else if(KeyIn==3'b111)
' x$ O. {, C: `6 C                                begin, D! x6 {# t5 f
                                if(Cnt<=3'd2): Q4 {& C7 S. |7 a( I! d* K
                                        begin
- h2 C) j0 c: S, {7 y4 b. D5 z9 G                                        Cnt<=Cnt+1'b1;+ Y! D; \8 Q% M, s; W" H! e; f
                                        LedOut<={1'b0,LedOut[2:1]};9 ?7 U9 z# X9 z) u6 `9 ]/ A+ ?
                                        end1 T! k) C; e/ P! ~
                                else        ! L$ n; m% S% V1 N! D5 p: f2 y
                                        begin+ p" z0 C/ l! t+ l
                                        Cnt<=3'd0;
" ~2 q' I/ C5 F2 Y5 k! }, Q$ s4 l4 h                                        LedOut<=3'b100;% _/ @) t' `% B: |2 _+ I  l5 E
                                        end3 ^) |5 N& G: j/ o
                                end
9 j0 Y3 k6 N) f# Z                        end
, @4 x+ }6 g: P  @endmodule
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
2#
 楼主| 发表于 2014-6-30 11:54 | 只看该作者
求高手解释一下红色画线的语句什么意思 啊,我是一个初学者

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
3#
发表于 2014-6-30 17:12 | 只看该作者
1292569609 发表于 2014-6-30 11:54# d! x9 O- p9 ?: l  j
求高手解释一下红色画线的语句什么意思 啊,我是一个初学者

8 q3 F! m1 }* h- w3 A  A这是systemVerilog的语法:
/ V7 G& x- y4 ?% c+ A: v6 E, _! [defparam  Gen_ClkLed.divdWIDTH=23, Gen_ClkLed.divdFACTOR=10000000;
. q6 W4 q6 T5 h" f: s7 s7 H% P( t5 N: r" t
重新定义了层次结构(Gen_ClkLed在下一句里定义)里的参数divdWIDTH,divdFACTOR;
5 y8 j( i' A2 A" f. J
' l  d) Z1 n) G( lgen_divd   Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));    - n7 R) W0 k( v5 k

( n. G4 ~* D  a2 G4 u0 O2 M例化了gen_divd模块,例化名是Gen_ClkLed。其中的参数divdWIDTH,divdFACTOR前一句defparam语句里已经定义过了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
4#
 楼主| 发表于 2014-7-1 10:00 | 只看该作者
好,谢谢啊' M1 S! G! n# n6 B+ o: I$ K

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
5#
 楼主| 发表于 2014-7-1 10:04 | 只看该作者
再请教一下啊
2 F+ F$ ^2 G; ?' ~# E) }6 S
( H- u  _% p" I; b$ eError (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declared more than once& W) ^, [' o3 ]6 i5 C2 M! u
这个什么原因啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
6#
发表于 2014-7-1 10:27 | 只看该作者
本帖最后由 lvsy 于 2014-7-1 10:40 编辑
1 ^* j( H( r% j9 [+ Z2 b# ~
1292569609 发表于 2014-7-1 10:04( n7 E4 d3 i$ a! Y. m) j% ~+ z" q
再请教一下啊
  {. t" ?8 o- M& ~6 j/ S3 @
4 [) e2 Z7 `. s: V5 y7 F( dError (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declare ...
* P9 o. Z- Z9 w. l. Y
6 F1 Q2 v- c7 H7 u0 B" ^6 e* o
是不是指Gen_Clked?4 e! w$ s9 B. A9 H/ |! w- ^! s

& u3 S9 k* W; e- r把defparam 这句移到gen_divd Gen_ClkLed(......); 模块例化的后面试试看!
' j3 e/ ]/ F# D9 d% `, R/ d4 N2 n" n
5 Q& w1 |8 q# {, r, R或者这样例化7 L+ f: H- v- W6 O

# U1 K, ~8 h+ Z" D; o. ugen_divd  #(.divdWIDTH  (23),
( Y# M$ O. w/ A/ F1 ]                 .divdFACTOR (10,000,000 ) )& D+ B! h3 L/ G( w2 B7 F
* j7 v* q. t7 Y4 \6 k8 Q
               Gen_ClkLed (.reset(Resetb),* @9 y; {5 x3 R1 \& H6 ~* E! I1 s
                                .clkin(ClkIn),( }# J6 R; K6 l8 u! K. L$ N
                                .clkout(ClkLed));        

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
7#
 楼主| 发表于 2014-7-1 10:37 | 只看该作者
好的。谢谢啊

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
8#
 楼主| 发表于 2014-7-1 10:38 | 只看该作者
现在提示这个Error (10663): Verilog HDL Port Connection error at led.v(8): output or inout port "reclk" must be connected to a structural net expression0 O- O) l/ M6 @" d/ }
是什么意思啊
( r, ]# X( J. L" }7 x  D5 a; W$ W

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
9#
 楼主| 发表于 2014-7-1 10:39 | 只看该作者
`include "gen_clk.v"6 |& C5 J; e2 m. {: @

1 }; k3 t, I1 \( Zmodule led(clk1,reclk1,cout1,cout2);
. a$ N* Q/ B% w- j9 [input clk1;# \2 B7 ^. i/ L( z
output reclk1,cout1,cout2;
7 e: k+ S7 v$ `0 V% r" e4 z/ Greg reclk1,cout1,cout2;
! k, _# |; j, d3 ^# ]: E$ g' m/ s8 c  ?
gen_clk led(.clk(clk1),.reclk(reclk1));8 {# ^- @& m9 X$ v7 u
defparam led.width=2000000; //频率是0.08S;
3 M0 i0 Q& e6 }! P6 M1 s: z7 N5 D7 m
3 Y: W' I; s9 v5 I) k- V5 z  e5 A* Walways @(negedge clk1)
& Q" P7 R; t  x  R5 Z$ h    if (reclk1==1'b1)
. b* a% T6 i- x1 P, b/ Z. z) g1 f         begin5 Z& D( J# ]% X7 D) M
         cout1=1'b0;/ U1 j& y! U* |% V% x" o% s
         cout2=1'b1;
4 k( F2 i, e. d         end % H9 v  S7 K/ h$ Q( R. Q5 q
         else& o3 C% }5 u" a) P
         begin
) U7 p- x" D( u8 g- u; W0 J         cout1=1'b1;
3 f! Y( C& m5 K2 k$ ~' @; Z' O         cout2=1'b0;+ `! R9 `/ G. H6 ^6 Y0 L( H
    end
' |4 F* w7 \, Q* @' Y  mendmodule
* ~! a8 ~! \* V- y! ?& }( O/ J7 n+ R
module gen_clk(clk,reclk);3 z5 X: m* c& f) R0 G
input clk;
" h/ r2 U( k5 w4 n: }% \output reclk;9 O& y1 N: \4 [: C: h
reg reclk;# S0 o5 w2 v9 H, g# _* i; d
parameter width=1000000;//分频数1000000/25M=0.04s
( }" {% l" n  N, M- ]8 ?reg[11:0] count=12'd00;
9 Y  i: Q& l2 E' k. k8 z7 _% valways @(negedge clk)+ l+ w# y$ S# I8 i# H; K1 w  ^! y
  if(count>=width)9 k7 ^8 j7 s+ g" V4 Y. e% O
  begin
) m# ^1 x8 C/ n( a+ `  count=0;
( y8 ?" h) Y, ]. d  reclk=~reclk;
- o7 ]: q- Y( B/ ^# }  end
" o' ?# ~+ R: F9 F1 G  m else count=count+1; + P3 Y1 X1 x5 q  u
endmodule
" X* `' Y) \' n这是全部的程序了3 ?. n( j/ H% {) e
麻烦指点一下啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
10#
发表于 2014-7-1 10:50 | 只看该作者
1292569609 发表于 2014-7-1 10:39
+ d5 o9 e2 z- {1 g`include "gen_clk.v"7 i4 |! Q! u1 _. s; B8 y- p7 J: D8 N

( A% }) E/ ]2 [1 K" x& F/ {module led(clk1,reclk1,cout1,cout2);
$ v& c$ |& x3 d
发现了两个问题:! a& e. M7 ~5 R! Z3 x4 u
1. gen_clk模块里reclk没有初始值,综合会发现latch。
/ J) G' S4 T6 D" z9 B  ^2. led模块里reclk1不应该定义成reg型,应该是wire型。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
11#
 楼主| 发表于 2014-7-1 11:37 | 只看该作者
为什么要定义为WIRE型了4 L" t) t6 F4 B$ d" e  Y

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
12#
发表于 2014-7-1 13:11 | 只看该作者
1292569609 发表于 2014-7-1 11:37* D- E9 y5 l5 `% N- G
为什么要定义为WIRE型了

' I" Q, s# g( n8 ^* c) o6 N. u因为它是gen_clk模块输出的,led模块调用了gen_clk,在led模块里就不能再对它赋值了,否则就变成多重驱动了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
13#
 楼主| 发表于 2014-7-1 14:00 | 只看该作者
明白了,谢谢啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-27 22:09 , Processed in 0.064799 second(s), 33 queries , Gzip On.

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

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

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