বাস সিঙ্ক্রোনাইজার সার্কিটের জন্য সময়সীমাবদ্ধতা


10

ঘড়ির ডোমেন জুড়ে প্রশস্ত নিবন্ধটি পাস করার জন্য আমি একটি বাস সিঙ্ক্রোনাইজার সার্কিট করেছি।

অ্যাসিনক্রোনাস রিসেট যুক্তি বাদ দিয়ে আমি একটি সরলীকৃত বিবরণ সরবরাহ করব।

ডেটা এক ঘড়িতে তৈরি করা হয়। আপডেটগুলি অনেকগুলি (কমপক্ষে এক ডজন) ঘড়ির কিনারা পৃথক করে:

PROCESS (src_clk)
BEGIN
   IF RISING_EDGE(clock) THEN
      IF computation_done THEN
          data <= computation;
          ready_spin <= NOT ready_spin;
      END IF;
   END IF;
END PROCESS;

টাটকা তথ্যের জন্য নিয়ন্ত্রণ সংকেত, যা এনআরজেডআই এনকোডেড (তাই বাসে একটি বৈধ শব্দ নিয়ন্ত্রণ সংকেতের পরিবর্তনের সাথে মিলে যায়)। নিয়ন্ত্রণ সিগন্যাল একটি সিঙ্ক্রোনাইজার হিসাবে অভিনয় করে একটি ডিএফএফ চেইনের মধ্য দিয়ে যায়।

PROCESS (dest_clk)
BEGIN
   IF RISING_EDGE(dest_clk) THEN
      ready_spin_q3 <= ready_spin_q2;
      ready_spin_q2 <= ready_spin_q1;
      ready_spin_q1 <= ready_spin;
   END IF;
END PROCESS;

সিঙ্ক্রোনাইজার সার্কিট একটি সংক্ষিপ্ত বিলম্বের সূচনা করে, যা ডেটা বাসের স্থিতিশীল হওয়ার জন্য প্রচুর সময় সরবরাহ করে; ডেটা বাসটি मेटाস্ট্যাবিলিটি হওয়ার ঝুঁকি ছাড়াই সরাসরি নমুনাযুক্ত:

PROCESS (dest_clk)
BEGIN
   IF RISING_EDGE(dest_clk) THEN
      IF ready_spin_q3 /= ready_spin_q2 THEN
         rx_data <= data;
      END IF;
   END IF;
END PROCESS;

এটি সংকলন করে, এবং একটি সাইক্লোন II এফপিজিএতে সংশ্লেষিত হলে ভাল কাজ করে। তবে টাইমকোয়েস্ট সেটআপ করে এবং সময় লঙ্ঘন ধরে রাখে, কারণ এটি সিঙ্ক্রোনাইজারকে সনাক্ত করে না। সবচেয়ে খারাপ, কোয়ার্টাস ম্যানুয়ালটি বলেছে

সবচেয়ে খারাপ স্লথ দেখায় এমন রাস্তাগুলি উন্নত করার দিকে মনোনিবেশ করুন। ফিটার সবচেয়ে খারাপ স্লথের সাথে পাথগুলিতে সবচেয়ে কঠোর পরিশ্রম করে। আপনি যদি এই পাথগুলি ঠিক করেন তবে ফিটার ডিজাইনের অন্যান্য ব্যর্থ সময়সীমার পাথগুলি উন্নত করতে সক্ষম হতে পারে।

সুতরাং আমি আমার প্রকল্পে সঠিক সময়সীমাবদ্ধতা যুক্ত করতে চাই যাতে কোয়ার্টাস তার নকশার অন্যান্য ক্ষেত্রগুলিতে ফিটার প্রচেষ্টা ব্যয় করতে পারে।

আমি নিশ্চিত যে set_multicycle_pathএটি যথাযথ এসডিসি (সাইনোপসিস ডিজাইন কনস্ট্রেন্ট) কমান্ড, যেহেতু ডেটা লাইনে গন্তব্য ঘড়ির একাধিক চক্র স্থিতিশীল হবে, তবে ক্লক ডোমেন ক্রসিংয়ের যুক্তি বর্ণনা করার জন্য এই আদেশটি ব্যবহার করে আমি কোনও সম্পূর্ণ উদাহরণ পাই না can't ।

