找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

FPGA问题

[复制链接]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频  F: b6 J6 x% W/ Y" j' S
//divdFACTOR--分频系数,实际分频数为divdFACTOR*2/ s( t: n/ |" x! S% G4 m( i
//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
+ F' X* B$ s' k. \" m. `% x5 T2 cmodule gen_divd(reset,clkin,clkout);
" M* I1 }, q- U+ `        input reset,clkin;1 y0 X) K; n9 n7 ?) M! Y
        output clkout;
, b8 U8 ~. h1 x* n, R4 g% n        parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR6 Y) c2 j; O* h. ?# u/ a% [7 h
        parameter divdFACTOR=1;//分频系数是divdFACTOR*2% g" J, P9 _, @* ^0 \
        reg clkout;
- `; j7 b+ f8 c' }; I. x* X        reg [divdWIDTH:0] cnt;( |5 q6 p, ~9 [& ^
        ) x* h* y+ j( Q
        ! Y5 Z; v* b" [; C9 G* Z% o
        always @ (negedge reset or posedge clkin)) O, g( q4 Z; e" j8 V0 `
                if(reset==1'b0)
2 K8 o' O- z: a# K                        begin4 o. B# Y$ z) c3 t) \0 {
                        cnt=0;* y% s) E( W4 V! m( g0 Y" J9 z' U; M
                        clkout=0;! o, y/ H7 C( ]8 l
                        end# K2 d5 Y' k5 L0 l$ A) I
                else
5 c  F' N' j& _; G' U8 C. n                        begin. `! u4 e. I0 q  `) A' x, A% z, a$ n
                        cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的7 g3 e3 x9 e+ v: X
                        if(cnt>=divdFACTOR)$ ]7 i9 w2 J9 t
                                begin' Z3 J. j- t6 ^* B
                                cnt=0;* M, ?# L4 S& c5 k+ }) K
                                clkout=~clkout;
5 `  K8 t/ N4 E                                end
- o; ]( [. M! R' m                        end
" E* t/ A- p# W; x
& y* d$ S5 j1 a% A. nendmodule- c* K" W, R& K7 l) P7 D4 [
% n. @4 g9 H: \9 e/ d4 ]
`include "gen_divd.v"5 g9 j9 v; d) {0 z
' s% ]" }# P/ u$ }3 I- U
module led_w_dir
- p- F+ W* p' q+ E) r( d- s) u        (
* B% b/ v; F! b" P                ClkIn,
7 m7 ~! p+ O! v" b5 v  O% V3 a                KeyIn,
# W2 t8 ]- |8 g+ y/ o; {, i6 u# h- y                Resetb,
* o+ K8 A% g  c3 w) M6 X. J                LedOut
. w, E- `' m  f+ Y4 f        );
8 O" [. ~$ k+ O! {2 w" \: c2 P        input ClkIn,Resetb;
4 g+ }3 i: o1 q' r2 N        input [2:0] KeyIn;
" O! D+ x/ O0 s3 }; t* A6 F5 o        output [2:0] LedOut;
" Z$ Y! {9 o6 Q7 E        3 A9 S/ P' u5 P
        reg [2:0] LedOut;
$ d, r8 @4 E  V1 X* F. D; [        wire ClkLed;
9 [) b. ^( S- e5 K. U$ g7 H4 E/ m. @% r        reg [2:0] Cnt;5 W; M7 w  Q/ H& s/ r# K- a
       
" R3 s1 E0 Q  f' ]. x        defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频; q, A! T+ `/ m; M* P2 S" X
        gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));       
