การสร้างแบบจำลองขอบด้านบวกทริกเกอร์ T flip flop ด้วย asynchronous clear

Aug 19 2020

ฉันกำลังสร้างแบบจำลองขอบด้านบวกที่เรียกใช้ฟลิปฟล็อป T ที่มีความชัดเจนแบบอะซิงโครนัส นี่คือรหัส:

module t_flip_flop_exam (q,clk,clear,t);
  input t ;
  input clk;
  input clear;
  output reg q ;
  reg internal_t;
  always @ (clear)begin
    if (clear==1)
      q=0;
    else 
      q=q;
  end
  always @ (posedge clk)begin
        if (t==1)
          q=~q;
        else 
          q=q;
     
  end
  
endmodule

นี่คือรหัสที่มีประสิทธิภาพหรือไม่? เป็นเรื่องปกติที่จะต้องแยกalwaysบล็อกหรือมีวิธีรวมทั้งรหัสพฤติกรรมclearและclkสัญญาณในalwaysบล็อกเดียวหรือไม่

คำตอบ

1 toolic Aug 19 2020 at 17:33

นี่เป็นวิธีทั่วไปในการรวมalwaysบล็อก:

module t_flip_flop_exam (q,clk,clear,t);
    input t;
    input clk;
    input clear;
    output reg q;

    always @(posedge clk or posedge clear) begin
        if (clear)
            q <= 0;
        else if (t)
            q <= ~q;     
    end
endmodule

เป็นการดีกว่าที่จะมอบหมายสัญญาณจากalwaysบล็อกเดียว

ทริกเกอร์alwaysบล็อกบนposedgeของclearเพื่อสังเคราะห์ที่สามารถอนุมานตรรกะที่ต้องการ (ไม่ตรงกันชัดเจนสลับซิงโคร)

ใช้การกำหนดแบบไม่ปิดกั้น ( <=) สำหรับลอจิกตามลำดับ

ไม่จำเป็นต้องทำอย่างโจ่งแจ้งq=qเพราะเป็นการบอกเป็นนัยว่า