找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

FPGA问题

[复制链接]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频# A$ y2 [' M1 S2 g- \& L# ^
//divdFACTOR--分频系数,实际分频数为divdFACTOR*2
, n+ O0 w1 Q( J6 l( }7 |- U# R" I//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR( f; A! R, l% _% g0 Z
module gen_divd(reset,clkin,clkout);
# c7 A* v- `$ t$ a% ?8 N, r        input reset,clkin;4 _5 G8 e3 o' `+ s9 q
        output clkout;
% ]9 E6 D. V- l8 q& n        parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
& _# c9 E* G* b2 }/ N3 v% c8 i9 A        parameter divdFACTOR=1;//分频系数是divdFACTOR*28 i8 w5 A& f2 b& F; b
        reg clkout;; q4 \( X1 `4 w  Y
        reg [divdWIDTH:0] cnt;
2 i/ }* M6 M% [3 q* O* U       
6 q& a. a: S* N4 J% }5 _# |( _! ^       
& w- I' \1 _! r( M" C" k        always @ (negedge reset or posedge clkin)6 g' R, \) K8 j- P9 t
                if(reset==1'b0)
3 `! Q8 v# e0 I3 m5 C  L0 J                        begin
" I  h# x8 A# X4 W4 p                        cnt=0;
% m6 @7 s) Z9 i2 M9 @                        clkout=0;, }9 M0 Y; O) A: [: Z! Z
                        end8 S% s# I/ O8 D
                else( q  @3 J* r9 l3 m
                        begin
8 f. {) w2 |+ h: G                        cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的
: _6 o' E4 Q2 I+ D; w0 i                        if(cnt>=divdFACTOR)
; w. n. L, s0 {4 ~. M7 L                                begin
( \0 U$ u" d! r+ b3 S  z                                cnt=0;
5 ?( ]' |6 r! {. [2 p' Y7 Y4 {: O% X                                clkout=~clkout;
  {( z5 i# `+ e5 c6 S" v                                end ! t0 M7 c% r* z! B0 f3 N
                        end
# b+ m8 k0 M/ K) F
/ P$ L& P' k/ ]4 h$ v5 T8 B, M9 Sendmodule9 C+ J3 J$ `5 ~/ l, }! w
( y, o4 k) S; {- l) l
`include "gen_divd.v"
$ p2 U5 M) i/ _$ P8 R6 [( \/ F5 s* w+ ^8 N" O, L/ E
module led_w_dir
6 |  Q) g- c( O) ^5 j/ z1 O        (
) T% n% n" W$ s6 F: |                ClkIn,
6 ?  K8 {* x( N& ?; H. a, X9 ]; k                KeyIn,5 O# h* f) ~6 S6 M& M1 r# d% O
                Resetb,
! [% E! V/ K* w$ U                LedOut
3 E5 S& E% i5 W( Z. i        );! K6 L# R4 w) p" k  h2 [
        input ClkIn,Resetb;# U% C# h2 {% ~. z* f
        input [2:0] KeyIn;( J6 G& F* M3 Q- k
        output [2:0] LedOut;  O* |& `4 @* Z8 y8 d' w$ K
        . k' _! P# k) Y  u1 S+ F3 N
        reg [2:0] LedOut;
3 }8 \* {, t( I6 @" i9 X        wire ClkLed;
% i( p, \( Q3 y) C& Z        reg [2:0] Cnt;
1 W* P7 j8 ?( M) l: b1 U+ ~       
7 y( H+ H5 p( @0 {        defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频% W6 e$ {/ ?" [* s; E
        gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));       
//帮忙解释一下是什么意思啊。
7 w* n, b, [) Q2 J! m       
. T$ D7 G5 w% e4 g& B2 t4 ]4 Q        always @ (posedge ClkLed or negedge Resetb)
- m& W& Z6 K  {8 }, |7 B                if(Resetb==1'b0)
# f# O) h" H# P+ p. i                        begin. C1 k8 [6 J1 a+ x! N* N9 c9 Y  f3 u
                        LedOut<=3'b111;. R! m3 u" p' c( L0 h' g
                        Cnt<=3'd0;
$ G2 _) _+ L# D                        end
3 X' p- h$ e" O" p" T5 p                else
  z( j- D& j9 P# B( B7 R+ y                        begin
  m, [  Q$ l  B' W" N. e6 @9 \; j                        if(KeyIn==3'b000)9 x1 k1 n$ ~3 S4 F2 M& m$ `2 z
                                begin
2 b3 D4 a" l! \0 y" m! P. r: g3 G                                if(Cnt<=3'd2)
- X; l- Y5 `" c# n                                        begin7 x' w+ ]5 @& r2 w4 s
                                        Cnt<=Cnt+1'b1;
6 o7 f$ {/ L  h, ~; Y/ C1 r. {                                        LedOut<={LedOut[1:0],1'b0};//拼接
# \9 R+ T& f/ t. H  I                                        end& j! l4 \% u4 M* j* D: ^
                                else       
* c6 @' m& h6 w* N( H# s                                        begin  U- r3 I, V4 g' v: q
                                        Cnt<=3'd0;7 P( V: g1 M! u2 T  c& o
                                        LedOut<=3'b001;3 t* N+ b+ M) [# F& W: L9 f
                                        end
' h. K+ ~# h' m) x( J                                end; L1 B4 D# E; n( `7 [% v9 j) m
                        else if(KeyIn==3'b111)
( i: M5 `  s; X% X                                begin
$ X! F+ k  H; u# B/ v% G                                if(Cnt<=3'd2)4 y6 S' S3 a1 \2 r
                                        begin
* Z7 k+ V- Y4 S9 B# f- P                                        Cnt<=Cnt+1'b1;% k4 c$ A/ R1 I# r- @5 M
                                        LedOut<={1'b0,LedOut[2:1]};
1 T; w% x; a+ W# B7 p; q. ~                                        end
$ ]2 E2 l+ H, _8 G+ w( `: [0 i                                else       
7 C& x6 L* W/ {+ U' n" ?( U" ]                                        begin8 I; D, H, L: F. J& r- l8 f
                                        Cnt<=3'd0;6 w. x7 D/ j0 W1 w* n1 ^: H1 q. |
                                        LedOut<=3'b100;/ Z2 _3 a5 [  K5 s6 u4 Q; z
                                        end' ?; U# Q+ }- o+ D: L
                                end
+ l0 A0 u9 L  [% t                        end
. g! w( R0 B/ }% dendmodule
分享到:  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 J" q4 w5 A, Y; m) q求高手解释一下红色画线的语句什么意思 啊,我是一个初学者
/ Z% I; V; r- O% Z/ r
这是systemVerilog的语法:* L5 E" o/ r* ?+ b1 m
defparam  Gen_ClkLed.divdWIDTH=23, Gen_ClkLed.divdFACTOR=10000000;
- D# `* y" t$ Z& B7 g$ @
0 o, i5 T; s. {( Y' c9 e/ z重新定义了层次结构(Gen_ClkLed在下一句里定义)里的参数divdWIDTH,divdFACTOR;. A- @6 G2 y/ m: H# Z5 c

' ~" E, g. H& y# Z4 H( ]gen_divd   Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));   
/ ^% {# `- T1 z  m% q% v/ ?4 }6 g1 K! q0 L( v
例化了gen_divd模块,例化名是Gen_ClkLed。其中的参数divdWIDTH,divdFACTOR前一句defparam语句里已经定义过了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
4#
 楼主| 发表于 2014-7-1 10:00 | 只看该作者
好,谢谢啊, ]4 T2 W- t/ g3 v* f0 Z

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
5#
 楼主| 发表于 2014-7-1 10:04 | 只看该作者
再请教一下啊
1 D; ~: ~- i4 ~+ H( L( a1 {* G- N& H/ a. D' K! _
Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declared more than once
. L: G: [+ x; f# W$ `) p这个什么原因啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
6#
发表于 2014-7-1 10:27 | 只看该作者
本帖最后由 lvsy 于 2014-7-1 10:40 编辑 2 F1 m' o" `. r! W4 `  B9 B; B
1292569609 发表于 2014-7-1 10:04
  Q3 [  ]0 V9 q% [; R, a再请教一下啊
4 Y9 x  W5 m1 p- E' q8 K  \+ t/ A* r- L" R
Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declare ...

$ l  `% |0 j6 q4 C9 o9 ~4 Q: R% M- n6 L  u' q* j
是不是指Gen_Clked?
# y) y+ W% `" G4 ^4 v& x7 e! F# q
' U# N( q* Y  l9 a2 M+ A把defparam 这句移到gen_divd Gen_ClkLed(......); 模块例化的后面试试看!
. o/ ]9 U, S6 L: \( J% g0 ?
# V: z9 y# D$ z6 y5 d! I或者这样例化
2 ?( B3 S7 a/ S. N) i
6 L  J5 g5 C( s; s9 [) Kgen_divd  #(.divdWIDTH  (23),, U+ Y# {7 H+ G* a5 U7 s7 J
                 .divdFACTOR (10,000,000 ) )7 x! B8 ^4 k" M6 [3 v# `
+ y# W5 X- Q  f, p4 U' W
               Gen_ClkLed (.reset(Resetb),- [5 |- u0 B' n* s4 ?: @
                                .clkin(ClkIn),4 U, Z. Y" v6 O1 f( K) L
                                .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
' G  N5 M8 s% `+ c8 N. K. S4 V: v% O是什么意思啊  C2 ~. k, ^+ f+ V

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
9#
 楼主| 发表于 2014-7-1 10:39 | 只看该作者
`include "gen_clk.v"' V" l: N* _6 J4 `% x2 u- R. t
, K' t# }3 k  P1 \( q  Y/ {. e
module led(clk1,reclk1,cout1,cout2);
" a, P. M3 A. W, rinput clk1;( G( e2 x/ F! D8 P
output reclk1,cout1,cout2;5 ~9 d7 b& B, V2 M2 _
reg reclk1,cout1,cout2;% n, H* w7 m. O* t

  l+ B+ v$ u2 X$ ]+ c: a/ Ggen_clk led(.clk(clk1),.reclk(reclk1));8 q4 O4 t: f# E# P
defparam led.width=2000000; //频率是0.08S;
  p1 {4 c$ U; C
# E+ L' G% F: {- b7 f  f% Jalways @(negedge clk1)
2 _5 K+ E( J$ k$ @    if (reclk1==1'b1)% N6 }$ Q+ \( z5 I
         begin8 ]( x# `( q# z0 x; L
         cout1=1'b0;/ g$ |  r" \# D9 t
         cout2=1'b1;
( `4 A- T# t3 P- J  j% b5 {" P' P         end 2 i% _+ F% B1 y; p2 x8 [! d! x3 V
         else
6 [5 k* g- A  v* }3 L* t' ?         begin
- x. y& F' N8 |7 x1 @1 u         cout1=1'b1;
) w& T5 B! z% R9 j+ F) h         cout2=1'b0;# l- |8 n, A5 n, ?
    end. {+ M' `# {) w& i
endmodule( m- _; e( |! V" H3 b

' `4 @9 H4 \# b4 e, i7 B8 D  F* \module gen_clk(clk,reclk);" y$ ]& j, |9 J, R6 W& e
input clk;
: f6 \4 }6 E( @$ t, P8 G$ l9 Noutput reclk;
2 L* o, k; X8 creg reclk;
/ Y; J  G3 K. a6 U* }parameter width=1000000;//分频数1000000/25M=0.04s
0 t6 g0 z  r; s% a2 a! A: m9 Oreg[11:0] count=12'd00;( J4 Y+ m6 @6 q7 S6 z5 q. v
always @(negedge clk)/ B- K1 |# P% P7 o9 L
  if(count>=width)
4 [$ l! r7 A8 {( C# |) C  begin
  p6 O& g- F7 h! x7 R  count=0;
3 v" I0 A4 c0 v- F  reclk=~reclk;+ D! v, a$ Z# x/ ^- `( I. O2 @
  end
3 H2 i5 m" D& j  c& v4 {& r* l else count=count+1; 8 @1 H: a/ Y4 v0 M: B
endmodule / ]+ Y$ z$ {% R, w- ?; S# |
这是全部的程序了
: \, k2 h5 ~: K3 x# W; l麻烦指点一下啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
10#
发表于 2014-7-1 10:50 | 只看该作者
1292569609 发表于 2014-7-1 10:395 L( r& F0 ?0 d( U) b  q
`include "gen_clk.v"1 J! w) B# u3 f2 L

4 t' v& S& C3 j* t- q; |module led(clk1,reclk1,cout1,cout2);
# V3 A0 o$ m$ f  G; K" A  x2 ]' {+ o
发现了两个问题:: e& k9 Q# ~' ~$ z- G# Y: f
1. gen_clk模块里reclk没有初始值,综合会发现latch。( c* t# }! s/ X
2. led模块里reclk1不应该定义成reg型,应该是wire型。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
11#
 楼主| 发表于 2014-7-1 11:37 | 只看该作者
为什么要定义为WIRE型了
) d$ N! u# {+ l& k( N

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
12#
发表于 2014-7-1 13:11 | 只看该作者
1292569609 发表于 2014-7-1 11:37: H0 w5 J$ ?! K! _" c4 a% Z
为什么要定义为WIRE型了
2 k; m2 z- f& F9 Z+ J
因为它是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 02:24 , Processed in 0.062976 second(s), 32 queries , Gzip On.

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

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

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