আমি সিঙ্ক্রোনাইজারগুলির জন্য এসডিসির সময়সীমাবদ্ধতাগুলি লেখার জন্য কিছু গাইডেন্সের সত্যই প্রশংসা করব। যদি আপনি এই পদ্ধতির সাথে কোনও সমস্যা দেখেন তবে দয়া করে আমাকে এটিও জানান।


ঘড়ির বিশদ:

বাহ্যিক ঘড়ির জেনারেটর: দুটি চ্যানেল, রেফক্লিক = 20 মেগাহার্টজ, রেফক্লিক 2 = রেফক্ল্যাক / 2 (10 মেগাহার্জ এবং সম্পর্কিত)।

আল্টেরা পিএলএল: এসসিআর_সিএলকি = রিফ্ল্যাক * 9/5 = 36 মেগাহার্টজ

আল্টেরা পিএলএল: ডেসট_এলকি = রেফক্লিকে 2 * 10 = 100 মেগাহার্টজ

আমার কাছে 100 মেগাহার্জ এসসিআর_সিএলকি এবং 36 মেগাহার্টজ ডেস্ট_সিএলকে দিয়ে অন্য দিকে যাওয়ার ডেটা রয়েছে।


টিএল; ডিআর: উপরের কোডের জন্য সঠিক এসডিসির সময়সীমাবদ্ধতাগুলি কী কী?


1
প্রস্তাবিত এফপিজিএ ডিজাইনের সাইটে এটি আরও ভাল হবে তবে এখনও সেই প্রস্তাব বিটাতে পৌঁছায়নি।
বেন ভয়েগট

আপনি কি এসআরসি_সিএলকি এবং ডেসট_ক্লকের ঘড়ির সংজ্ঞা পোস্ট করতে পারবেন? এগুলি কি কোনও উপায়ে সম্পর্কিত (সমকালীন গুণক)? যদি তারা সম্পর্কযুক্ত ঘড়ি হয় তবে এই পরিস্থিতিতে সেট_ফালস_পথ ব্যবহার করা সাধারণ।
অ্যান্ডি

@ অ্যান্ডি: আমি কিছু বিবরণ যুক্ত করেছি। এই সাহায্য করার জন্য ধন্যবাদ।
বেন ভয়েগট

উত্তর:


9

কোয়ার্টাসের সাথে আমার অভিজ্ঞতা নেই, তাই এটিকে সাধারণ পরামর্শ হিসাবে বিবেচনা করুন।

ক্লক ডোমেনগুলির মধ্যে পাথগুলিতে কাজ করার সময়, সরঞ্জাম সরঞ্জামগুলি ঘড়িগুলি তাদের পিরিয়ডগুলির সর্বনিম্ন সাধারণ একাধিকতে প্রসারিত করে এবং প্রান্তের নিকটতম জোড়াটি নির্বাচন করে।

36 মেগাহার্জ ঘড়ি (27.777 এনএস) থেকে 100 মেগাহার্টজ ঘড়ির জন্য (10 এনএস) পাথের জন্য, যদি আমি আমার দ্রুত গণনা সঠিকভাবে করি, উত্থিত প্রান্তগুলির নিকটতম জোড় উত্স ঘড়ির 138.888 এনএস এবং গন্তব্য ঘড়িতে 140 এনএস হয়। এটি কার্যকরভাবে এই পাথগুলির জন্য 900 মেগাহার্টজ সীমাবদ্ধতা! রাউন্ডিংয়ের উপর নির্ভর করে (বা কোনও সম্পর্ক ছাড়াই থাকা ঘড়ির জন্য), এটি এর চেয়ে খারাপ হতে পারে।

এই কাঠামোর জন্য সীমাবদ্ধতা লেখার জন্য কমপক্ষে তিনটি উপায় রয়েছে। আমি ঘড়িগুলি কল করতে যাচ্ছি fast_clkএবং slow_clkযেমনটি আমি মনে করি এটি উদাহরণের জন্য আরও পরিষ্কার।

বিকল্প 1: এর সাথে সময় নিষ্ক্রিয় করুন set_false_path