//帮忙解释一下是什么意思啊。9 W# Y! _4 w$ t7 f9 ?- h
        " ~, G5 }9 ]4 x, G9 e# K
        always @ (posedge ClkLed or negedge Resetb)' `$ E. k7 V6 x
                if(Resetb==1'b0)
3 A& [2 x- M4 b                        begin
5 C; \* g2 I) U                        LedOut<=3'b111;
: E& `7 d# h2 C/ E1 j. |3 ^  F                        Cnt<=3'd0;- B( H2 N9 C1 B5 y& e* [
                        end
2 u& l* {* e5 @                else
$ J" Q8 _4 i! L                        begin  M9 r  i! n4 Z6 G0 ?
                        if(KeyIn==3'b000)
; V6 G6 O7 ?/ v$ q8 w1 R  A4 U6 F                                begin
5 R* R! i, y5 K' f' T# p                                if(Cnt<=3'd2)9 h3 y+ [9 v# F& l
                                        begin& x5 ?2 J" J6 ~+ e6 L2 T$ d* x
                                        Cnt<=Cnt+1'b1;
. u/ ~, l& y9 t# i/ v+ P! S1 `                                        LedOut<={LedOut[1:0],1'b0};//拼接1 g6 K: P5 ]1 u0 T0 y& }: I
                                        end5 I. h+ F5 h* ?# G5 R
                                else       
4 S% Z+ }  _( R% E3 n9 m5 w                                        begin' o4 f" I9 O9 M! L+ K! Y; |  O. Q9 p
                                        Cnt<=3'd0;2 t$ ^/ A3 j# [& B6 `- W# n# G
                                        LedOut<=3'b001;
4 O0 o' F$ K  @1 c' e                                        end( u0 {3 Y8 k* k+ v3 H- W/ [
                                end
8 K* ]8 d* T3 N( u) a                        else if(KeyIn==3'b111)
/ l; N+ B, d1 y6 w                                begin
* d& ]: z; k( G9 a$ s                                if(Cnt<=3'd2)
1 t; a8 b& X0 l- s7 z5 `/ E" Y$ Y7 |                                        begin, T) r6 p! h+ f3 E( t' V
                                        Cnt<=Cnt+1'b1;
# [! L, T0 B7 y                                        LedOut<={1'b0,LedOut[2:1]};
+ V/ z8 H7 m1 a4 a1 {1 `/ s                                        end
- u: _6 {5 @) ^                                else        ! [0 r: H0 T: @+ M: F: {
                                        begin
0 }, b( M+ b5 X* `9 e+ o& }3 f* b                                        Cnt<=3'd0;+ y) s# K, k  |: @
                                        LedOut<=3'b100;- S5 }) @3 U8 q; }4 f3 ^; ^3 Z+ A
                                        end! G( x7 U( w( t+ a
                                end$ V0 C9 x5 L& M7 M7 o
                        end
* B3 J* Y9 I0 n( @% \# ]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' D4 {  y: A; l0 K8 c5 [
求高手解释一下红色画线的语句什么意思 啊,我是一个初学者

% o8 E2 X4 A4 s0 [; Z6 w0 v" F" I这是systemVerilog的语法:$ b$ ]" a# I0 z, Z3 f
defparam  Gen_ClkLed.divdWIDTH=23, Gen_ClkLed.divdFACTOR=10000000;
  s% U! b1 ?& s4 b3 b/ |+ d5 ?6 T+ h/ a& W& l, Z6 R# [/ T
重新定义了层次结构(Gen_ClkLed在下一句里定义)里的参数divdWIDTH,divdFACTOR;
( {; {. _* P. E  N0 `8 s, [7 D. W) g8 w: g8 q7 h2 N- e
gen_divd   Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));   
5 v8 \  t  _- {5 O+ `) V, i; P& F# S) C  y4 a
例化了gen_divd模块,例化名是Gen_ClkLed。其中的参数divdWIDTH,divdFACTOR前一句defparam语句里已经定义过了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
4#
 楼主| 发表于 2014-7-1 10:00 | 只看该作者
好,谢谢啊
8 U+ H/ ~! r  j6 t! o: [: e

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
5#
 楼主| 发表于 2014-7-1 10:04 | 只看该作者
再请教一下啊  A0 ^* W9 N& ]
9 h6 [) s% R6 m8 i2 T3 a
Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declared more than once
' B3 ?+ A% S8 ?1 y这个什么原因啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
6#
发表于 2014-7-1 10:27 | 只看该作者
本帖最后由 lvsy 于 2014-7-1 10:40 编辑 * J# V- S- z% [: C
1292569609 发表于 2014-7-1 10:04
, ~9 ~- t  Z3 d4 t+ |再请教一下啊
# V1 x! n7 {/ y, i, u- f# i: [. {' F( j8 r
Error (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declare ...

7 r0 k" `  g3 V$ y1 r0 N/ N4 T% }) a& ~' D
是不是指Gen_Clked?
4 d! m, l8 K. |- r; Z8 B. Z% I" R$ B+ Y9 P2 b* W
把defparam 这句移到gen_divd Gen_ClkLed(......); 模块例化的后面试试看!
# `0 _. o) z  a, S0 b( w* Z$ r+ e- W
  d, f" Q5 O% Q; D3 @6 E或者这样例化: T% _" @1 E) `- D- R" L9 g( F
% q# U9 a8 T$ B! ^, b/ l
gen_divd  #(.divdWIDTH  (23),+ m" S" ?. w. R
                 .divdFACTOR (10,000,000 ) )
/ H; f6 C. i  _, @
* C( ~* L* y$ s; U               Gen_ClkLed (.reset(Resetb),
/ X! Z, `% U! F) |1 V4 E, _1 N, Q                                .clkin(ClkIn),
0 i' w% S1 u: u' F) b! c                                .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
& |4 {/ T+ ^5 \; [# `* H# u! G是什么意思啊
$ Y4 @1 ^# d. m1 R3 d$ A

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
9#
 楼主| 发表于 2014-7-1 10:39 | 只看该作者
`include "gen_clk.v"
; \9 R( R* B" v2 x3 }  W# h, r( c" a) ?: y5 J4 @3 R$ `
module led(clk1,reclk1,cout1,cout2);+ N2 C3 m$ s, N! w; o' K2 Z
input clk1;
! O6 O1 F; A! @# h% @" x- loutput reclk1,cout1,cout2;' i# o1 ]) y3 I( e) J
reg reclk1,cout1,cout2;
; \' D& {( A# t3 I7 ^
8 _2 E. v% f: O6 jgen_clk led(.clk(clk1),.reclk(reclk1));
! ?# b6 i0 u1 sdefparam led.width=2000000; //频率是0.08S;" \) ?& x" L( r

  b$ k) z8 ^3 Q1 Ualways @(negedge clk1)
4 ]  D. E3 G- g/ h9 R    if (reclk1==1'b1)1 q( E6 ^3 `, I1 i) D# _3 c8 ]
         begin
0 e  d5 t% @. t, ~7 Q/ J         cout1=1'b0;5 N! ^$ Q( l1 h! |* z1 B+ v; k
         cout2=1'b1;
6 K' e# k0 t1 L$ t6 U, T4 y5 d7 w         end
6 g. s7 {( y) I: W6 j  e8 A         else% Q$ ~# A2 x4 \8 `6 S4 H
         begin
6 S  w0 P" |( ~- {         cout1=1'b1;; [5 f0 X) U) B! D  H: [3 e! f
         cout2=1'b0;* A# s6 Y( b. z' Q& A: Y
    end
' \8 C* }5 Y: j9 P; d6 vendmodule
" x+ s" o1 I) s" R$ Y/ i! }1 ?9 q. y& f' z& B+ X+ q
module gen_clk(clk,reclk);. M: s: X; K9 a. i5 v
input clk;# H8 t0 D( y9 S" s# Q5 V. D( S" F
output reclk;
8 {' k2 P1 h# N  k/ J$ ~reg reclk;
6 l* C' W" Y, _' Y/ E9 W" zparameter width=1000000;//分频数1000000/25M=0.04s
$ a3 K9 \# ]8 B1 D1 T" Ureg[11:0] count=12'd00;  ^8 r, l6 w8 K0 H
always @(negedge clk)
; q* D  D* O' p7 S( W  if(count>=width)" C+ t' i7 n) p* N, j
  begin
% ?  w8 l$ b: i/ L6 _' R  count=0;3 ~; h/ F# }3 g3 q
  reclk=~reclk;. q! d8 Q- i) J% L1 i( T  e! t
  end
5 I+ p2 d: B  d; ~7 U else count=count+1;
5 G: x# O6 ~' @, e7 T9 Bendmodule
( F/ \/ V+ A: H0 V( D) R这是全部的程序了( n0 q, S* L6 @" T4 S8 ~' m% q
麻烦指点一下啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
10#
发表于 2014-7-1 10:50 | 只看该作者
1292569609 发表于 2014-7-1 10:39
- M! o* E( m' T`include "gen_clk.v"
" |6 ]7 g' ]: G6 c" X
; `/ N, Q6 s$ N6 H" ymodule led(clk1,reclk1,cout1,cout2);

" L( [/ Z# U9 X: t发现了两个问题:
$ E7 F, e- N3 e$ i1. gen_clk模块里reclk没有初始值,综合会发现latch。+ J2 D, Y% ]3 N6 [
2. led模块里reclk1不应该定义成reg型,应该是wire型。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
11#
 楼主| 发表于 2014-7-1 11:37 | 只看该作者
为什么要定义为WIRE型了
7 b$ I4 ^9 W/ p, K

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
12#
发表于 2014-7-1 13:11 | 只看该作者
1292569609 发表于 2014-7-1 11:37
7 P  e) z3 i" J3 o5 |1 V为什么要定义为WIRE型了

  a& o; @! Y1 ~/ ]" r因为它是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 03:27 , Processed in 0.064578 second(s), 33 queries , Gzip On.

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

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

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