通过仿真和综合认识JK触发器(Verilog HDL语言描述JK触发器)

上篇博文写了用仿真和综合来认识D触发器(通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)),这篇博文采用完全并行的方式来认识JK触发器。

让我们迅速进入正题吧。

J-K触发器的Verilog HDL程序代码

//边沿JK触发器
module jk_trigger(clk, j, k, q);

input clk, j, k;
output q;
reg q;
wire qb;
always@(posedge clk)       //时钟上升沿到来时,判断jk的值
begin
	case({j,k})
	2'b00: q <= q;       //如果{j,k}=00,则触发器处于保持状态
	2'b01: q <= 1'b0;    //如果{j,k}=01,则触发器置1
	2'b10: q <= 1'b1;    //同理10,清零
	2'b11: q <= ~q;      //11,翻转
	default: q <= q;
	endcase
end

assign qb = ~q;

endmodule

测试文件:

//jk触发器的测试文件
`timescale 1ns/1ps
module jk_trigger_tb;

reg j,k,clk;
wire q;

//时钟电路,周期为20ns
always
begin
	#10 clk = ~clk;
end

//初始化
initial
begin
	clk = 0;
	j =	1'b0;
	k = 1'b0;
	#30 j = 1'b0; k = 1'b1;    //这30ns内,由于q处于保持状态,且q没有初始值,所以此时间段内q值应该处于不确定状态,
	                           //当过了这30ns后,时钟上升沿到来,q值被置0;
	#20 j = 1'b1; k = 1'b0;    //q值被置1;
	#20 j = 1'b1; k = 1'b1;    //q值翻转为0;
	#20 j = 1'b1; k = 1'b0;    //q值被置1;
	                           //拭目以待呗;
end

jk_trigger u1(.j(j), .k(k), .clk(clk), .q(q));
endmodule

仿真波形:

由仿真波形图可见,和我们在测试代码中说明的一模一样,说明设计正确。

综合后电路图(RTL Schematic):

展开后为:

综合出来的电路貌似有点复杂了,但可以直观的看出,这个jk触发器在FPGA中是由D触发器组成的,也就是说FPGA中只有D触发器,其他触发器由D触发器组成。

下面再看看Technology Schematic

从中可以看出由查找表(lut),D触发器以及各种缓冲器(buf)组成,关于这里的各种buf是干什么的,可以查看这篇博文:

【FPGA】IBUFG、IBUFGDS、IBUFDS...(这些到底是啥?)

看完之后会有一定的感触的。


最后给出J_k触发器的输入输出关系表格:

 

边沿J-K触发器输入输出关系
clkJKqqb
上升沿00q~q
上升沿0101
上升沿1010
上升沿11~qq

 

 

 

 

  • 35
    点赞
  • 193
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值