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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 House 于 2019-4-1 15:01 编辑
' q# @$ M/ e$ K: @% V! ^6 \
  H/ Y4 W+ N9 M2 M! f: k& p
第四个实验:学习调用IP核实现计数器我用的是quartus II 15.0的版本
( U) c! K" f& S4 Y% u* G
& U% D& Z6 t3 E( Q
先是建立工程然后使用counter IP核
5 z8 i7 n* {7 Q/ C5 \

: A" a; g$ }- G' d+ t$ x7 O6 a$ y- D- Y
+ \: A5 U  I+ `; n
* R) g& |, X; u3 v- E6 A" @; `/ x4 i
4 b- G7 J2 b, I( S
+ t5 ^8 |) h& ]6 V& p1 `
配置counter 选择四位,向上计数,

4 b7 V8 h' m9 T3 K/ ?  N0 a( Z0 x/ N1 `9 e5 E2 S% w2 y3 k
计数输出是模的形式输出应为前面选择的是4位所以模最大是16

/ ]9 p+ N! }+ B* ~* p5 j, L
这里最大输出10可以实现一个BCD码的设计
( T! q' y9 E% B! D- w/ t( \" m" t9 U
选择carry in carry out 模式

4 z7 c, c2 K$ S3 k6 I3 h6 {7 p* J; H3 D

3 L! z+ n& N2 v  V) D$ `1 w

2 K2 T* w5 I/ u9 K8 |" ]. b
& q' A- A! N! Q. p3 M
7 L% K! O6 u3 E4 x% O- W
然后把点V的文件添加进来。

4 f2 R4 X+ B2 `6 \0 W5 l$ ^
9 `8 {1 ^& l7 t; r6 X1 M* m
# y2 |$ s+ O' Q! K3 l3 w8 M
然后就可以分析和中合了。

6 |& z* f; o" r- q! \$ N3 l
编译成功没有错误。
- I+ v9 E! C. T3 ?

( @% @, f8 C, O( n; |
然后开始写测试文件了
* |9 [, l; x* L4 d& j/ {
testbench文件

$ o- z3 y2 P$ ^
这里使用了一个repeat()语句表示重复括号了面的次数
! g9 @2 j" X& r$ {1 g! }
  • `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
  • endmodule4 R) N& V, q: i2 w/ D6 j5 r8 \

" a2 H3 z( k1 K0 R
' j* ~3 E. u& L+ P! ]% b4 Z; ]
3 R$ {8 D6 W5 [' J2 f) `

2 Q8 t# ?) Q; z* K9 F4 }! K
然后开始RTL仿真
1 h7 |4 [! [4 v  G
+ R0 C4 |( l4 F
符合要求计数从0到9 cout=1;

9 @  g* p4 X" B% v' w8 ]- f
然后是连个4位的计数器级联
$ X$ D6 u1 }$ x5 r
6 e6 p1 l2 {( N4 s' s) h$ s. v
建一个counter_top
: q) O1 D2 H4 w3 i2 p( X
  • 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]));
  • endmodule1 s  @' t( U6 J1 J* Y# u

% X( |+ ?" f* l
7 H0 k2 [5 K5 ], Y) d

# n9 D: d, O6 L# @- c" B
$ T6 n! Z! @3 m( ~/ S/ p
然后RTL仿真:
. ]7 ?$ v' P, d+ i9 W/ k$ i  x

- K( S; f+ B' P; Z5 V! X
4 W2 i8 n& i3 f, N4 y" S# x; }

2 i0 ]5 G; A( x
符合

5 ]/ K+ G1 A  k1 `/ o5 C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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