সবচেয়ে সহজ সমাধান হ'ল set_false_pathঘড়ির মধ্যে সময় নিষ্ক্রিয় করার জন্য :

set_false_path -from [get_clocks fast_clk] -to [get_clocks slow_clk]
set_false_path -from [get_clocks slow_clk] -to [get_clocks fast_clk]

এটি কঠোরভাবে সঠিক নয়, যেহেতু সিঙ্ক্রোনাইজারকে সঠিকভাবে কাজ করার জন্য সময় প্রয়োজন রয়েছে। যদি শারীরিক বাস্তবায়ন ডেটা নিয়ন্ত্রণ সংকেতের তুলনায় খুব বেশি বিলম্ব করে, তবে সিঙ্ক্রোনাইজারটি কাজ করবে না। তবে, যেহেতু পথে কোনও যুক্তি নেই, তাই সময়সীমাবদ্ধতা লঙ্ঘিত হওয়ার সম্ভাবনা কম। set_false_pathসাধারণত এএসআইসি-তে এই ধরণের কাঠামোর জন্য ব্যবহৃত হয়, যেখানে কম সম্ভাবনার ব্যর্থতার জন্য ঝুঁকি ট্রেডফোরের প্রচেষ্টা এফপিজিএর চেয়ে বেশি সতর্ক is

বিকল্প 2: সীমাবদ্ধতাটি শিথিল করুন set_multicycle_path

আপনি নির্দিষ্ট পাথের জন্য অতিরিক্ত সময় অনুমতি দিতে পারেন set_multicycle_path। ঘনিষ্ঠভাবে সম্পর্কিত ঘড়িগুলি (যেমন 1 এক্স এবং 2 এক্স ঘড়িটি ইন্টারেক্টিভ) এর সাথে মাল্টিকেল পাথগুলি ব্যবহার করা বেশি সাধারণ, তবে সরঞ্জামটি যথেষ্টভাবে সমর্থন করলে এটি এখানে কাজ করবে।

set_multicycle_path 2 -from [get_clocks slow_clk] -to [get_clocks fast_clk] -end -setup
set_multicycle_path 1 -from [get_clocks slow_clk] -to [get_clocks fast_clk] -end -hold

সেটআপের জন্য ডিফল্ট প্রান্ত সম্পর্কটি একক চক্র, অর্থাৎ set_multicycle_path 1। এই কমান্ডগুলি -endসেটআপ পাথের জন্য শেষ পয়েন্টের ঘড়ির আরও একটি চক্রের অনুমতি দেয় । -holdএকটি এক নম্বর সেটআপ বাধ্যতা কম সঙ্গে সমন্বয় প্রায় সবসময় যখন বহু চক্র পাথ সেটিং, আরো নীচে দেখুন জন্য প্রয়োজন হয়।

অন্য দিকগুলিতে একইভাবে পথ সীমাবদ্ধ করতে (দ্রুত ঘড়ির এক সময়ের দ্বারা সীমাবদ্ধতা শিথিল করা), এতে পরিবর্তন -endকরুন -start:

set_multicycle_path 2 -from [get_clocks fast_clk] -to [get_clocks slow_clk] -start -setup
set_multicycle_path 1 -from [get_clocks fast_clk] -to [get_clocks slow_clk] -start -hold

বিকল্প 3: সরাসরি সাথে প্রয়োজনীয়তা নির্দিষ্ট করুন set_max_delay

এটি এর প্রভাবের সাথে একই set_multicycle_pathতবে প্রান্তের সম্পর্কগুলি এবং হোল্ড সীমাবদ্ধতার উপর প্রভাবের মধ্য দিয়ে চিন্তাভাবনা করে সংরক্ষণ করে।

set_max_delay 10 -from [get_clocks fast_clk] -to [get_clocks slow_clk]
set_max_delay 10 -from [get_clocks slow_clk] -to [get_clocks fast_clk]

আপনি set_min_delayহোল্ড চেকগুলির জন্য এটি যুক্ত করতে বা ডিফল্ট হোল্ড চেকটি জায়গায় রেখে দিতে চাইতে পারেন। set_false_path -holdআপনার সরঞ্জাম যদি এটি সমর্থন করে তবে আপনি হোল্ড চেকগুলি অক্ষম করতেও সক্ষম হতে পারেন।


