找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

FPGA问题

[复制链接]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频$ ^( @  |! W6 n2 l% C, F0 u% u
//divdFACTOR--分频系数,实际分频数为divdFACTOR*2
( u: I! {2 `- R1 B, e//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR' E6 X* P1 N- K' b
module gen_divd(reset,clkin,clkout);
# }- L% r+ }6 b9 X' X, `        input reset,clkin;) u: \" |5 v- J1 r
        output clkout;
' A, ?% d( [9 m        parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR- ?8 ~; A0 n5 m9 a5 G& G; p
        parameter divdFACTOR=1;//分频系数是divdFACTOR*24 ^! ]5 w$ k1 o+ v
        reg clkout;
! G! [5 X2 w* i9 o        reg [divdWIDTH:0] cnt;
1 l' r( T, v& P! x: p+ b        : K& K9 q8 _" G  ^
       
. s+ ?- L( s: E" _: U; c+ I# p        always @ (negedge reset or posedge clkin)
! L" A  }: u  @0 a1 z                if(reset==1'b0)7 K9 K6 R- t% C  P
                        begin
8 m! O' i) h# u7 c; Q5 z" W                        cnt=0;
% v/ z0 N% f) V. {" v                        clkout=0;
3 ^/ d6 G; p3 `% j2 X* d/ Z  [  }                        end
* f# T- c( p0 A& Y! j$ b+ j" [                else
6 e4 j: |. V: v& G# |+ w                        begin
3 v: t$ q5 Z) I7 K% P/ `                        cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的
  f6 c. {+ Q- l: ]                        if(cnt>=divdFACTOR)
: [7 B( f5 c& B; Y& F9 L                                begin
2 @! U/ q! _, }9 K                                cnt=0;
- U# Z: G- j5 V% O5 O' g. ]1 z9 i                                clkout=~clkout;
/ j+ z( h) I6 ?$ y                                end
% K1 f* M) C/ w                        end
7 y; m, T. d' U" [; h% B) U5 `* m% {. `, C8 {% a+ D
endmodule- x: H; H) O: B/ J1 Q

% O/ P9 t8 @1 h% i9 N2 m) b. |`include "gen_divd.v"
8 ~1 W3 h/ m+ O1 Q; u( U" ^, b) ^' l% f: `9 b5 e: G
module led_w_dir: j5 |3 n* R5 ^: \
        (7 z( t3 p7 g3 A5 I0 ~6 l
                ClkIn,! ^: E; C2 |4 }! P" x) ~6 O
                KeyIn,
$ A1 {, }2 E1 p6 g7 X; G& |2 d# ]% ^; a                Resetb,! `+ _# \" I6 s. {4 @. |7 E% `
                LedOut' k6 Y2 V' t! D  v
        );
4 ^; K1 F( V, {9 R: ]8 e! T- K$ k; i        input ClkIn,Resetb;
0 L  t7 Z' s7 `! @1 V/ U* [9 p  u        input [2:0] KeyIn;
+ w! N8 ]- u5 N        output [2:0] LedOut;5 x! `7 e4 \. c1 ?) _3 i
        8 y3 k% v- }9 _5 j; y
        reg [2:0] LedOut; # B  r9 z0 X9 N
        wire ClkLed;, ^: \+ ?, f" I9 p; k, {
        reg [2:0] Cnt;- I( j( s1 F) ^6 `; b0 ~% }2 m
       
& `, Z3 D1 `6 X- u2 W        defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频" L" S& a; _7 I' Y+ a, `1 a
        gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));       
