99网
您的当前位置:首页VHDL实验报告JK触发器、同步计数器

VHDL实验报告JK触发器、同步计数器

来源:99网


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触发器的内部原理和应用都有了较深的体会,这对于我数电的学习很有帮助。

但是,我在编写测试代码的时候有明显的不足,经过老师指点后才的完成了实验。所以我会更加重视测试部分的编写和一些基本运算符的使用方法,相信下一次我一定会做的更好!

因篇幅问题不能全部显示,请点此查看更多更全内容