سؤال

أنا أحاول تصميم 4 بت الأفعى subtracter في verilog.هذا هو فقط الشيء الثاني أنا قد كتبت في verilog و أنا لا أعرف كل بناء الجملة الصحيح حتى الآن.هذا هو وحدة عندي حتى الآن:

module Question3(carryin, X, Y, Z, S, carryout, overflow);
    parameter n = 4;
    input carryin, Z;
    input [n-1:0]X, Y;
    output reg [n-1:0]S;
    output reg carryout, overflow;

    if(Z==0)
    begin
        Y = not(y) + 4'b0001;
    end

    always @(X, Y, carryin)
        begin
            {carryout, S} = X + Y + carryin;
            overflow = carryout ^ X[n-1]^Y[n-1]^S[n-1];
        end

endmodule

بلدي مترجم (xilinx 10.1), يقول "خطأ في بناء الجملة إذا قرب." لقد حاولت العديد من الطرق المختلفة لعمل التحويل ، بما في ذلك فقط باستخدام هذه الحالة أن يأخذ Y كحجة ، ثم يتحقق كل شيء ممكن 4-بت مجموعات ، وتحويلها الى المتمم.

Z هو ما يحدد ما إذا كانت الأفعى لا الطرح أو ذلك.إذا كان 0 يعني الطرح و أريد تحويل y أن المتمم ، ثم مجرد القيام العادية بالإضافة إلى ذلك.أنا متأكد من بقية الأفعى هو الصحيح, أنا فقط لا أعرف ما هو الخطأ مع الجزء الذي أحاول تحويل.

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

المحلول

reg [n-1:0] Y_compl;

always @( Z, Y, X, carryin ) begin
  Y_ = ( ~Y + 4'b0001 );
  if ( Z == 1'b0 ) begin
    {carryout, S} = X + Y_compl + carryin;
    overflow = carryout ^ X[n-1] ^ Y_compl[n-1] ^ S[n-1];
  end
  else begin
    {carryout, S} = X + Y + carryin;
    overflow = carryout ^ X[n-1] ^ Y[n-1] ^ S[n-1];
  end

end

عددا من النقاط الهامة.

  1. وضع إذا كان البيان داخل دائما كتلة.وليس دائما كتل, سوف تخلق حالة سباق في محاكاة.
  2. أنا إنشاء متغير جديد ، Y_ لأن استخدام Y, وهو إدخال تذكر على الجانب الأيسر من مهمة ربما نستنتج المزالج أو تفعل شيئا آخر سيئة عند تجميع.
  3. أقترح استخدام المعامل عكس المشغل '~' عكس Y بدلا من ذلك إذا كان 'لا' البدائية.تركيب أداة والمزيد من الحرية في تحسين التعليمات البرمجية الخاصة بك بهذه الطريقة.
  4. التحقق من النتائج الصحيحة, لقد كانت لحظة منذ ان بنيت الأفعى.

نصائح أخرى

وأنت تستخدم بأحرف صغيرة "ص" في "Y = لا (ذ) + 4'b0001."

وكما كنت تستخدم المزيد من الإضافات مما تحتاج إليه. X-Y هو نفس الشيء كما NOT (NOT (X) + Y).

ووضع بيان إذا ضمن كتلة و
الأولي http://www.asic-world.com/verilog/vbehave1.html

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