سؤال

أنا بحاجة إلى تنفيذ 4 إلى 1 وظيفة في Veriog.الإدخال 4 بت عدد من 0-15.الإخراج هو بت واحد ، 0 أو 1.كل المدخلات يعطي الإخراج المختلفة و رسم الخرائط من المدخلات إلى المخرجات هو معروف ، ولكن المدخلات والمخرجات أنفسهم لا.أريد فكس بنجاح تحسين المدونة و أيضا قد تكون قصيرة/أنيق ممكن.حل بلدي حتى الآن:

wire [3:0] a;
wire b;
wire [15:0] c;

assign c = 16'b0100110010111010; //for example but could be any constant
assign b = c[a];

بعد إعلان ج قبيح أنا لا أعرف إذا كان فكس سوف تعترف K-map هناك.سيكون هذا العمل فضلا عن حالة البيان أو التعيين في الموصول العادي ؟

هل كانت مفيدة؟

المحلول

ما لديك هو بخير.بيان حالة من شأنه أيضا أن تعمل بشكل جيد على قدم المساواة.انها مجرد مسألة كيف معبرة كنت ترغب في أن تكون.

الحل الخاص بك, فهرسة, يعمل بشكل جيد إذا حدد ترميزات لا يكون لها أي معنى خاص (ذاكرة عنوان محدد على سبيل المثال).إذا حدد ترميزات بعض الخاصة المعنى الدلالي لك المصمم (و لا يوجد الكثير منهم) ، ثم انتقل مع بيان حالة و enums.

تخليق الحكمة, لا يهم أي واحد التي يمكنك استخدامها.أي لائقة تركيب الأداة سوف تنتج نفس النتيجة.

نصائح أخرى

أنا أتفق تماما مع دالاس.استخدام بيان حالة - يجعل نيتك أكثر وضوحا.تركيب أداة بناء على أنها البحث الجدول (اذا كان الموازية) و تحسين ما يمكن.

أيضا, أنا لا تقلق كثيرا حول حفظ الخاص بك RTL رمز قصير.أود أن تبادل لاطلاق النار من أجل الوضوح الأولى.تركيب أدوات ذكاء مما كنت أعتقد...

تفضيل بلدي - إذا كان من المنطقي بالنسبة لمشكلتك هو بيان حالة أن يجعل استخدام enums أو يعرف.أي شيء لجعل مراجعة التعليمات البرمجية الصيانة والتحقق أسهل.

عن مثل هذه الأمور ، RTL الوضوح ينسخ جميع بهامش واسع.SystemVerilog خاصة دائما كتلة توجيهات أوضح عندما تكون كتلة ينبغي أن يجمل إلى التوافقية المنطق ، المزالج ، أو يتخبط (و تركيب أداة يجب رمي خطأ إذا كنت قد كتبت RTL يتعارض مع ذلك (مثلا ، وليس بما في ذلك جميع الإشارات في حساسية قائمة دائما كتلة).أيضا أن ندرك أن الأداة سوف الأرجح محل أيا كان الترميز لديك مع أكثر الأجهزة كفاءة الترميز (الذي يقلل من التصميم الكلي) ، إلا إذا كان ترميز نفسها تنتشر إلى دبابيس الخاصة بك على أعلى مستوى الوحدة.

هذه النصيحة يذهب في العام،.جعل الخاص بك التعليمات البرمجية سهلة الفهم من قبل البشر ، وأنه من المحتمل أن يكون أكثر مفهومة تركيب الأداة أيضا تتيح له تحقيق المزيد من فعالية حرفيا آلاف من سنوات من خوارزميات البحث للتأثير على الخاص RTL.

يمكنك أيضا رمز باستخدام الثلاثي مشغلي إذا كنت تحب لكني أفضل شيء من هذا القبيل:

always_comb //or "always @*" if you don't have an SV-enabled tool flow
begin 
  case(a)
  begin
    4'b0000: b = 1'b0;
    4'b0001: b = 1'b1;
    ...
    4'b1111: b = 1'b0;
    //If you don't specify a "default" clause, your synthesis tool
    //Should scream at you if you didn't specify all cases,
    //Which is a good thing (tm)
  endcase //a
end //always

على ما يبدو أنا باستخدام رديء تركيب أداة.:-) أنا فقط تصنيعه كلا الإصدارين (فقط وحدة باستخدام نموذج يستند إلى مروحة الرافضة الأسلاك التأخير) و الفهرسة نسخة من السؤال أعطى أفضل توقيت منطقة النتائج من بيانات حالة.باستخدام سينوبسيس DC Z-2007.03-SP.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top