找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

FPGA问题

[复制链接]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频0 C5 q. ], S' j3 s3 w0 A3 n& x
//divdFACTOR--分频系数,实际分频数为divdFACTOR*2  K" Z2 @) i6 s. _' _
//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR6 E. ^& H. u' ]0 v0 J% q
module gen_divd(reset,clkin,clkout);
3 v& f  O/ e$ d: Y; }8 t. T  L        input reset,clkin;7 T  G7 C$ s! ]/ b
        output clkout;
8 a) _; |5 l$ Y% y& B        parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
/ V7 I( ^( E6 I5 p" `2 |' W* j( }        parameter divdFACTOR=1;//分频系数是divdFACTOR*2. P! E" X. L( Q  Z1 A
        reg clkout;
6 z+ d5 P) p) L4 ?$ c        reg [divdWIDTH:0] cnt;' {7 l" P& y" V
       
3 \/ _5 K/ W7 Q& d) f# Q        + p8 \& W! q9 o3 b. Z
        always @ (negedge reset or posedge clkin)
1 {/ P& @* S& V3 x" x                if(reset==1'b0)
) b0 t6 @* n+ s+ z                        begin$ n, p5 E" G1 B4 ]
                        cnt=0;+ a: s) k/ l' f( T* m4 i
                        clkout=0;
0 F% V9 Q0 n" U' J, M) ]! @                        end3 O( `2 j- M. m7 ]) S6 ~5 G8 H
                else2 |% z4 x2 c: z7 S$ Q
                        begin
# I' `7 \% x# @+ P' K                        cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的2 m2 W5 T- i5 P
                        if(cnt>=divdFACTOR)' |+ P. d5 H  g. ^4 D
                                begin4 m0 r; l! R: \/ B+ R5 H
                                cnt=0;
3 V$ g0 I. |3 x6 k+ q& |* f                                clkout=~clkout;% a9 j# `+ v, L; _3 L( n
                                end   j$ _7 ^* Y& C. C5 F7 f& y- G
                        end
) u, I" K8 A! n; A) v7 T8 z6 a( \- m1 U& |3 `: @3 T
endmodule* K7 D& {/ t& ^; E1 e

: b; j% a9 O( Q$ k5 Y`include "gen_divd.v"! U% f& J( Y) a1 H2 i

* E' l# q1 q4 F* H0 ]+ c4 Qmodule led_w_dir
& a2 A8 }6 X; ]. B8 C8 N6 t- s        (, S# k( P0 z( u! J7 B% D! r, M
                ClkIn,
8 N: l# T4 h0 e: R6 I                KeyIn,5 @  ]! X9 X4 z& d7 t
                Resetb,4 D/ ?/ f8 U. j1 g9 h$ L
                LedOut
2 r' r& N5 `4 z        );: C$ R3 u" e5 r+ ~
        input ClkIn,Resetb;0 o% E/ d9 A6 v9 O$ }
        input [2:0] KeyIn;6 b7 \8 j7 {1 F& e5 y
        output [2:0] LedOut;, H1 v' t& ?( z/ K
       
6 e5 O7 T& V7 ^        reg [2:0] LedOut;
$ ]6 q6 o  k) H( |* \+ a        wire ClkLed;5 F) v7 N! F2 j- @1 e- b
        reg [2:0] Cnt;
, o1 g1 F3 K, V" ^' `/ _) m9 K        ; S# b+ [8 ^3 f' m6 l) R
        defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频
