ID บทความ: 000077812 ประเภทข้อมูล: การแก้ไขปัญหา การตรวจสอบครั้งล่าสุด: 11/09/2012

ทําไมสัญญาณ VHDL Tri-State บางตัวจึงถูกอนุมานอย่างไม่ถูกต้องในซอฟต์แวร์ Quartus II เวอร์ชั่น 8.1

สิ่งแวดล้อม

BUILT IN - ARTICLE INTRO SECOND COMPONENT
คำอธิบาย

มีปัญหาในซอฟต์แวร์ Quartus® II เวอร์ชั่น 8.1 ที่อาจทําให้สัญญาณ Tri-State VHDL ถูกอนุมานอย่างไม่ถูกต้องในฐานะตัวกล้ําสัญญาณแบบมัลติเพล็กซ์ หากเชื่อมต่อสัญญาณเข้ากับพินเอาต์พุตของอุปกรณ์ ผลการคอมไพล์อาจทําให้เกิดพินที่จะขับออกจากบอร์ดแทนที่จะทําหน้าที่เป็นเอาต์พุต Tri-State

ปัญหาซอฟต์แวร์เกิดขึ้นก็ต่อเมื่อหน่วยงานออกแบบ VHDL มีพอร์ตเอาต์พุตที่ไม่ได้ใช้โดยมีค่าเริ่มต้นที่รวม 'Z' อยู่ (กล่าวคือ พอร์ตเอาต์พุตมีการ 'Z' มอบหมาย tri-state ในการประกาศของหน่วยงาน แต่ไม่มีการมอบหมายอย่างชัดแจ้งไปยังสัญญาณในการออกแบบ) เมื่อปัญหาเกิดขึ้น ตรรกะ Tri-State ที่ป้อนเข้ามาใดๆ ที่อธิบายโดยคําแถลงพฤติกรรมในสถาปัตยกรรมที่ปิดล้อมจะถูกป้อนเข้าอย่างไม่ถูกต้องในฐานะตัวกล้ํา ปัญหาดังกล่าวจะถูกจํากัดไว้ที่ลําดับชั้นเดียวในสถาปัตยกรรมและไม่ใช่ลําดับชั้นที่เกิดขึ้นทันที เว้นแต่ว่าหน่วยงานอื่นๆ จะมีพอร์ตเอาต์พุตประเภทเดียวกันกับพอร์ตเอาต์พุตที่ไม่ได้ใช้โดยมีค่าเริ่มต้นรวม 'Z' โปรดดูตัวอย่างที่ตอนท้ายของโซลูชันนี้สําหรับการออกแบบขนาดเล็กที่แสดงให้เห็นถึงปัญหานี้

หากสัญญาณ Tri-State ที่ได้รับผลกระทบเป็นการเชื่อมต่อ Tri-State ภายใน การคาดว่าจะมีตัวคูณที่ป้อนเข้ามา เนื่องจากไม่มีตรรกะ tri-state ภายในในอุปกรณ์ Altera อย่างไรก็ตาม หากพอร์ตนิติบุคคลที่ Tri-state ป้อนพิน I/O บนอุปกรณ์ ลักษณะการทํางานของซอฟต์แวร์นี้อาจทําให้เกิดพินเอาต์พุตที่ไม่ได้ใช้เพื่อขับเคลื่อนไปยังบอร์ดแทนที่จะทําหน้าที่เป็นเอาต์พุต Tri-State ซึ่งอาจทําให้เกิดการคอนเทนต์สัญญาณในระบบ

ในการแก้ไขปัญหาและอนุมานพฤติกรรม tri-state ที่กําหนด ให้กําหนดพินเอาต์พุตที่ไม่ได้ใช้อย่างชัดแจ้งไปยังค่า Tri-State โดยใช้การกําหนดสัญญาณในการออกแบบ แทนที่จะพึ่งพาคําสั่งเริ่มต้น ตัวอย่างเช่น ใช้คําสั่งเช่น unused_output <= 'Z'; หรือ unused_output <= (others => 'Z');

มีโปรแกรมแก้ไขเพื่อแก้ไขปัญหานี้ในซอฟต์แวร์ Quartus II เวอร์ชั่น 8.1 ดาวน์โหลด Windows patch 0.34 หรือ Linux patch 0.34 แล้วติดตั้งโปรแกรมแก้ไขและคอมไพล์การออกแบบใหม่

ปัญหาซอฟต์แวร์นี้จะได้รับการแก้ไขในเวอร์ชันในอนาคตของซอฟต์แวร์ Quartus II

ต่อไปนี้เป็นการออกแบบตัวอย่างที่ได้รับผลกระทบจากปัญหานี้:

library ieee;
use ieee.std_logic_1164.all;
entity example is
  port (
    en : in std_logic;
    data : in std_logic;
    unused_output: out std_logic := 'Z';
    other_output : out std_logic);
end example;

architecture rtl of example is
begin  
   -- other_output should be tri-state but won't be tri-state due to this problem
   other_output <= data when en = '1' else 'Z';
end rtl;

หากต้องการอนุมานพฤติกรรม Tri-State ที่ถูกต้องสําหรับพินผลลัพธ์ทั้งสองในตัวอย่างการออกแบบด้านบนด้วยซอฟต์แวร์ Quartus II เวอร์ชั่น 8.1 ให้เพิ่มคําสั่งต่อไปนี้ในสถาปัตยกรรม:
   unused_output <= 'Z';

ผลิตภัณฑ์ที่เกี่ยวข้อง

บทความนี้จะนำไปใช้กับ 1 ผลิตภัณฑ์

อุปกรณ์ที่ตั้งโปรแกรมได้ Intel®

เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้