[verilog] 一道时序电路的问题

[复制链接]
 楼主| tbhh 发表于 2020-4-5 14:51 | 显示全部楼层 |阅读模式
这是一道触发器的题目,但是仿真波形和我分析出来的不太一样下面是我的代码:
  1. module T_ff(input T,input clk,input rst,output reg Q, output reg Qn);
  2. initial
  3. begin
  4.         Q <= 0;
  5.         Qn <= 1;

  6. end

  7. always @(posedge clk,negedge rst)
  8. begin

  9.         if(~rst)
  10.         begin
  11.                 Q <= 0;
  12.                 Qn <= 1;
  13.         end
  14.         else
  15.                 case(T)
  16.                 1'b0: begin Q <= Q; Qn <= ~Q; end
  17.                 1'b1: begin Q <= ~Q; Qn <= Q; end
  18.                 default: begin Q <= Q; Qn <= ~Q; end
  19.                 endcase
  20.        
  21. end
  22. endmodule
  1. module D_ff(input D,input clk,output reg Q,output reg Qn);

  2. initial
  3. begin
  4.         Q = 0;
  5.         Qn = 1;
  6.        
  7. end

  8. always @(negedge clk)
  9. begin

  10.         Q <= D;
  11.         Qn <= ~D;
  12. end
  13. endmodule
  1. module jK_ff(input J,input K,input clk,output reg Q,output reg Qn);
  2. initial
  3. begin
  4.         Q = 0;
  5.         Qn = 1;
  6. end
  7. always @(negedge clk)
  8. begin

  9.        
  10.         case({J,K})
  11.         2'b00: begin Q <= Q; Qn <= ~Q; end
  12.         2'b01: begin Q <= 0; Qn <= 1; end
  13.         2'b10: begin Q <= 1; Qn <= 0; end
  14.         2'b11: begin Q <= ~Q; Qn <= Q; end
  15.         default: begin Q<=Q; Qn<= ~Q;end
  16.         endcase
  17.        
  18.        
  19. end
  20. endmodule
  1. module FF(input clk, input t,output Q3);
  2.        
  3.         wire Q1,Q2,Q1n,Q2n,Q3n,rst;
  4.         and(rst,Q2n,Q3n);
  5.         T_ff t_ff(.T(t),.clk(clk),.rst(rst),.Q(Q1),.Qn(Q1n));
  6.         D_ff d_ff(.D(Q1),.clk(clk),.Q(Q2),.Qn(Q2n));
  7.         JK_ff jk_ff(.J(Q2),.K(Q1n),.clk(clk),.Q(Q3),.Qn(Q3n));
  8. endmodule
  1. `timescale 1ns/1ns
  2. module tb();
  3.        
  4.         reg CLK,t;
  5.         wire Q3;

  6.         initial
  7.         begin
  8.                 CLK<=0;
  9.                 t<=1;
  10.                 repeat(100)#10 CLK <= ~CLK;

  11.         end
  12.         FF ff(.clk(CLK),.t(t),.Q3(Q3));

  13. endmodule
有大佬帮帮刚学数电的萌新吗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| tbhh 发表于 2020-4-5 15:03 | 显示全部楼层
触发器赋初始值的方式改为非阻塞结果还是一样的
 楼主| tbhh 发表于 2020-4-5 17:54 | 显示全部楼层
已经解决了,是Q3n与Q3取反关系不同步的问题
张啊哈 发表于 2020-8-25 16:33 | 显示全部楼层
tbhh 发表于 2020-4-5 17:54
已经解决了,是Q3n与Q3取反关系不同步的问题

新手求问具体改了哪里?我自己看那个JK触发器也没找到错误。begin里面用的是<=为什么会取反不同步呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部