9 l0 I, K( G( `& q" S3 M        gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));       
//帮忙解释一下是什么意思啊。
/ Y9 f7 H+ h6 V$ Y' v1 T% l       
) b, P7 f. f1 Z+ V6 [+ s, \! C        always @ (posedge ClkLed or negedge Resetb)1 V9 j( S3 @% B) F, q# L6 N
                if(Resetb==1'b0)  M4 B+ D& t9 a/ O" h) {
                        begin
; K3 K# f/ h, J                        LedOut<=3'b111;
# u+ p* W4 l1 o, w& e4 S1 s" v                        Cnt<=3'd0;% N+ @- b0 M9 I% v% `+ I0 I; B
                        end- C' Z. e& J+ I' g, b7 f  P
                else
- z$ ^* `) v! D                        begin: |  X6 ~) I. u# z: t" Y5 l4 k
                        if(KeyIn==3'b000)& {4 X. @/ q! m5 V
                                begin1 `4 w7 a; z, N0 p5 q
                                if(Cnt<=3'd2)- m2 [/ \9 b. p2 |/ J( b
                                        begin
* p6 |$ ?" ?, A4 j3 R                                        Cnt<=Cnt+1'b1;, ]/ i: E' D) t& n
                                        LedOut<={LedOut[1:0],1'b0};//拼接
6 u9 K( ~+ i! I/ c                                        end" L1 i/ ~7 O" c8 M7 e! M) i# ~
                                else       
* \6 p3 A, X! w8 p! Z7 X/ ?' d                                        begin* L) m: A6 s/ L  `& f1 }. R
                                        Cnt<=3'd0;4 e) X+ y3 [* u# ]3 i0 J: M' I
                                        LedOut<=3'b001;3 u; j0 J; Q' Y+ x$ A4 F
                                        end4 q: s  b6 J9 `5 e" |
                                end
/ ~0 F9 w5 i8 K* e. o" o6 o& @                        else if(KeyIn==3'b111)
( D2 J' R9 O( C4 P                                begin! J( p: {$ q  K0 W" b  S# d1 v
                                if(Cnt<=3'd2)
5 h+ F. x+ Y& w1 |, u4 x                                        begin: D3 }/ G8 ?2 n  D' O
                                        Cnt<=Cnt+1'b1;
2 O8 y- e% x7 `  ^( R1 |                                        LedOut<={1'b0,LedOut[2:1]};
6 i4 k! H! g* C                                        end
& C3 `% A1 i' v                                else          I& }, h9 v' J
                                        begin' x& I4 D/ E+ f! ^' A
                                        Cnt<=3'd0;1 [& b" U- x1 f( V
                                        LedOut<=3'b100;
. m: ^# a3 i& a) P) K6 W& {                                        end+ A% M! H6 X! B. I" r
                                end% x) [! S$ u% X/ L+ i, h+ D
                        end
" s4 U; _4 S! L- J: _# g7 Q/ b' kendmodule
分享到:  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" v8 J6 n0 J" P4 T& _5 P& F
求高手解释一下红色画线的语句什么意思 啊,我是一个初学者
- K& T* H$ R7 x. w+ ]+ |/ z
这是systemVerilog的语法:
# ]( f& h" y/ b/ q  g2 odefparam  Gen_ClkLed.divdWIDTH=23, Gen_ClkLed.divdFACTOR=10000000;
2 K6 U, U3 w+ x. L/ a
- ^+ S! e8 T1 B% {% C, U, }2 R; q重新定义了层次结构(Gen_ClkLed在下一句里定义)里的参数divdWIDTH,divdFACTOR;$ H- J/ _, S4 q, ?  }' y
5 N" p/ D' x% w' U# A
gen_divd   Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));    & p% K7 `) U" S* q

; I) O4 P. C; X( r& \例化了gen_divd模块,例化名是Gen_ClkLed。其中的参数divdWIDTH,divdFACTOR前一句defparam语句里已经定义过了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
4#
 楼主| 发表于 2014-7-1 10:00 | 只看该作者
好,谢谢啊' e, |" D# X# T3 g3 D

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
5#
 楼主| 发表于 2014-7-1 10:04 | 只看该作者
再请教一下啊
! Q1 _9 w  d: O0 M
# F. y9 U  c* t- Q- x0 I+ VError (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declared more than once( ^1 m, x) F! R
这个什么原因啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
6#
发表于 2014-7-1 10:27 | 只看该作者
本帖最后由 lvsy 于 2014-7-1 10:40 编辑
9 m+ t4 H+ [+ ]+ w$ z, t
1292569609 发表于 2014-7-1 10:04
3 ]0 |! ]/ R' t* a3 B再请教一下啊
+ j! E% ]5 e7 j! N# f) C! `2 _* U) S+ {, @; T: T# Z1 I  }8 E6 b
Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declare ...
& p, W/ z1 D8 |) Q3 j  a6 ~

3 X- U( }. v0 x( n8 @. d- X是不是指Gen_Clked?4 A5 c7 @  a( v5 U7 y) C3 |
' ~8 P6 G4 U- A
把defparam 这句移到gen_divd Gen_ClkLed(......); 模块例化的后面试试看!" Y8 B" n) z7 m$ a( X

+ p; h: B. ], N1 Q# ?$ Z9 d或者这样例化
. X; D% u* V+ \) D7 Z. t' d; o* H
; }0 s% _. f$ t) a$ igen_divd  #(.divdWIDTH  (23),
* b2 {: V  h2 t/ G5 Q  [# y5 H                 .divdFACTOR (10,000,000 ) )) C& v) [( e: t# b9 J0 ^, [/ p

  B' K$ _0 K3 A: ~! ^+ t               Gen_ClkLed (.reset(Resetb),
) m% R0 e- k$ I$ x) l0 f: |9 U4 `                                .clkin(ClkIn),
1 |* V- R5 R( d' e( k8 t                                .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 expression
3 H9 t+ [) P, n. z& B% x) }! Z是什么意思啊7 I# Z* T. M! A+ v& X' i; e) V0 ?1 h

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
9#
 楼主| 发表于 2014-7-1 10:39 | 只看该作者
`include "gen_clk.v"
  P; E/ A3 G/ p0 o! I' Q4 U1 q) @5 y
