EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2019-4-1 15:01 编辑 7 V+ ]/ o" J: z& u0 b
1 z; X! i( s1 _5 u t+ f2 t
第四个实验:学习调用IP核实现计数器我用的是quartus II 15.0的版本
/ [+ x+ Z" }8 i$ \( x! n- z* w3 A
4 e7 p& U/ ~& I; E" R* F9 H, g先是建立工程然后使用counter IP核 * B+ A9 A4 A' ?3 ?+ F) t
. \% ^* R9 n9 _) X& W) [6 Y6 b4 Q/ E
& p4 `3 u- S! N
5 e, t' W; u" }$ \
; T" U( G9 i0 w' N: [+ d0 ~( z N$ ~; b8 |2 F g
" r; x4 M4 X. W2 ]/ ^$ N# p0 D
配置counter 选择四位,向上计数, . w6 l2 s: w8 {9 [* j4 e* l
8 i; a2 M6 |3 U5 I5 z3 ]; s R计数输出是模的形式输出应为前面选择的是4位所以模最大是16
' t* U7 v% n% D8 c. ?" ~" p4 p4 R这里最大输出10可以实现一个BCD码的设计
3 D/ }& r1 z: @% f) p& h选择carry in carry out 模式 |% S) B' H2 r& g( _7 z
, ?- u1 I4 j/ W ~% u
! `& Z6 f G7 n% g. ^) ~/ l' j& Q. g" p0 d2 n% ]) G
1 p) t; y; D$ o; v* }# _5 X2 q
然后把点V的文件添加进来。
$ d& x) P8 v4 Q, |7 b" a! a, `6 ]+ k' m: D/ j- I& }
0 X k8 K% f6 o* n) [然后就可以分析和中合了。
, j( a' ]4 z6 u5 S编译成功没有错误。
( G u1 ~. s) q$ ]- t6 _ K
9 Z( s- U1 ]( `- {+ Q$ U4 T0 D然后开始写测试文件了 ! f7 B1 V% d. x7 Z
testbench文件 0 E$ a3 d! I* {% G! E
这里使用了一个repeat()语句表示重复括号了面的次数 7 @( f$ `2 r. L/ h Y5 Q! W0 f6 ^
- `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
- endmodule5 w0 L! D: U) k: f" [* A V6 |
$ B ]) u+ c0 n O2 d3 v
6 o( a' ^! I+ v F* t0 G5 f0 h6 w4 q0 W
4 O- ]0 Y0 E3 T. ~: n2 u2 k, N' }$ `
然后开始RTL仿真 2 j: A4 P! s" `9 I' f! N
( {0 Z$ `- L3 W9 X符合要求计数从0到9 cout=1;
% r8 q: m% D8 m9 V然后是连个4位的计数器级联 , w) m- M/ V+ a
8 K! y' p k0 P/ o5 r建一个counter_top
7 r5 o0 b4 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]));
- endmodule
9 a" ?9 g0 w0 |! l2 i" M! ~
) i% p% i% d* V/ P' N: F2 X
& K8 ]) G$ x9 e. I
$ p7 A) h$ G o/ U0 S. l% u9 l4 C
' D4 d% e: Y3 D# U
然后RTL仿真: . F f) [5 D! k3 |
9 U+ m ~& X. O! I6 c: b
% V0 T- O3 w8 V& y/ I. g- |, b
! @3 f3 K) |" e/ K, a! S
符合 4 d6 W' P F+ T
|