ใช้ขอบนาฬิกาทั้งสองข้าง


10

ฉันกำลังเขียนโปรแกรม Altera Cyclone IV โดยใช้ Verilog และ Quartus II ในการออกแบบของฉันฉันต้องการใช้ขอบนาฬิกาทั้งสองข้างเพื่อที่ฉันจะสามารถทำการแบ่งนาฬิกาด้วยปัจจัยประหลาดที่มีรอบการทำงาน 50% นี่คือตัวอย่างรหัสของฉัน:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

ตอนนี้เมื่อฉันรวบรวมสิ่งนี้ Quartus II จะพ่นข้อผิดพลาดต่อไปนี้:

Verilog HDL สร้างข้อผิดพลาดเสมอที่ adc_clocking.v (83): การควบคุมเหตุการณ์ไม่สามารถทดสอบทั้งขอบบวกและลบของตัวแปร "low_jitter_clock_i"

ฉันจะใช้ทั้งขอบบวกและลบของนาฬิกาที่กำหนดในการออกแบบได้อย่างไร

คำตอบ:


7

เมื่อคุณกำหนดให้การลงทะเบียนในบล็อกที่มีความไวต่อขอบเสมอคุณจะกำหนด flip-flop FPGAs ไม่มี flip-flop ที่สามารถกระตุ้นที่ขอบทั้งสองของนาฬิกา

ในการทำสิ่งที่คุณต้องการคุณจะต้องมีสองบล็อกแยกกันเสมอหนึ่งบล็อกสำหรับแต่ละขอบของนาฬิกาแล้วหาวิธีรวมเอาท์พุทของสองบล็อกโดยไม่สร้างความผิดพลาด

ตัวอย่างเช่นการบล็อกหนึ่งครั้งอาจมีตัวแบ่งที่ตั้งโปรแกรมได้ของคุณ ออกแบบเพื่อให้วัฏจักรหน้าที่ส่งออกน้อยกว่า 50% เมื่อได้รับเลขคี่ ใช้บล็อกที่สองเสมอ (ที่ขอบนาฬิกาอื่น ๆ ) เพื่อหน่วงเวลาเอาต์พุตของบล็อกแรกโดยนาฬิกา 1/2 นาฬิกาจากนั้นหรือทั้งสองเอาต์พุตพร้อมกัน ปิดการใช้งานผลลัพธ์ของบล็อกที่สองสำหรับค่าตัวหาร


เหตุผลที่ฉันต้องการใช้ทั้งขอบบวกและลบของนาฬิกาคือมีรอบการทำงาน 50%
Randomblue

ใช่ฉันเข้าใจแล้ว คำตอบของฉันพูดตรงๆว่า ฉันสันนิษฐานว่าคุณรู้วิธีรับรอบภาษี 50% แล้วเมื่อค่าตัวแบ่งเท่ากัน ไม่ชัดเจนอะไร
เดฟทวีด

ไม่มี flip-flop แบบสองทางใช่ไหม ไม่มีเหตุผลโดยธรรมชาติสำหรับสิ่งนี้ ปรากฎว่าไม่มีใครสร้างพวกเขา (หรืออย่างน้อยก็ไม่มีใครรู้) มาร์ตินชี้ให้เห็นว่ามี CPLD ที่รองรับ flip-flop แบบสองขอบ: xilinx.com/products/silicon-devices/cpld/coolrunner-ii/ …
ฟิลิปป์

3

หากนี่เป็นตรรกะภายในคุณอาจต้องเขียนให้ใกล้กับ flipflops ที่มีอยู่ ยกเว้นสำหรับ Coolrunner-II ฉันไม่ได้ตระหนักถึงตรรกะโปรแกรมใด ๆ ที่มีการลงทะเบียนสองครั้งโดยเนื้อแท้

ดังนั้นคุณจะต้องสร้างalwaysบล็อกสองบล็อกโดยบล็อกแรกจะถูกบล็อกและสำหรับบล็อกนั้นและรวมเอาข้อมูลเหล่านั้นเข้ากับตรรกะเชิงผสม

หรือใช้ PLL เพื่อเพิ่มนาฬิกาเป็นสองเท่าจากนั้นคุณสามารถใช้ตรรกะที่มีขอบแบบธรรมดา


2

ฉันสิ้นสุดการดำเนินการรอบหน้าที่ 50% สำหรับปัจจัยส่วนแปลก ๆ โดยใช้วิธีการอธิบายไว้ที่นี่


1

ในฐานะที่เป็น Dave Tweed เว้นแต่ว่า FPGA จะมีฮาร์ดแวร์ flip flop ซึ่งสามารถทำงานบนขอบทั้งสองของนาฬิกาได้มันจำเป็นต้องเขียนตรรกะของคุณเองเพื่อใช้งานตามที่ต้องการโดยใช้ flip flops แบบขอบเดี่ยวทั่วไป ในขณะที่มีหลายวิธีที่อาจใช้วงจรที่ทำตัวเหมือนฟลิปฟล็อปสองเท่าวงจรดังกล่าวโดยทั่วไปจะเพิ่มข้อ จำกัด ด้านเวลาซึ่งแตกต่างจากฟล็อปฟลิป

