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! X4 W2 i8 n& i3 f, N4 y" S# x; }
2 i0 ]5 G; A( x符合
5 ]/ K+ G1 A k1 `/ o5 C |