মাল্টি-সাইকেল পাথের জন্য প্রান্ত নির্বাচনের বিশদ বিবরণ

প্রতিটি সেটআপ অ্যাডজাস্টমেন্টের সাথে জুটিবদ্ধ হোল্ড সমন্বয়টি বুঝতে, 3: 2 সম্পর্কের সাথে এই সাধারণ উদাহরণটি বিবেচনা করুন। প্রতিটি অঙ্ক একটি ক্রমবর্ধমান ঘড়ির প্রান্ত উপস্থাপন করে:

1     2     3
4   5   6   7

ডিফল্ট সেটআপ চেকটি 2 এবং 6 প্রান্ত ব্যবহার করে The

-endডিফল্ট সেটআপ সামঞ্জস্য করে এবং চেকগুলি মূলত যা ব্যবহার করা হয়েছিল তার পরে পরবর্তী প্রান্তটি ব্যবহার করার জন্য চেকগুলি ধরে রাখার সাথে 2 এর বহু-চক্র সীমাবদ্ধতা প্রয়োগ করে অর্থ সেটআপ চেক এখন 2 এবং 7 প্রান্ত ব্যবহার করে এবং হোল্ড চেকটি 1 এবং 5 প্রান্ত ব্যবহার করে একই ফ্রিকোয়েন্সিতে ঘড়িগুলি, এই সমন্বয়টি অর্থবোধ করে - প্রতিটি ডেটা লঞ্চ একটি ডেটা ক্যাপচারের সাথে মিলে যায় এবং ক্যাপচার প্রান্তটি একের পর এক সরিয়ে নেওয়া হয়, হোল্ড চেকটিও একে একে বেরিয়ে আসা উচিত। যদি কোনও শাখার একটি বৃহত্তর বিলম্ব হয় তবে এই ধরণের প্রতিবন্ধকতা একক ঘড়ির দুটি শাখার পক্ষে ধারণা তৈরি করতে পারে। তবে, এখানকার পরিস্থিতির জন্য, 1 এবং 5 প্রান্ত ব্যবহার করে একটি হোল্ড চেক আকাঙ্ক্ষিত নয়, কারণ এটি ঠিক করার একমাত্র উপায় হ'ল পথে বিলম্বের পুরো ঘড়ি চক্র যুক্ত করা।

1-এর একাধিক-চক্র হোল্ড সীমাবদ্ধতা (হোল্ডের জন্য, ডিফল্ট 0 হয়) একটি প্রান্ত দ্বারা পিছনের দিকে হোল্ড চেকগুলির জন্য গন্তব্য ঘড়ির uesd এর প্রান্তটি সামঞ্জস্য করে। 2-চক্র সেটআপ এমসিপি এবং 1-চক্র হোল্ড এমসিপি সীমাবদ্ধতার সংমিশ্রণের ফলে 2 এবং 7 প্রান্ত ব্যবহার করে একটি সেটআপ চেক এবং 1 এবং 4 প্রান্ত ব্যবহার করে একটি হোল্ড চেক হবে।


2

আল্টেরার উত্তর আমি জানি না, তবে শিলিনেক্স ল্যান্ডে আপনি সময়টির বিলম্বটি একটি ঘড়ির ডোমেন থেকে পরের দিকে সেট করতে পারেন। আপনাকে গণিতটি বের করতে হবে (এটি নকশা নির্ভর) তবে এটি সাধারণত দুটি ঘড়ির মধ্যে সবচেয়ে কম হয়। এই সময়টিকে কোনও দুটি সিগন্যালের (আপনার নিয়ন্ত্রণের সংকেত সহ) সর্বাধিক স্কিউ হিসাবে ভাবুন এবং আপনার সিঙ্ক সার্কিট যদি এটি মোকাবেলা করতে সক্ষম হয় তবে আপনি কাজ করতে পারেন।

সেট_মুলসাইকেল_পথটি ব্যবহার করার জন্য সঠিক জিনিস নয় কারণ উত্স এবং গন্তব্য উভয়ই একই ঘড়ির ডোমেনে থাকাকালীন ক্ষেত্রে এটি সাধারণত মোকাবেলা করতে পারে। আবার, আমি আমার জিলিনক্সের অভিজ্ঞতার ভিত্তিতেই স্থির করছি যাতে আপনার মাইলেজটি ভিন্ন হতে পারে।


