找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

FPGA问题

[复制链接]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频
& @) q: @8 i9 k+ K! x5 t* b& W0 i& p, o//divdFACTOR--分频系数,实际分频数为divdFACTOR*2
3 `' j9 }. m; r2 K' d% y1 T1 v//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
3 K' I# o: c$ ^! H7 `6 gmodule gen_divd(reset,clkin,clkout);. p9 n+ b5 p0 H0 x0 n. D
        input reset,clkin;
1 U) r1 I7 J! W: ]7 o4 t; W        output clkout;
) n5 v/ `( I8 ^1 ^        parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
* I! r- h- \1 I/ k        parameter divdFACTOR=1;//分频系数是divdFACTOR*2
! I9 ~+ y7 A6 ]1 B& Z        reg clkout;* E" m( j( t7 G+ o# m
        reg [divdWIDTH:0] cnt;/ \- u, k. b. ]: C; n
        + V1 o4 h  g. {6 b
       
7 ~  B, [7 y& P" ^) X0 {        always @ (negedge reset or posedge clkin)
% E: f( ~! U) Y* H0 U* Y: I1 F                if(reset==1'b0)
- i7 {/ n% M- }' n                        begin8 ]( ^! {( i4 W7 t; s, ~
                        cnt=0;
% {) H* i6 _/ h4 }$ o                        clkout=0;
+ g- W: g1 c' K                        end
$ s# v# g2 o% t! h0 \                else
9 @5 l- i' H& H                        begin
* w; n( S' R: g  X. V+ p                        cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的& E2 G- p$ `3 X! G& [. n
                        if(cnt>=divdFACTOR)
  o9 Z' u/ g( y. @& U' N6 H                                begin
0 r, `3 ]# T0 T1 k                                cnt=0;* n. k7 I0 ^2 `3 ]; |8 c
                                clkout=~clkout;3 k& d- a( f, U5 C( L
                                end
1 d+ t* U: Q# g' A( D) x                        end& N, r% X- A9 u, i' i4 S7 g5 ]& b

! k5 C' l8 L& l5 u4 ]3 xendmodule' {  X2 b  C$ C1 Q( l# b

/ l- D* t) R2 l7 q( O" s/ L`include "gen_divd.v"! y( T: C9 g6 }
: b4 i- s- A6 J! q, I3 Y8 P& w& L
module led_w_dir- p0 b& v) ^, S8 g; |- a* Z4 w
        (2 q2 n0 H! X' }/ V% \' l/ L
                ClkIn,4 O  M" {2 a- S" p! S; z
                KeyIn,; a& t4 S! U# W3 ~, \. Q5 N
                Resetb,
* ^3 Y8 }6 e* v3 u* B! m                LedOut" K' }( `9 p2 C: `3 @$ R. u* L
        );
) ~5 \5 C$ e8 g        input ClkIn,Resetb;
3 z: A7 E5 N; w5 M- ?        input [2:0] KeyIn;
( ~7 u+ F: D8 z2 s        output [2:0] LedOut;
% J3 ?# T/ {+ E. h( M5 @' A3 C8 E0 M       
* e# E5 Z! v% a$ z  N        reg [2:0] LedOut;
6 I6 I" x; b1 A: O( t" G" w        wire ClkLed;4 H; F9 d. v; \$ q2 d
        reg [2:0] Cnt;
1 [1 g* ^+ B* s! y  T: Z       
1 \+ M' y9 N5 T/ }        defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频
6 H$ {1 h$ n& r        gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));       
//帮忙解释一下是什么意思啊。
1 C1 {" r7 X7 v8 t# i+ d2 T       
  m9 B; F% s4 K, n# S7 h9 A4 q        always @ (posedge ClkLed or negedge Resetb)
: Z  M4 Z' p  `! K' ~                if(Resetb==1'b0)+ R, ~% j0 }1 r1 r/ F4 T; D
                        begin
* d& G0 V! j- _% M* J                        LedOut<=3'b111;0 P  m: S' j2 N+ z+ X1 l5 d
                        Cnt<=3'd0;2 B1 ?9 ]' @8 J% r9 F8 `+ r6 I
                        end
: C6 J7 U4 P! y7 Q1 a' I                else( {( u! a6 N0 a7 b4 s% F
                        begin
  E0 ?# L' e0 K                        if(KeyIn==3'b000)# \: t3 Y* u. f8 {2 O. n3 ?
                                begin
7 A. F% d5 x! [                                if(Cnt<=3'd2): ]3 ~. n# c7 y4 Q/ j8 w0 n
                                        begin, @/ r% s! j$ f" J% `- f0 J
                                        Cnt<=Cnt+1'b1;/ W  F' D7 V; H5 ~; I) ?
                                        LedOut<={LedOut[1:0],1'b0};//拼接# x" r& J* s8 N$ P$ F
                                        end
7 d, V7 v% C8 W0 V* H                                else       
3 l0 E: k7 v% X                                        begin
0 t& c1 X/ |! p8 j# S" K                                        Cnt<=3'd0;3 p9 z9 h/ B! W
                                        LedOut<=3'b001;
, B" O7 s7 a. C0 m* |                                        end$ E8 b, X. ~2 q. b4 m
                                end2 E( @# [6 c& U
                        else if(KeyIn==3'b111)2 \5 e, `3 X! `+ L  i
                                begin
# y# b; _. j& I                                if(Cnt<=3'd2)
0 G) p7 m3 h, i" k                                        begin
, w9 D8 {$ D3 J' P! s                                        Cnt<=Cnt+1'b1;1 v9 n# Y2 a5 r  [1 q7 _2 |
                                        LedOut<={1'b0,LedOut[2:1]};
. E' z% G# C$ `% v8 U( `! O                                        end
8 W0 f1 O0 s! L& g+ ]                                else        ! [( B9 v4 E: x0 Z, Q) w7 a' [
                                        begin
6 Z8 e' E2 K$ e* w                                        Cnt<=3'd0;" p. n8 R  }  v4 m( b
                                        LedOut<=3'b100;; R: y8 d, t' t* i% x  @
                                        end
% r7 o  F8 v- _                                end6 H0 R( N" s9 I
                        end: k+ M9 f+ w5 {* u6 h6 A& d
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/ K. n3 r& H' i7 c
求高手解释一下红色画线的语句什么意思 啊,我是一个初学者
3 M* Y  n; Y  L& _/ X
这是systemVerilog的语法:
) R! q2 U+ C9 A8 t  ~% w: H/ Qdefparam  Gen_ClkLed.divdWIDTH=23, Gen_ClkLed.divdFACTOR=10000000;# M+ }2 m7 T; r3 x  \5 ~

0 Z- R" d+ A! @) C& \重新定义了层次结构(Gen_ClkLed在下一句里定义)里的参数divdWIDTH,divdFACTOR;0 Z$ B/ u8 T, D( C: l

6 M# X! r8 [+ D0 {gen_divd   Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));    6 ]5 G. J% L2 C# q/ ~

" M, D, e" b: B' |例化了gen_divd模块,例化名是Gen_ClkLed。其中的参数divdWIDTH,divdFACTOR前一句defparam语句里已经定义过了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
4#
 楼主| 发表于 2014-7-1 10:00 | 只看该作者
好,谢谢啊1 W7 C* J# w) T; B- U8 m0 C# m

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
5#
 楼主| 发表于 2014-7-1 10:04 | 只看该作者
再请教一下啊
; h1 w* R7 Q% g! h' H# y7 ~1 s+ ?( S: h0 G
Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declared more than once
& s3 n, @6 W1 o3 W& h! r1 e& M: C这个什么原因啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
6#
发表于 2014-7-1 10:27 | 只看该作者
本帖最后由 lvsy 于 2014-7-1 10:40 编辑 9 j. ?: l1 h: J: |& n
1292569609 发表于 2014-7-1 10:042 ~; U7 p$ M  g: }$ l0 {
再请教一下啊
/ K: f9 }1 o% r" Z1 ]# Z% |. s
! k* C) ?, W9 V2 _1 |  N6 L% [) ]Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declare ...

, _4 c* ]9 u7 v  a1 B4 Z! H
' d% p& m: ?& i7 [% m( [( f是不是指Gen_Clked?
% X8 J1 ]! H( ?8 R& h; K
$ B* U! p9 a1 }7 q9 o' H把defparam 这句移到gen_divd Gen_ClkLed(......); 模块例化的后面试试看!
7 p' L  F  H1 m; I# O# n$ F3 M8 h* A7 y) b+ ]( n
或者这样例化
% R  S' O3 [, P" R  j# v* n4 g1 g/ P8 a& x
gen_divd  #(.divdWIDTH  (23),
1 [4 O& H5 i/ r) q9 E                 .divdFACTOR (10,000,000 ) )
: D! F0 `3 k6 S9 H; C
9 i7 C; X1 }! Y4 u( B/ P3 R8 }               Gen_ClkLed (.reset(Resetb),
( I8 L0 F5 `- P- ?                                .clkin(ClkIn),
$ \6 ?4 b9 m3 j                                .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
% u3 o7 l+ n  `" Y- L' Y& ^是什么意思啊2 z0 Z+ Q, K: m7 s

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
9#
 楼主| 发表于 2014-7-1 10:39 | 只看该作者
`include "gen_clk.v"/ T: g+ K9 i1 s& D+ F
) J7 G% p% ?# i, ?7 d4 H
module led(clk1,reclk1,cout1,cout2);
0 P4 m8 x6 a  L. J3 y1 jinput clk1;
. [4 ]/ k4 C. b) b0 V7 g% ?9 Ooutput reclk1,cout1,cout2;7 b( h1 _: ?( D
reg reclk1,cout1,cout2;2 x' w3 J# u2 {0 Q5 A+ V
+ U- o/ k  i1 ~+ u/ e. C! z+ X
gen_clk led(.clk(clk1),.reclk(reclk1));
' ~3 Z' k% k- a0 B1 n& [' ?$ }defparam led.width=2000000; //频率是0.08S;. v) y8 y! F! g2 I; e: p! f
4 ~# u7 y9 x1 G8 Z7 i- y
always @(negedge clk1)  m- L2 t/ [1 K3 f5 [
    if (reclk1==1'b1)2 X6 X* \4 I8 y1 ^7 X3 o
         begin2 L( ^9 I! T) t
         cout1=1'b0;
6 m) L+ C4 {0 h" k         cout2=1'b1;
# E& V+ ?% a! q9 E* I7 q         end
( W: u7 ~' \+ l         else# @* o# V0 n* q0 L) O6 n
         begin
4 q. T# l/ U* n2 n! l         cout1=1'b1;7 J5 c2 }' x! L, }0 T5 D. Y* S
         cout2=1'b0;
7 |0 @- i1 N+ _6 E. C; M9 {    end+ M* C& s% `/ ?, j
endmodule- ~9 y) w& E# D9 Z. [
+ I2 [8 U9 v+ ]6 N
module gen_clk(clk,reclk);
9 X1 ^0 i; M% r: H) M! C% sinput clk;' ^" u7 t4 k8 S8 Z" x" ?4 M' |, x5 e$ c
output reclk;0 v4 y( G7 d5 L, g9 J. |
reg reclk;! s, i" z0 a: i" D
parameter width=1000000;//分频数1000000/25M=0.04s
( M' u0 F  s- n& Freg[11:0] count=12'd00;
* |; E& k6 w# Walways @(negedge clk)8 U2 `* w6 F; `) c
  if(count>=width)7 |6 O# D' Q- g0 r
  begin
; Q3 P; @# d* e  count=0;6 I4 M0 [& P; X+ b- h
  reclk=~reclk;
7 `, _7 i" }# z  end: ?- K* u2 D! b7 E
else count=count+1; ' c- _* v! w/ t
endmodule
! q7 i% x1 W+ u% H3 N这是全部的程序了
, \" M9 S& Y! E& t! m麻烦指点一下啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
10#
发表于 2014-7-1 10:50 | 只看该作者
1292569609 发表于 2014-7-1 10:390 [% X. x6 L/ U& h' f
`include "gen_clk.v"
" w! Y: C- r& Y  M$ t7 q5 t
* Q5 N2 Q2 _" x2 u; }module led(clk1,reclk1,cout1,cout2);
7 J8 F# v9 y9 c
发现了两个问题:
  l7 C8 M0 }3 K: y1 c. k0 m1 U( y0 x! S1. gen_clk模块里reclk没有初始值,综合会发现latch。
$ W& _) c- ]7 T. m2. led模块里reclk1不应该定义成reg型,应该是wire型。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
11#
 楼主| 发表于 2014-7-1 11:37 | 只看该作者
为什么要定义为WIRE型了1 N1 R5 I( t3 t0 S+ s

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
12#
发表于 2014-7-1 13:11 | 只看该作者
1292569609 发表于 2014-7-1 11:37
& A$ c# c# B* K8 j) W" a为什么要定义为WIRE型了
! s1 K6 o1 ~( l) w5 t; {+ v
因为它是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:28 , Processed in 0.059069 second(s), 32 queries , Gzip On.

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

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

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