//帮忙解释一下是什么意思啊。
$ ?* x8 |% z. c2 C7 |5 _1 J        # n0 Q8 J% k2 z* Z8 _$ d) p
        always @ (posedge ClkLed or negedge Resetb)8 S1 a  c" j; Q5 N& ^2 h
                if(Resetb==1'b0)% y9 ]7 V) c1 m, B4 ?, j
                        begin/ P% U9 z( l" Z
                        LedOut<=3'b111;4 u1 }& e9 I$ e; h% u) m
                        Cnt<=3'd0;
" q  y" ^0 e6 I9 x) e                        end
* S* K# J2 c7 Y. n  Q                else, r6 m- W, r( ~2 l8 W/ o) a' \; n
                        begin
% D' A5 U. U& q  `) `                        if(KeyIn==3'b000)
4 m8 E% B0 a! {* e7 p+ s                                begin
# {9 S) |# q  n8 N                                if(Cnt<=3'd2)3 O: z6 B4 z/ x- C  b8 f# _) m
                                        begin8 v1 _) G4 r7 c8 H+ K) Y( e
                                        Cnt<=Cnt+1'b1;/ m7 @8 h# d) @3 g- s- O% A) K
                                        LedOut<={LedOut[1:0],1'b0};//拼接6 W9 H6 |" |  Y$ s/ \6 j& n0 ?
                                        end
' m: C) U# `: H. s& D: P                                else        : m0 ^6 ?% E6 u* d. h. t3 _
                                        begin- x; M  r# T/ G6 d0 h8 t. M0 k+ w
                                        Cnt<=3'd0;; |0 [8 {; \6 F; ]1 @0 E
                                        LedOut<=3'b001;
9 [% R. m7 k1 [; c0 i& Q                                        end6 f* G1 B9 c* ^2 y- N, M
                                end
; m1 M6 a" E; f" B$ }# E                        else if(KeyIn==3'b111)& x  \) m3 x' B. P) l& ]
                                begin
3 s) |6 F' M) f$ D- g/ z$ n7 k                                if(Cnt<=3'd2)
8 U8 n1 j$ M" \' o                                        begin
6 Z, K. j9 M9 @                                        Cnt<=Cnt+1'b1;
5 r- a- y6 C% I6 c0 d& d                                        LedOut<={1'b0,LedOut[2:1]};
  J# {+ p4 N2 ]: u& `4 ?( m" f9 \                                        end
. ]4 U: K* `9 |& h, @3 j                                else       
( \$ e, x+ ]5 C                                        begin0 w+ \( M5 [0 b
                                        Cnt<=3'd0;0 s! \) Y7 x8 w
                                        LedOut<=3'b100;
! A! }% ?" y$ V" k" x4 M3 k                                        end
4 z/ v/ T8 K' Y: y+ N                                end
0 R( j6 G' F& i1 x                        end
+ Q6 U# ^1 i  W' N6 e* }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
3 ]7 I7 k( m* Y0 x2 _2 o" j2 c9 N求高手解释一下红色画线的语句什么意思 啊,我是一个初学者
0 B$ n" m) _! N8 c. v: k& W; j
这是systemVerilog的语法:2 R( G" e. M' R, i! @
defparam  Gen_ClkLed.divdWIDTH=23, Gen_ClkLed.divdFACTOR=10000000;
8 [( v$ m# I' k
3 j7 a; l& i& F* N4 i* F7 U重新定义了层次结构(Gen_ClkLed在下一句里定义)里的参数divdWIDTH,divdFACTOR;0 Z" F' ^  n3 c* D

/ y* `  a( x1 ~3 f  R9 ogen_divd   Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));    % J! F% ?3 c' h5 Z- i2 o5 J
4 }3 ]' A& w; |+ h* j6 j
例化了gen_divd模块,例化名是Gen_ClkLed。其中的参数divdWIDTH,divdFACTOR前一句defparam语句里已经定义过了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
4#
 楼主| 发表于 2014-7-1 10:00 | 只看该作者
好,谢谢啊6 [6 ?8 ?1 o  H; ^

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
5#
 楼主| 发表于 2014-7-1 10:04 | 只看该作者
再请教一下啊8 Y, q) _) ^4 K9 S- b! U