ตัวอย่างเช่นวิธีการง่ายๆคือการให้โมดูลรวม x 2 อินพุตสองตัวและคู่ของฟลิป "T" (ที่สถานะของอินพุตเมื่อพัลส์นาฬิกามาถึงระบุว่าขอบนาฬิกาควรสลับเอาท์พุท) หรือไม่ เกิดจากขอบที่เพิ่มขึ้นและอีกอันหนึ่งถูกเรียกโดยขอบที่ตกลงมา เอาต์พุตของโมดูลจะเป็น xor ของเอาต์พุตของ flip flops และอินพุตของ flip flops ทั้งสองจะเป็น xor ของเอาต์พุตของโมดูลและอินพุต

วงจรที่ได้รับการออกแบบในแบบนี้จะทำงานเหมือนกับฟลิปฟล็อปแบบขอบคู่แม้ว่าจะมีเวลาในการตั้งค่าและการแพร่กระจายนานกว่า แต่มีข้อ จำกัด เรื่องเวลาเพิ่มเติม ฟล็อปฟล็อปฟล็อปทั่วไปซึ่งไม่ได้อยู่ในเส้นทางป้อนกลับจะไม่คำนึงถึงถ้าการเริ่มต้นของขอบนาฬิกามีพัลส์จำนวนมากโดยมีเงื่อนไขว่านาฬิกามีความเสถียรในระดับที่ถูกต้องและมีข้อ จำกัด เวลาในการตั้งค่า พัลต์ runt แรกและเวลาพักและข้อ จำกัด เกี่ยวกับเวลาของนาฬิกาที่วัดจากเวลาที่พัลส์นาฬิกาทำงานอย่างเสถียร พฤติกรรมของเอาต์พุตฟล็อปฟล็อปจะไม่ถูกกำหนดในช่วงเวลาที่นาฬิกาไม่เสถียร แต่จะถูกกำหนดหลังจากที่นาฬิกามีเสถียรภาพ โมดูล double-xor-double-flop จะเพิ่มข้อ จำกัด เรื่องเวลาเพิ่มเติมที่ขอบนาฬิกาใด ๆ ที่จะเปลี่ยนเอาต์พุตจะต้องมีระยะห่างที่ปลอดภัยจากขอบนาฬิกาอื่น ๆ ซึ่งอาจทำเช่นนั้น ล้มเหลวในการตอบสนองข้อ จำกัด ดังกล่าวโดยมีสามขอบนาฬิกาอย่างต่อเนื่องอย่างใกล้ชิดในขณะที่อินพุทไม่ตรงกับเอาท์พุทสามารถออกจากการส่งออกในสถานะไม่แน่นอนหรือ metastable (โปรดทราบว่าสถานการณ์ที่เกี่ยวข้องกับจำนวนแม้แต่ขอบ เนื่องจากสถานการณ์ดังกล่าวไม่เกี่ยวข้องกับสิ่งใดนอกจากพัลต์ runt; เคสสามขอบ (หรือกรณีเลขคี่อื่น ๆ ที่มากกว่าหนึ่ง) มีความกังวลเพราะจะมีพัลส์ที่ใช้ได้หลังจากพัลส์ runt

การออกแบบวงจรทางเลือกจะต้องมีสอง flip flops ดังกล่าว แต่ป้อนผลลัพธ์ของพวกเขาเป็น multiplexer วงจรนี้จะไม่ถูกโยนลงไปในสถานะที่ไม่ดีโดย runt พัลส์และข้อ จำกัด การตอกบัตรของมันจะเหมือนกับ latches ต้นแบบ แต่มันจะมีข้อเสียที่เอาต์พุตที่สูงและควรอยู่ (หรือต่ำและควรอยู่ในระดับต่ำ ) ดังนั้นอาจผิดพลาดสั้น ๆ บนขอบนาฬิกา ในบางวงจรที่ไม่สำคัญ แต่ในบางวงจรมันจะ

อาจเป็นไปได้สำหรับเครื่องมือการสังเคราะห์เชิงตรรกะที่จะใช้ flip-flop สองด้านโดยอัตโนมัติโดยการวิเคราะห์ว่าข้อ จำกัด ด้านเวลาที่ระบุไว้มีความสำคัญ แต่การทำเช่นนั้นจะค่อนข้างยาก นอกจากนี้ยังจะเพิ่มความเสี่ยงที่การเปลี่ยนแปลงเล็กน้อยในการออกแบบอาจทำให้เกิดการเปลี่ยนแปลงครั้งใหญ่ในการนำไปใช้และทำให้เกิดการเปลี่ยนแปลงที่สำคัญและไม่คาดคิดในพฤติกรรม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.