1

আমি মনে করি সিঙ্ক্রোনাইজারের উপর সেট_ফালস_পথ রাখা নিরাপদ।

এছাড়াও আপনি কোয়ার্টাসকে সিঙ্ক্রোনাইজারটি সনাক্ত করতে সহায়তা করতে qsf এ "set_global_assignment -name SYNCHRONIZER_IDENTIFICATION AUTO" রাখতে পারেন।


দেখতে কেমন লাগবে? set_false_path -from ready_spin -to ready_spin_q2? আর set_false_path -from data -to rx_data?
বেন ভয়েগট

set_false_path -from src_clk -to ready_spinআমি নিশ্চিত নই যেহেতু আপনি এটি সিঙ্ক্রোনাইজ করছেন না তাই ভুয়া পথটি ডেটাতে রাখা উপযুক্ত।
fbo

0

আমার সন্দেহ হচ্ছে সমস্যাটি হ'ল আপনি যখনই জানেন যে বাস সিগন্যালগুলি যে স্থানে ল্যাচ করা হয়েছে তার কাছে কোথাও কোনও পরিবর্তন হবে না, সফ্টওয়্যারটি এটি জানে না। আপনার সেরা বেটটি সম্ভবত সফ্টওয়্যারটিকে স্পষ্টভাবে বলতে হবে যে আগমনকারী বাস সিগন্যালগুলি বাসের ঘড়ির সাথে সিঙ্ক্রোনাইজ করা হয়েছে এবং আপনি যে জায়গাগুলিতে ল্যাচ করেন ঠিক সেই জায়গার আগেই কোনও অপ্টিমাইজেশন অক্ষম করুন (একটি অপ্টিমাইজার তাত্ত্বিকভাবে আপনার সার্কিটটিকে সমতুল্য একটির সাথে প্রতিস্থাপন করতে পারে) যদি ইনপুটগুলি সত্যই সমকালীন হয় তবে আপনি যে সার্কিটটি আঁকেন সেটির ঘড়িচক্রের পরিবর্তে যদি সেগুলি লুপের জন্য ফেলে দেওয়া যেতে পারে)।


set_multicycle_pathসংশ্লেষক / সময় বিশ্লেষককে বলার উপায় কী হবে না যে উত্সের সংকেতগুলি কতবার পরিবর্তন করতে পারে? এবং আমি নিশ্চিত না যে আপনি "বাস ক্লক" বলতে কী বোঝায়, এখানে একটি সংকেত বাস রয়েছে যা ঘড়ির ডোমেনগুলি অতিক্রম করছে, তাই আপনি কোন বাসটিকে "বাস ক্লক" বলছেন? আমি মনে করি আপনি ঠিক বলেছেন যে আমি যখন আপডেট করছি না তখন সিন্থেসাইজার পিরিয়ডের সময় গ্লিটস পরিচয় করিয়ে দিলে मेटाস্টেটিবিলিটি হতে পারে data। আমার ধারণা আমি সেখানে বিশেষত ডিএফএফ ব্লকগুলি ইনস্ট্যান্ট করতে পারি :(
বেন ভয়েগট

@ বেনওয়েগ্ট: আমি মনে করি "সেট_মলটিকেল_পথ" সময় সংশোধনকারীকে প্রায়শই ব্যবহার করতে ব্যবহৃত হয় যে দুটি ল্যাচিং পয়েন্টের মধ্যে সম্মিলিত যুক্তির একটি শৃঙ্খলা এন (টিসি) -টিএস-টিপি (এন বার চক্রের সময় বিয়োগের নমুনা সময় বিয়োগ ল্যাচ) গ্রহণ করার অনুমতি দেওয়া উচিত প্রচারের সময়) কেবলমাত্র Tc-Ts-Th এর পরিবর্তে। আমি জানি না কীভাবে এই জাতীয় জিনিস বিভিন্ন ঘড়ির দ্বারা ল্যাচিংয়ের সাথে যোগাযোগ করে interact
সুপারক্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.