找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

FPGA问题

[复制链接]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频
6 t' _: U5 j3 K% Z" j) X/ n//divdFACTOR--分频系数,实际分频数为divdFACTOR*24 ?9 h5 h/ e2 Z3 B- q- e5 Q
//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR# [/ J  {% U; a) V
module gen_divd(reset,clkin,clkout);
$ X- ?8 L. k; F: c6 w/ h        input reset,clkin;
7 [: k, {0 [; K$ Z# A# E" ^        output clkout;2 u$ q; s& G. k9 i- Z
        parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR9 X- M0 `% h4 v, l& S/ i& z$ }- P
        parameter divdFACTOR=1;//分频系数是divdFACTOR*26 o$ H8 W. [8 c( N
        reg clkout;4 M* Z# _( J- V+ O- H! P. b3 r0 i
        reg [divdWIDTH:0] cnt;
6 d- u  x: b" a       
1 _! ?& u+ g3 Z; e6 Z       
: U1 o1 D8 a8 J  a* [        always @ (negedge reset or posedge clkin)! E+ Y/ N7 s) F( U: F" P1 U
                if(reset==1'b0)0 X, C- ?9 j! I" e+ z
                        begin  T4 j1 P/ Y+ b+ V& |/ Z
                        cnt=0;
7 H9 |# U0 ]* @. e                        clkout=0;
/ G- X' M; M, N5 m/ s2 _4 \                        end
; ~7 G* L! t6 p. V                else
% ~. x9 c. G* J' w/ {( I3 @( [                        begin2 e0 N. k# N2 K) D
                        cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的8 A3 B1 M/ B4 s! w5 k1 \: m
                        if(cnt>=divdFACTOR)
, x* L! o9 w% M3 `" k! v, {5 X& s                                begin( a' H! z+ S3 J0 ?1 P
                                cnt=0;1 R7 W2 ^% X- O
                                clkout=~clkout;
  f- @# I& @9 X( d, `& _8 S                                end " U, M8 e+ ~% Y9 F0 M& m
                        end( X& P3 b6 n. F8 i3 r( ~
# _  W+ \+ E: c- i! i+ a* l, w
endmodule" {3 ?! J- g1 [6 u0 I
% E( _5 X( u/ T" Z6 v, G) S: A
`include "gen_divd.v"1 t$ O) \! i5 b/ I
! I" _, g3 s, e- C/ R
module led_w_dir
8 @3 W! Z( g7 P8 M( c# T        (* O$ j8 J  A3 w& z9 Z. m1 @4 P( @
                ClkIn,+ @/ w8 l7 d/ h- G0 ?. g4 i
                KeyIn,, e+ f& _- O9 [
                Resetb,# B: G1 v4 H+ f4 J
                LedOut* A7 i3 m* ?  P4 v, H3 B; f
        );
: d! o# y* l6 X! R        input ClkIn,Resetb;
- I0 G" K& z% i4 `; o  m        input [2:0] KeyIn;
5 G) d6 o5 ]+ Y. H' ?. h* E* h! |        output [2:0] LedOut;
7 y7 A2 r! @7 n$ b        ' V1 B2 p* p+ O! B3 U  f5 B
        reg [2:0] LedOut;
+ \$ G$ u& }3 T" \        wire ClkLed;
( s# E: y* p2 o% S# d+ m. ^        reg [2:0] Cnt;" e3 l8 Z6 R3 |6 w( J( W
        6 E8 r2 o" _0 b7 c; K$ i# a" p  y
        defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频4 P) f4 t9 Q. X' u0 T+ M
        gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));       
//帮忙解释一下是什么意思啊。. _% t/ ~0 \* t  m2 O
       
. i/ z3 O; \7 J; V        always @ (posedge ClkLed or negedge Resetb)
. s" _2 H* C7 f2 ~                if(Resetb==1'b0)
( l# V% f3 y9 F4 l8 x' K4 D                        begin
6 `& Y, H" {8 j( B& R. t1 z                        LedOut<=3'b111;
* |; m0 T) [7 s9 l                        Cnt<=3'd0;
8 y% T5 B/ B4 O) l: L* {3 a' @                        end1 j8 _0 H3 O! Y+ U
                else, C3 o% l# t$ I% L# l+ v3 \" }
                        begin
* S' Y, ?& j! z$ I                        if(KeyIn==3'b000)1 r2 b9 X% X0 ~. E6 S7 S& i6 I
                                begin
9 M" [6 R! \' S& y+ s1 O                                if(Cnt<=3'd2)
9 b$ u4 |$ e; _3 {                                        begin/ _- D/ z3 w7 z/ j6 u- J% s
                                        Cnt<=Cnt+1'b1;
! c# ?: h6 R0 L7 I" }                                        LedOut<={LedOut[1:0],1'b0};//拼接
- p: A! w2 \; e2 h3 _6 `; b. K                                        end9 X2 |0 [: `1 l) w" M; k
                                else       
8 V* c) w6 F5 Z7 l& A( S0 f3 |5 l7 ~                                        begin
4 `4 P" W; I  ^) }( y6 P) Q& d                                        Cnt<=3'd0;
, ?3 L, O/ y; F" K2 j' p                                        LedOut<=3'b001;, g2 o% S2 Y* R- }
                                        end% q# T1 X: S3 Y9 r, u# I
                                end2 q# f# W3 s5 l& |8 A
                        else if(KeyIn==3'b111)% l. l& i9 s1 D, s
                                begin2 ?1 o8 Y' f% u* f) q+ V7 V
                                if(Cnt<=3'd2)$ b6 l3 |) E9 [$ O$ o, B+ J
                                        begin8 ~; a4 B, F* H7 {$ d9 g4 B. F2 k
                                        Cnt<=Cnt+1'b1;
/ I- I6 ], W, d0 p1 d                                        LedOut<={1'b0,LedOut[2:1]};# i7 n" Y: L2 _. e8 `/ t, |
                                        end
5 G2 f, ]/ ]+ ?: t                                else       
$ M4 H) C5 o/ N/ K3 L0 L6 P# j( w                                        begin
: V# k2 n: b4 I( f+ @' k* a                                        Cnt<=3'd0;1 P  \6 B* |1 ]) o
                                        LedOut<=3'b100;$ v( K4 I: b. g3 Q$ f7 M. X, M/ H
                                        end; D6 d0 n7 U  n$ z  n  j
                                end
" w: Z7 Z- Q5 T# ~$ G, s                        end
. }3 r9 x1 M! @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% A4 r( H! t5 v6 j5 t9 _2 G
求高手解释一下红色画线的语句什么意思 啊,我是一个初学者

$ U# R2 v5 p5 }, Q6 H" j这是systemVerilog的语法:
& T+ o5 n9 P  j5 q% Gdefparam  Gen_ClkLed.divdWIDTH=23, Gen_ClkLed.divdFACTOR=10000000;
8 x: G) Y2 e/ ?+ @8 z( D. y8 \
2 o6 o# E( W( X* ]7 `重新定义了层次结构(Gen_ClkLed在下一句里定义)里的参数divdWIDTH,divdFACTOR;( i8 T5 C) u3 t3 E

4 k" Z* H' K0 H) ?' E, ^5 a6 Hgen_divd   Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));    & C0 ?( i7 T3 C  d" g

; D8 }" y* _5 H( k5 C6 L' B( ~+ h例化了gen_divd模块,例化名是Gen_ClkLed。其中的参数divdWIDTH,divdFACTOR前一句defparam语句里已经定义过了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
4#
 楼主| 发表于 2014-7-1 10:00 | 只看该作者
好,谢谢啊. P+ t. m5 K1 r$ @% C

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
5#
 楼主| 发表于 2014-7-1 10:04 | 只看该作者
再请教一下啊% y! U% L9 {" w( `' Q6 L1 `

0 e+ y9 P# q- W. ~Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declared more than once2 k5 r$ P4 R: @$ g) {9 z( ?
这个什么原因啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
6#
发表于 2014-7-1 10:27 | 只看该作者
本帖最后由 lvsy 于 2014-7-1 10:40 编辑 ; T0 o; D9 X2 v, m
1292569609 发表于 2014-7-1 10:04% t* M$ [% @* P- Z( [+ o
再请教一下啊. c- A: A2 W* b. x/ c0 }7 P: Z* g
. C! L, V/ b; J. m
Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declare ...
* A1 Y( s7 Y/ x+ h% _

8 V' c3 p! ]) ~/ I. u& I是不是指Gen_Clked?1 D. ~: a+ N$ a! X

3 q7 D/ |2 I% n: c3 t把defparam 这句移到gen_divd Gen_ClkLed(......); 模块例化的后面试试看!
  N+ h& C0 B* w3 l5 v" `
; m1 p( W5 Y8 u# |! f' p" Z或者这样例化9 J8 r( \/ r8 k/ Q, ^8 X: a/ n" W+ Q

- L% Q2 @% R& v2 ^; G0 A; v2 |gen_divd  #(.divdWIDTH  (23),3 }8 i, q; @+ t* u' U
                 .divdFACTOR (10,000,000 ) )2 t# L4 h! {) n. I4 P7 r5 a2 f

2 Q" T) b7 N/ f& J' ?               Gen_ClkLed (.reset(Resetb),, X1 X/ Z) G; v/ k( X  X0 D
                                .clkin(ClkIn),
7 e/ }' ~& b' `0 f" t) f                                .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
& K3 o& p+ x0 n! h* W. q是什么意思啊
& A& Q9 s9 `' }; x+ P

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
9#
 楼主| 发表于 2014-7-1 10:39 | 只看该作者
`include "gen_clk.v"
. ?: S; L% c6 n& l8 v
$ P# F7 Q" T: Mmodule led(clk1,reclk1,cout1,cout2);. D( g0 F2 H+ E5 y
input clk1;
! {+ A" R& U# v: _+ uoutput reclk1,cout1,cout2;
- j4 Z5 ^" x7 U  x% m  Y2 Treg reclk1,cout1,cout2;* y2 c. w8 U6 t0 G8 H7 {, j
; O7 x- ^7 b: I4 H
gen_clk led(.clk(clk1),.reclk(reclk1));. V# A' {/ Q" c$ X3 w9 T. Y
defparam led.width=2000000; //频率是0.08S;: d' W3 F/ A2 A# S1 A

2 r1 \' p7 r; l, v! P" J$ Valways @(negedge clk1); E7 Z: `# o: s% ~( q% Z
    if (reclk1==1'b1)* K' G3 a! l) J, C/ F$ L
         begin0 y3 _1 ?4 b# y3 j! }
         cout1=1'b0;
' p# O7 f) F# c4 L# j, M         cout2=1'b1;9 S8 N/ q3 m5 ]! r1 u! x
         end
4 Q% X& U) I: l3 c# q* L         else# {. `; V6 T+ }  B9 p
         begin
( s; C& f8 Y6 p$ b- _4 _         cout1=1'b1;
" U; z+ G9 P- o5 i1 ~         cout2=1'b0;
9 X5 L! a$ e" s    end
' z& v2 K* c! iendmodule
7 o8 p% W! g& r* s2 k: Z1 E* o7 `. v: R
module gen_clk(clk,reclk);
' @# L0 A8 W# t& s2 jinput clk;
: X# c( |2 p5 p/ @5 o# Eoutput reclk;: O: `$ @3 N! E0 C# D* a8 t5 b
reg reclk;! p5 b( t4 \2 g% {
parameter width=1000000;//分频数1000000/25M=0.04s2 `9 ~7 I$ K. F/ N" I4 m
reg[11:0] count=12'd00;7 E& Y& q, F4 s0 P2 p
always @(negedge clk)) T* c/ e$ X4 N0 l2 L
  if(count>=width)# F0 T  L9 y4 |  P$ i
  begin
4 D$ v3 j# K( P9 P  count=0;. Q! I. Z* Y; K! y3 q7 x  P5 P; v$ C
  reclk=~reclk;
3 F- o: p  [- S8 c: H6 i  end
6 u4 G* |3 c  I' p- c9 T else count=count+1;
# Z# B3 a" {( J( xendmodule ( w" u8 Y8 T. F; Y  p5 w
这是全部的程序了
  J# p& g) y! L9 ^% P+ [2 y麻烦指点一下啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
10#
发表于 2014-7-1 10:50 | 只看该作者
1292569609 发表于 2014-7-1 10:398 Y4 x3 H! i3 o
`include "gen_clk.v"  w( o& u& F1 ^3 U

+ e$ J; K  Q2 h) gmodule led(clk1,reclk1,cout1,cout2);
8 S1 s8 z# o) i9 I
发现了两个问题:) T. Z' I6 Y7 Y5 w! ?4 U
1. gen_clk模块里reclk没有初始值,综合会发现latch。/ S" e8 V& @  r0 v% u& p
2. led模块里reclk1不应该定义成reg型,应该是wire型。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
11#
 楼主| 发表于 2014-7-1 11:37 | 只看该作者
为什么要定义为WIRE型了8 q4 O: ]! ^( p5 V; _6 Q  ^/ B

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
12#
发表于 2014-7-1 13:11 | 只看该作者
1292569609 发表于 2014-7-1 11:375 W& `' e2 [' }: g: U$ d
为什么要定义为WIRE型了
  N9 |+ Q- O- z
因为它是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-7-15 03:55 , Processed in 0.061253 second(s), 30 queries , Gzip On.

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

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

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