จริงๆแล้วมีการออกแบบสามประเภท
- combinatorial ไม่มีนาฬิกาและไม่มีเส้นทางป้อนกลับและระบบไม่มี "หน่วยความจำ" เมื่อหนึ่งหรือมากกว่าหนึ่งอินพุตเปลี่ยนแปลงการเปลี่ยนแปลงระลอกแม้ว่าตรรกะ หลังจากเวลาผ่านไปเอาต์พุตจะตกลงสู่สถานะใหม่ซึ่งจะคงอยู่จนกว่าอินพุตจะเปลี่ยนอีกครั้ง
- ลำดับการซิงโครนัส ระบบถูกสร้างขึ้นจากการลงทะเบียนและบล็อกของ combinatorial ตรรกะการลงทะเบียนจะโอเวอร์คล็อกด้วยนาฬิกาขนาดเล็ก (มักจะ 1) หากมีนาฬิกาหลายเรือนอาจต้องมีการคิดราคาพิเศษสำหรับสัญญาณที่ส่งจากโดเมนนาฬิกาหนึ่งไปยังอีก
- ลำดับแบบอะซิงโครนัส มีเส้นทางป้อนกลับ, ล็อค, รีจิสเตอร์หรือองค์ประกอบอื่น ๆ ที่ให้ความทรงจำการออกแบบของเหตุการณ์ที่ผ่านมาและไม่ได้รับการตอกบัตรโดยเส้นนาฬิกาที่วิเคราะห์ได้ง่าย
โดยทั่วไปเมื่อทำการสังเคราะห์ / การเพิ่มประสิทธิภาพตรรกะเชิง combinatorial เครื่องมือจะถือว่าสิ่งที่สำคัญคือผลสุดท้ายคืออะไรและเวลาสูงสุดที่จำเป็นในการตัดสินผลนั้น
คุณสามารถสร้างการออกแบบที่ผสมผสานอย่างหมดจดและจะได้ผลลัพธ์ที่ถูกต้อง ผลลัพธ์อาจเปลี่ยนแปลงในลำดับใดก็ได้และอาจเปลี่ยนแปลงหลายครั้งก่อนถึงค่าสุดท้าย การออกแบบดังกล่าวสิ้นเปลืองทรัพยากรทางตรรกะอย่างมาก องค์ประกอบเชิงตรรกะส่วนใหญ่จะใช้เวลาส่วนใหญ่นั่งนิ่ง ๆ ในระบบต่อเนื่องคุณอาจนำองค์ประกอบเหล่านั้นกลับมาใช้ใหม่เพื่อประมวลผลหลายรายการข้อมูล
ในระบบแบบซิงโครนัสตามลำดับสิ่งที่สำคัญคือเอาต์พุตของบล็อก combinatorial จะถูกตัดสินให้อยู่ในสถานะที่ถูกต้องเมื่อมีการตอกบัตรลงในฟลิปฟล็อปถัดไป มันไม่สำคัญว่าสิ่งที่พวกเขาจะเปลี่ยนลำดับหรือไม่ว่าพวกเขาจะบกพร่องไปตลอดทาง อีกครั้งเครื่องมือที่สามารถเปลี่ยนสิ่งนี้ให้กลายเป็นตรรกะที่ทำให้นาฬิกาช้าพอที่จะให้คำตอบที่ถูกต้อง (และพวกเขาสามารถบอกคุณได้ว่านาฬิกาที่คุณต้องการใช้นั้นช้าพอหรือไม่)
ในระบบลำดับแบบอะซิงโครนัสสมมติฐานเหล่านั้นออกไปนอกหน้าต่าง ข้อบกพร่องอาจเป็นเรื่องสำคัญลำดับของการเปลี่ยนแปลงเอาต์พุตอาจมีความสำคัญ ทั้งเครื่องมือและ FPGA เองออกแบบมาเพื่อการออกแบบแบบซิงโครนัส มีการถกเถียงกันมากมาย (การออกแบบ FPGA ของ Google asynchrous ถ้าคุณต้องการทราบข้อมูลเพิ่มเติม) เกี่ยวกับความเป็นไปได้ของการนำระบบ asynchrnous มาใช้บน FPGA มาตรฐานหรือแบบที่ออกแบบมาพิเศษ