找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

FPGA问题

[复制链接]

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频
) y1 q9 Q0 ]9 S( t5 l//divdFACTOR--分频系数,实际分频数为divdFACTOR*2
. v9 E+ `# G2 a7 B8 P: J6 z- p6 p//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR4 D0 g! X4 }" K" |
module gen_divd(reset,clkin,clkout);
* a- }0 q( {( x+ P        input reset,clkin;
4 x9 @3 n; O" P2 v& v, n        output clkout;' t. B$ u& b2 N4 Y9 _- }/ p
        parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
5 B' Z2 T( _0 S% `8 t        parameter divdFACTOR=1;//分频系数是divdFACTOR*2# N" z; g5 u3 _! w% d
        reg clkout;' [9 @) E1 i) G* y# z
        reg [divdWIDTH:0] cnt;; W7 C. V) M* B' m& u; P+ ~9 y1 W5 _
       
3 R+ M& D+ L2 z        - z) g+ b, z  T% x$ T
        always @ (negedge reset or posedge clkin)6 E) i# x+ Q6 c0 S; |
                if(reset==1'b0): t2 q# ?6 E; E7 i; J
                        begin
/ p/ A) w' b" O  k) g                        cnt=0;3 M5 a% M. z( N" S
                        clkout=0;  R. p$ A( g! L% g1 u$ S
                        end4 k0 K5 z4 ?3 C8 `7 G) V- e: a
                else& ]2 ]$ r4 o/ \. E/ b! @+ q: C
                        begin
# S" z2 z/ _3 M4 L9 v, t) x                        cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的
: U( F7 J1 m1 s4 A) @                        if(cnt>=divdFACTOR)( ^0 {8 G% s6 m+ _2 c; j( g
                                begin; X( P! H! t0 P3 Y5 b
                                cnt=0;
& p3 L' e# d6 O. G6 D/ C! G                                clkout=~clkout;
* P  `& h  U; c$ f                                end
  h" J# c) q5 }: R3 A                        end
+ r$ ?! t2 @! v# J; G! H) @; c4 H7 E3 B/ ~) e5 b" r
endmodule& {7 u# ~9 V1 Y  N4 |& G

" c& [) V- y7 f# ]% }% k1 M: I6 }`include "gen_divd.v"
  q: _( D3 A8 T- m8 E% ], C  y1 G5 Z  ?3 B. S
module led_w_dir
5 `4 {) ]5 U$ e2 d5 q5 D        (; |7 U; R% f& _
                ClkIn,( m. k. `/ P6 I  |
                KeyIn,8 P8 j3 g1 P: [7 r2 h4 G9 v
                Resetb,
! h* \$ y3 F/ u3 f' t" s- ?                LedOut
( U# v; T# m2 n1 Q  S! X        );: c! L) S0 j$ }( v4 W% l+ Q" U
        input ClkIn,Resetb;1 c1 M& t7 {8 L1 @# m% o2 a
        input [2:0] KeyIn;( j. @: {+ ]( o: x. r
        output [2:0] LedOut;
3 r! s+ {! D- g( Z8 |( }       
: U: Q! [$ e4 _* t/ H" p        reg [2:0] LedOut; 0 J, B! [5 o6 r2 ?  L. z6 t  y
        wire ClkLed;
) I7 G/ c4 W; {* k        reg [2:0] Cnt;
$ B- B2 t$ f( o% I+ N$ b; t' z4 W: A" ~        9 z, F0 P1 C2 x% Q3 w
        defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频9 I0 z4 u2 x) x4 }9 I
        gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));       
//帮忙解释一下是什么意思啊。# K. s' S# Z2 g' N' L
       
. h8 [( Y- w* G- o; Q4 o, U        always @ (posedge ClkLed or negedge Resetb)
% F4 w2 B) g* w5 V9 t! Z1 }% M                if(Resetb==1'b0)$ @2 T+ X4 K4 g) n3 }2 y1 s9 D# \
                        begin
& o' F8 N# ~* M# @) o                        LedOut<=3'b111;: f  a5 c+ i2 r. ^
                        Cnt<=3'd0;
' ^7 T" w$ i& Y7 l                        end
" t, ~. E- K% h" E: U                else% ~$ x# ~4 v/ T) l
                        begin. P" B* a8 @) O1 |
                        if(KeyIn==3'b000)
6 f6 m8 n3 x7 p. F9 l                                begin
+ m, I, G  K, ~7 ]                                if(Cnt<=3'd2)
9 A& K4 I  K* y$ B! t# O7 D$ {                                        begin
1 d* q) p8 ~. u. Z  _                                        Cnt<=Cnt+1'b1;, R, O9 q' [& q/ r* p2 K1 k
                                        LedOut<={LedOut[1:0],1'b0};//拼接. b- Z& Y) Q0 H
                                        end
. h) }) Y( i/ }( u8 k                                else        $ W" |" l4 }( Q. R
                                        begin
" o, A: ^0 @( O5 J                                        Cnt<=3'd0;5 e8 T# H6 B' F6 o, W
                                        LedOut<=3'b001;
" H  M; C- ~1 s' U" X  t/ [& K                                        end
5 a& Q) q( e0 b. K5 Z# u: g/ f                                end* c' N! Q. X5 {5 ?: b. w4 Z
                        else if(KeyIn==3'b111)" x4 ~2 `2 ~( ]( {& L* |; w
                                begin% s% _% k% m% i% |
                                if(Cnt<=3'd2)$ M6 }- p) r; p& |$ U  e) x
                                        begin
4 h9 d& q0 C$ r- U3 h                                        Cnt<=Cnt+1'b1;/ @% Z7 H" f" n2 E  {6 u4 t2 e
                                        LedOut<={1'b0,LedOut[2:1]};- h3 U- q8 _  }8 g$ Y; Y: L
                                        end' T: i8 T2 o0 F( G  x+ M6 Y
                                else        / \4 |3 _7 _. b- E/ p8 A5 I
                                        begin
$ R2 f+ h+ i  J                                        Cnt<=3'd0;, \8 Q/ I$ E. s# k
                                        LedOut<=3'b100;
# J$ s* b( a: e  C& w+ M' J                                        end
; l: \% Z/ d# X8 F                                end  F* m- \3 h- ~# b) ]
                        end
4 L( i; b* ?! C* cendmodule
分享到:  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# G' X  e; d9 r3 ~. [+ |0 m& l. z
求高手解释一下红色画线的语句什么意思 啊,我是一个初学者
6 {0 z; h* D, U2 L1 e% K% e
这是systemVerilog的语法:$ O$ ], a8 W& L+ Y5 p) B. F( }
defparam  Gen_ClkLed.divdWIDTH=23, Gen_ClkLed.divdFACTOR=10000000;* X# [! [; Y9 y' D. c: z" b

0 [8 R% A5 l7 [重新定义了层次结构(Gen_ClkLed在下一句里定义)里的参数divdWIDTH,divdFACTOR;2 @0 e; H3 b$ m4 j; _+ Y# Q( V/ t
% c- Q+ B* Q: S8 V  y4 \5 c) r
gen_divd   Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed));   
1 Z7 K& Z8 L% g" O, \
7 L6 @4 B4 E. J5 v" j) P" x例化了gen_divd模块,例化名是Gen_ClkLed。其中的参数divdWIDTH,divdFACTOR前一句defparam语句里已经定义过了。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
4#
 楼主| 发表于 2014-7-1 10:00 | 只看该作者
好,谢谢啊  P- S% w3 y0 B2 s$ W

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
5#
 楼主| 发表于 2014-7-1 10:04 | 只看该作者
再请教一下啊2 V+ i, V3 `* d

$ F1 @2 y7 \8 q% B% dError (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declared more than once, i5 c4 N  q9 g1 l
这个什么原因啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
6#
发表于 2014-7-1 10:27 | 只看该作者
本帖最后由 lvsy 于 2014-7-1 10:40 编辑
8 Z* w# `7 i7 s8 J0 c8 V
1292569609 发表于 2014-7-1 10:049 _8 D$ Q3 C: W0 c
再请教一下啊8 X" N# v! @2 x0 O  V! K, A& f- I

5 s' M$ P# f. sError (10228): Verilog HDL error at gen_clk.v(1): module "gen_clk" cannot be declare ...

1 X3 ?5 ^/ [# a) ~  y) n& ]- [( F4 n5 S
是不是指Gen_Clked?8 V  M5 m* g4 T. [4 ~. Q
+ X# }8 t3 i! m" X
把defparam 这句移到gen_divd Gen_ClkLed(......); 模块例化的后面试试看!
3 ~5 A, M4 n* R; X2 v/ I
' d! g" U, o) Y' L或者这样例化0 o7 l1 H* U  {, ^6 Y
6 A- y8 E; D: ~: j) o4 B  I4 R
gen_divd  #(.divdWIDTH  (23),
/ Z4 c+ S2 b" D  Z  m                 .divdFACTOR (10,000,000 ) )3 x3 F! V& {6 S. t. q9 f& a

* T% o7 S% V7 ^$ V1 Y& V( k4 e               Gen_ClkLed (.reset(Resetb),
% e! {; w8 k' o  h                                .clkin(ClkIn),$ P+ L( w2 P$ G: {) 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
/ B$ j; H& R" z' E! |. d, R是什么意思啊
* G" s; J3 B6 _4 t9 [5 b5 N

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
9#
 楼主| 发表于 2014-7-1 10:39 | 只看该作者
`include "gen_clk.v"
6 d  m( M5 R) d8 h- S  z: z; `8 p* c' K/ T
module led(clk1,reclk1,cout1,cout2);
8 N2 d' Y7 t5 G+ `+ l' tinput clk1;
% F) v' p/ A" i, `' v: \: ooutput reclk1,cout1,cout2;# o; R* M0 `( F9 L) o7 D4 p! |
reg reclk1,cout1,cout2;
# m. o9 w, b' I; v2 ]8 D6 L
+ D/ g* j( ^6 jgen_clk led(.clk(clk1),.reclk(reclk1));* |. u. F% q- o7 R
defparam led.width=2000000; //频率是0.08S;
0 n4 ?5 K# C  {; R! p& @! @! e8 R  [4 s9 F) w+ N' [1 B+ ^
always @(negedge clk1)( B4 H, X, @# T0 v
    if (reclk1==1'b1)
1 g  l3 L, y: ?3 L' r6 O0 g         begin; o$ Q! b. q: n  x, u
         cout1=1'b0;- S/ L6 w. `8 O  c$ H' }3 |
         cout2=1'b1;8 b, U! `- F" h# n
         end
$ n& X* C; W' Z4 e- B+ C! m         else
1 E7 o. [# |' D# L  u         begin
. G7 J. n+ L" `9 {- `( ~( _         cout1=1'b1;: ~$ C4 G( h8 Y4 T* T% D3 X
         cout2=1'b0;
+ ]3 T; ^5 m1 y6 w    end
' q1 J' ]: f9 b; o+ T# tendmodule3 C+ X9 G8 e! F, g% I

% b6 Q' y5 B$ M/ B/ H% omodule gen_clk(clk,reclk);
- r0 D/ b# c8 Yinput clk;
+ I. P: |  W- _! C4 [% d0 woutput reclk;
2 T7 ^9 {) j$ J- {$ C9 c  sreg reclk;1 p9 Q# R9 a: x
parameter width=1000000;//分频数1000000/25M=0.04s# P/ N4 y% d- U! S7 M' h" Q, o
reg[11:0] count=12'd00;+ O& L" k: Q+ |% O% J
always @(negedge clk)/ p- v7 }! g( b1 |1 A- [6 u
  if(count>=width)
, D' V8 X/ [0 D  begin
% R0 o" n+ J$ U! v# O' V8 N# }3 N- U  count=0;
* q% X7 c) i6 U  reclk=~reclk;" ]" \4 x- l" H* I
  end5 S; \  P4 @5 Y
else count=count+1;
! ?) @( i9 V7 k4 h' ^- y) s, ^7 eendmodule ; C, K9 p6 Y. l$ |- Y" o9 W
这是全部的程序了
* U# J3 T& z" n* @- g7 C7 O1 {麻烦指点一下啊

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
10#
发表于 2014-7-1 10:50 | 只看该作者
1292569609 发表于 2014-7-1 10:39
$ A7 d3 _% F# f6 X, O' z`include "gen_clk.v"
" w$ e8 e2 Y7 K) [- i
: u* N# M: ?: Q" bmodule led(clk1,reclk1,cout1,cout2);

* C- D8 g0 n( u0 p发现了两个问题:
* M7 p! ~6 u: ]$ `1. gen_clk模块里reclk没有初始值,综合会发现latch。" j1 p, @: J5 S0 P
2. led模块里reclk1不应该定义成reg型,应该是wire型。

37

主题

82

帖子

847

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
847
11#
 楼主| 发表于 2014-7-1 11:37 | 只看该作者
为什么要定义为WIRE型了
( C+ i$ q" c  W6 I3 l1 P

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
12#
发表于 2014-7-1 13:11 | 只看该作者
1292569609 发表于 2014-7-1 11:371 l) p* {# ^, N
为什么要定义为WIRE型了
9 S* x- G/ x; m; Z+ B
因为它是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:47 , Processed in 0.059132 second(s), 33 queries , Gzip On.

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

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

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