找回密码
 注册
关于网站域名变更的通知
查看: 460|回复: 1
打印 上一主题 下一主题

转——从零开始学FPGA——by ihalin——调用IP核实现计数器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-1 14:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
本帖最后由 House 于 2019-4-1 15:01 编辑
. {8 z/ K. K  _: p1 s8 q4 F$ B( x$ u( \# l7 `  f
第四个实验:学习调用IP核实现计数器我用的是quartus II 15.0的版本

6 O; r% \( P6 I" n* L3 C1 r" A4 z6 g( B+ e- k
先是建立工程然后使用counter IP核

' ]5 a4 I& A; A- Z2 d
6 Q4 ]1 w. N1 \( u: ]

4 m* `9 p  W. _; D+ @! S: E( z' B* j' z4 u5 y0 d& Y
8 o$ T  O- `* t8 y1 l. ?3 X9 Z
* {5 n* K, r4 B9 V

& h  ^4 {+ e0 ~2 K3 e5 r1 i
配置counter 选择四位,向上计数,

/ _, t& I3 Y7 Z: y* `) Z) E; ]& m0 a+ F
计数输出是模的形式输出应为前面选择的是4位所以模最大是16
  a- v6 H$ ]2 M6 x8 x: d$ K
这里最大输出10可以实现一个BCD码的设计

8 i, t2 e- C; l: I9 j) }. q) r
选择carry in carry out 模式
" Z: \; `7 J2 o; V  Y

0 c9 S9 T  V! G. w

* C- B" E! ?% }7 n) x% r  v3 \8 p
: ?+ f! j0 C; ]
1 O3 L. f: p- q8 B
然后把点V的文件添加进来。

0 n3 g/ O9 i' g
! e* ]" J  k% _) e
  n3 o5 n0 o( |; \, U, y- V
然后就可以分析和中合了。
/ d! y4 j) Y4 A/ q# C
编译成功没有错误。

* I; i" S1 \% h& B1 F- v1 t. i1 w" l) b: M
然后开始写测试文件了

5 I: Z5 Y1 u% O' B3 j1 e, ~1 p3 p- ^
testbench文件

6 e: Y$ P  i! N  l% b& H1 d* p
这里使用了一个repeat()语句表示重复括号了面的次数
, P0 P7 Z4 D* [! d+ W& ]
  • `timescale 1ns/1ns
  • `define clock_period 20
  • module counter_ip_tb;
  •    reg cin;//进位输入
  •         reg clk;//计数基准时钟
  •         wire cout;//进位输出
  •         wire [3:0] q;
  •         counter counter0(
  •         .cin(cin),
  •         .clock(clk),
  •         .cout(cout),
  •         .q(q)
  •         );
  •         initial clk=1;
  •         always #(`clock_period/2) clk = ~ clk;
  •         initial begin
  •         repeat(20)begin //repeat 重复5次
  •                 cin = 0;
  •                 #(`clock_period*5) cin=1;
  •                 #(`clock_period)cin=0;
  •         end
  •         #(`clock_period*200)//延时200个时钟周期后停止工作
  •         $stop;
  •         end
  • endmodule. t# O6 v+ g4 }& N2 f* m* l

5 Y- r7 P+ Q& |
/ ^0 ]" e& O) V' J

- y: @( C* n; h5 D  U1 C7 d6 l8 S( E; M9 I& i
然后开始RTL仿真
. {8 D% h# [3 p% b
: ], E- J& r& N7 F& n" ^, t- n
符合要求计数从0到9 cout=1;

$ ]$ B& d& k& G6 M
然后是连个4位的计数器级联

: r# j( h$ v9 j0 j% [+ }. q

, d1 G) B# m' i1 N% G, r+ L1 J
建一个counter_top

. f* o& i6 ]: ?( w
  • module counter_top(cin,clk,cout,q);
  •         input cin;
  •         input clk;
  •         output cout;
  •         output [7:0]q;
  •         wire cout1;
  •         counter counter0(
  •                         .cin(cin),
  •                         .clock(clk),
  •                         .cout(cout1),
  •                         .q(q[3:0]));
  •         counter counter1(
  •                         .cin(cout1),
  •                         .clock(clk),
  •                         .cout(cout),
  •                         .q(q[7:4]));
  • endmodule4 N/ ^9 }  o$ T
9 r( A5 U7 H' d: h6 O

& v8 H; v; L" N+ G4 \5 w1 h1 e+ E) \& a6 @( q

) e. h' i, M* A, T
然后RTL仿真:

% D2 ^" g* Y. C8 }# q# M
; d& _$ l) j  p, b

; M$ C3 K; @: b- [" R7 \, H* a
6 X- X8 L. a+ |/ G' _! m7 F' [
符合

, m9 \9 o( I9 M
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 23:06 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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