module led(clk1,reclk1,cout1,cout2);
2 G$ U+ D, q" }/ Zinput clk1;
. `+ D( P/ `& t- D" q' Coutput reclk1,cout1,cout2;; T$ o' \% K" U$ Q& t( @
reg reclk1,cout1,cout2;
6 q) [+ N. m  z
* V+ l8 _5 U) W5 T9 M; f2 v# Z: }gen_clk led(.clk(clk1),.reclk(reclk1));2 q/ D7 [5 P' P( @" o
defparam led.width=2000000; //频率是0.08S;( \# }) V4 c  k( b5 L9 B7 h9 n
4 D: }) B# J  s3 {
always @(negedge clk1)
) B; l$ M  u# X+ I7 g    if (reclk1==1'b1)% t/ g% X. m# S% K4 A' h5 |! a" W
         begin
  j" S5 k' H( g+ H7 J4 }  P         cout1=1'b0;
8 C" `% W- g- ?! s; T         cout2=1'b1;
! y9 r: @  i; f6 Q- S% g         end
4 h  O! E/ _: X' [; q         else
) R4 `/ g& A6 Y& `/ d         begin
- B; m8 v* L4 b$ e         cout1=1'b1;3 b, d+ r4 V# c8 ?# ~) ~) J7 A
         cout2=1'b0;
8 F1 l: v) q" [( _2 ]    end
: _- O7 Z! {  m, @* _; _  Jendmodule
/ I1 L% r5 z2 {: O; P  j; I* t9 y$ y/ H* f5 R
module gen_clk(clk,reclk);* U; r" d: w3 r( ^6 g  I0 [
input clk;# l9 t" Q3 ]9 Z8 i
output reclk;
) l+ z, p. `; Z' e( s1 o+ }: Preg reclk;
% {% ~3 c; m8 f9 C) aparameter width=1000000;//分频数1000000/25M=0.04s
# j( @9 t4 Z9 |) Preg[11:0] count=12'd00;
: I! l8 T* v" W, o. m! c  H( Ralways @(negedge clk)
4 k: t. {/ M$ m3 ~8 L8 ~1 l5 s  if(count>=width)
3 i  e/ i/ n2 }. f' d  begin  p' o# F3 x+ k( {. j, |3 }5 Y# I* e
  count=0;
1 R8 B- e( L6 e1 K, j  reclk=~reclk;
7 d$ l) N$ V" G3 K  end3 H. K9 e6 w7 o2 [
else count=count+1;
2 O6 T7 q8 M) j" q+ e8 fendmodule   x- |1 {) t0 W% Y5 S/ q
这是全部的程序了
7 K$ k0 z9 @" u+ Q0 `' Z9 _麻烦指点一下啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
10#
发表于 2014-7-1 10:50 | 只看该作者
1292569609 发表于 2014-7-1 10:39
0 J1 C2 O' J/ ~5 t`include "gen_clk.v"6 z. L2 E0 ]& ]" N/ I# C

- M  m0 |5 ]9 p# b; smodule led(clk1,reclk1,cout1,cout2);

* o' W( c. i7 r9 P; q发现了两个问题:
0 p, e3 u' u  p1. gen_clk模块里reclk没有初始值,综合会发现latch。& m! ^) `( p. l) `. I5 F
2. led模块里reclk1不应该定义成reg型,应该是wire型。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
11#
 楼主| 发表于 2014-7-1 11:37 | 只看该作者
为什么要定义为WIRE型了
0 ^; k- o( e) U' r

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
12#
发表于 2014-7-1 13:11 | 只看该作者
1292569609 发表于 2014-7-1 11:37* @, |) Z# V# W+ [
为什么要定义为WIRE型了
5 Z3 O" J+ f0 {1 z- q8 O7 R" {4 {# {
因为它是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-24 01:49 , Processed in 0.061506 second(s), 33 queries , Gzip On.

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

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

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