" V' U$ s! V1 g) ]; M( D( ]; hError (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declared more than once
3 H: B- q* o! i/ U/ {! p+ e. l2 q这个什么原因啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
6#
发表于 2014-7-1 10:27 | 只看该作者
本帖最后由 lvsy 于 2014-7-1 10:40 编辑 5 c" J7 g! D% p& g0 t8 s
1292569609 发表于 2014-7-1 10:048 p; @: J0 {: d9 X9 b
再请教一下啊
- v( t/ l+ m9 F6 M3 j3 q5 S, X, c, n$ n3 m* e
Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declare ...
0 [5 k' T6 ~3 ~/ a
( ?  u$ Q3 f: w8 `/ j7 Z/ d4 N  m
是不是指Gen_Clked?1 j- u1 S9 z. |- n

! T5 H; A1 o% c8 g9 w- L把defparam 这句移到gen_divd Gen_ClkLed(......); 模块例化的后面试试看!
: c  g! F. S' [# J& r! U6 B
) d6 Q3 Z; w9 f( d% T/ {或者这样例化/ \  }6 c7 C2 R9 D  q
9 \1 c! v2 p+ f
gen_divd  #(.divdWIDTH  (23),, d- n5 S: p& u& ?7 o) B' G& I$ p
                 .divdFACTOR (10,000,000 ) )* A) n9 U* a5 S. H4 M
% ?4 H% y! c- ]0 y2 v9 R
               Gen_ClkLed (.reset(Resetb),
" Y- }3 ^$ X- K! y9 m                                .clkin(ClkIn),7 e' w/ s6 @( M3 H1 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 expression1 S! W( {/ i: o6 b. l0 i$ Z
是什么意思啊
# W% h7 u' A7 N( O$ r. s" ]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
9#
 楼主| 发表于 2014-7-1 10:39 | 只看该作者
`include "gen_clk.v"
7 f6 O( s( ?( \, f. b# d3 _
( @& t8 L3 Y8 a- W; y8 Fmodule led(clk1,reclk1,cout1,cout2);; W. x- q6 O0 {; a/ _
input clk1;5 G4 v& d: y& g1 h4 O
output reclk1,cout1,cout2;
! m8 B9 N1 ~9 ?! D' j! g& Q! Breg reclk1,cout1,cout2;7 B" W8 Q/ M2 k* F
& l' S% n7 g7 _8 m; m9 D
gen_clk led(.clk(clk1),.reclk(reclk1));1 t9 `& \2 [/ o" {, o# k0 R; Q
defparam led.width=2000000; //频率是0.08S;1 W# L( T: Y( v0 D( W2 A6 i
9 `% }8 _4 O- t
always @(negedge clk1); U+ I% |2 {$ B9 Q
    if (reclk1==1'b1)9 K, [. w, _2 c' ~$ r; c
         begin
; U& q7 T: A& I0 B1 M# v  z& @7 s         cout1=1'b0;% `/ t# ?3 i9 \1 X, T, g% s
         cout2=1'b1;; J4 i7 n/ @% N9 d
         end 4 c6 U) U- H- H% i8 a) t4 Q
         else) ^3 O- p1 b' R  @
         begin; |* C/ w" h& N( r- m3 _
         cout1=1'b1;
( ~$ ]1 m+ r5 `8 }; o         cout2=1'b0;' ^% d6 S3 f/ T7 ~9 _
    end
4 {7 ?+ \+ ]) H$ zendmodule* y) A. Q% a9 a8 C6 F: x

- p8 K4 Z  n4 B: Nmodule gen_clk(clk,reclk);( u8 m  B$ J( L9 ]. d$ q
input clk;" `" F0 i  [2 q4 ?
output reclk;
* V4 n' L5 |6 w- Creg reclk;/ k7 x. U5 ]  [7 W* Z& }* j
parameter width=1000000;//分频数1000000/25M=0.04s
; y: p0 K( A' d' T6 R: Qreg[11:0] count=12'd00;3 P8 {4 p4 ^$ {' S- `- y9 g
always @(negedge clk)* g5 D" J! I+ A1 e6 Q. r* v
  if(count>=width)- S2 V: b+ I" J+ C, D
  begin
, f; T" F2 l) C  Z# A0 E  count=0;" B- l1 H2 p' o$ h0 ]
  reclk=~reclk;
9 V8 V% g3 C; j  end: N) r( g6 `: e6 V  R( d$ P
else count=count+1;
3 \9 x* r; X  v5 y3 S/ T) rendmodule 8 V* x; }; I5 I( z- c# }
这是全部的程序了
. n/ v% X& _7 d麻烦指点一下啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
10#
发表于 2014-7-1 10:50 | 只看该作者
1292569609 发表于 2014-7-1 10:39
: }: L1 _9 \* p- _`include "gen_clk.v"
8 w# N9 }; \! L
& T/ ^1 T3 v/ B9 vmodule led(clk1,reclk1,cout1,cout2);

9 q$ M& W& E) i% H% _7 @发现了两个问题:
' {+ W- |  u9 R' L) J5 Z1. gen_clk模块里reclk没有初始值,综合会发现latch。
" ~4 E) j9 E, K2 Z' D2. led模块里reclk1不应该定义成reg型,应该是wire型。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
11#
 楼主| 发表于 2014-7-1 11:37 | 只看该作者
为什么要定义为WIRE型了
: K1 x! s  J! E  c+ }

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
12#
发表于 2014-7-1 13:11 | 只看该作者
1292569609 发表于 2014-7-1 11:37
3 A9 ^  g) P1 `- \为什么要定义为WIRE型了

- E2 \! r# O, n! y9 @1 _1 ]因为它是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, 2025-2-19 06:15 , Processed in 0.058890 second(s), 33 queries , Gzip On.

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

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

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