VHDL实验报告JK触发器、同步计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Verilog HDL实验报告
Verilog 实验报告题目:JK触发器、同步计数器系部名称:通信工程
专业名称:通信工程
班级:
班内序号:
学生姓名:
时间:2010.11.28
一、实验内容:
用JK触发器构成同步计数器:
设计一个同步计数器,其逻辑图和JK触发器的逻辑图所示。
清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出,当count_enable信号为低电平时停止计数。
写出同步计数器的verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:0]。
二、实验原理图:
JK触发器构成同步计数器
源代码:
//主模块
module synchronous_counter(clear,clock,count_enable,Q);
input clear,clock,count_enable;
output [3:0] Q;
wire qbar1,qbar2,qbar3,qbar0;
wire a,b,c;
assign a = Q[0] & count_enable;
assign b = a & Q[1];
assign c = b & Q[2];
JK_flip_flop myJK(count_enable,count_enable,clock,clear,Q[0],qbar0);
JK_flip_flop myJK1(a,a,clock,clear,Q[1],qbar1);
JK_flip_flop myJK2(b,b,clock,clear,Q[2],qbar2);
JK_flip_flop myJK3(c,c,clock,clear,Q[3],qbar3);
endmodule//调用的JK触发器模块
module JK_flip_flop(j,k,clock,clear,q,qbar);
input j,k,clock,clear;
output q,qbar;
wire a,b,y,ybar,c,cbar,d,q,qbar;
assign a = ~ (((qbar & j)& clock) & clear);
assign b = ~ ((clock & k) & q);
assign y = ~ (a & ybar);
assign ybar = ~ ((y & clear) & b);
assign c = ~(y & cbar);
assign cbar = ~ clock;
assign d = ~ (cbar & ybar);
assign q = ~ (c & qbar);
assign qbar = ~ ((q & clear) & d);
endmodule
测试文件源代码:
module count_test;
reg count_enable=1,clock=0,clear=0;
wire [3:0]Q;
synchronous_counter myCount(clear,clock,count_enable,Q);
initial #10 clear=1;
always@(negedge clock)
begin
$monitor($time," clear=%b,count_enable=%b,Q=%b%b%b%b\n",
clear,count_enable,Q[3],Q[2],Q[1],Q[0]);
end
always clock = #5 ~clock;
always count_enable= #170 ~count_enable; endmodule
实验结果:
波形图:
三、实验心得:
这次实验比上一次顺利多了,可能是因为有了前一次的铺垫,我对软件的熟悉度有了一定的提高。
经过这次实验,我对数据流建模和行为建模有了进一步了解,也能很好的在机器上进行排错和完善。
而且,我对JK触发器的内部原理和应用都有了较深的体会,这对于我数电的学习很有帮助。
但是,我在编写测试代码的时候有明显的不足,经过老师指点后才圆满的完成了实验。
所以我会更加重视测试部分的编写和一些基本运算符的使用方法,相信下一次我一定会做的更好!。