在verilog中使用T-flipflop的4位计数器

时间:2017-01-17 14:38:18

标签: verilog hdl

我试图设计一个带T触发器的4位计数器,这就是我所做的:

1 - 从D-flipflop到T-flipflop:

module T_FlipFlop( clk,T, Q);
   input wire clk;
   input wire T;
   output reg Q;
   wire D;

   initial
   begin
      Q<=1'b0;
   end

   assign  D= T ^ Q;

      always @(negedge clk)
       begin
        Q<=D;
       end
endmodule

使用RTL shematic:

enter image description here

在此之后&#34; D_ff到T_ff&#34;转换: enter image description here

2 - 然后,我在顶层模块中实例化了4个T触发器,并将每个触发器的输出连接到下一个触发器的clk

 module Counters_FreqDividers( sysclk,Q1,Q2,Q3,Q4);
   input sysclk;
   output wire Q1;
   output wire Q2;
   output wire Q3;
   output wire Q4;

    T_FlipFlop       num_1(.clk(sysclk),.T(1'b1),.Q(Q1));
    T_FlipFlop       num_2(.clk(Q1),.T(1'b1),.Q(Q2));
    T_FlipFlop       num_3(.clk(Q2),.T(1'b1),.Q(Q3)); 
    T_FlipFlop       num_4(.clk(Q3),.T(1'b1),.Q(Q4));

 endmodule

使用RTL原理图:

enter image description here

按照此图表:

我们知道T触发器只是一个JK触发器,J和K相互连接,这就是我们在这里所拥有的,所以将它们视为T触发器。

3 - 模拟: enter image description here

4 - 最后,我的问题:

1)为什么Q1是正确运行的 ONLY 输出?

2)为什么Q2Q3Q41开头,尽管我已将其初始化为0

我无法弄清楚失踪的是什么,我试着玩,但没有任何效果,我被困在这里!

修改:我的测试平台:

 module test;

  // Inputs
 reg sysclk;

// Outputs
wire Q1;
wire Q2;
wire Q3;
wire Q4;

// Instantiate the Unit Under Test (UUT)
Counters_FreqDividers uut (
    .sysclk(sysclk),
    .Q1(Q1), 
    .Q2(Q2), 
    .Q3(Q3), 
    .Q4(Q4)
    );

   initial begin
    // Initialize Inputs
    sysclk <= 1'b1;

      #200 $finish();
   end

    always #5 sysclk=~sysclk;

endmodule

0 个答案:

没有答案
相关问题