سيأخذك محرر Downcodes إلى فهم طرق كتابة كود Verilog واختبار المحاكاة لسجل الإزاحة المكون من ثمانية بتات والمدمج في الإخراج التسلسلي. توضح هذه المقالة بالتفصيل كيفية تصميم سجل إزاحة ثماني بتات مع التحميل المتوازي والإخراج التسلسلي، بما في ذلك تعريف الوحدة والسجل الداخلي والتصميم المنطقي وتنفيذ منطق التحكم وكتابة وحدات المحاكاة. من خلال الخطوات الواضحة ونماذج الأكواد، يساعدك هذا على فهم وإتقان تطبيق Verilog HDL في تصميم الدوائر الرقمية، وأخيرًا تحقيق سجل إزاحة ثماني بتات يعمل بكامل طاقته.
إن سجل الإزاحة المتوازي والتسلسلي ذو ثمانية بتات هو سجل يمكنه تحميل البيانات بالتوازي وإخراج البيانات بشكل تسلسلي. لكتابة كود Verilog لهذا النوع من التسجيل، يمكنك تحديد عملية يتم تشغيلها على حافة الساعة، واستخدام متغير تسجيل بعرض 8 بت لحفظ الحالة، وتحديد إشارات التحكم للتحكم في الحمل المتوازي والإخراج التسلسلي. عند كتابة التعليمات البرمجية، يجب أن تؤخذ أوضاع التشغيل المختلفة في الاعتبار ويجب توفير واجهات التحكم والبيانات المناسبة.
فيما يلي وصف تفصيلي لكيفية تصميم وظيفة التحميل المتوازي:
لتنفيذ وظيفة التحميل المتوازي، يمكنك تحديد إشارة تحكم، مثل الحمل. عندما يكون الحمل عالي المستوى، يتم تحديث حالة السجل على الفور بناءً على البيانات المتوازية في نهاية الإدخال، وليس من خلال إدخال التسلسل. في كود Verilog، يمكن تنفيذ هذا المنطق في كتلة الساعة التي يتم تشغيلها دائمًا. من خلال الكشف عن إشارة التحميل، يمكن تحديد ما إذا كان سيتم تحميل البيانات المتوازية المتوفرة خارجيًا في السجل أو التبديل بناءً على الإدخال التسلسلي.
الوحدة النمطية ShiftRegister_8bit(
سلك الإدخال clk,
سلك الإدخال أولًا,
تحميل سلك الإدخال,
سلك الإدخال serial_in،
سلك الإدخال [7:0] بالتوازي،
تسجيل الإخراج [7:0] data_out
);
ريج [7:0] Shift_reg؛
دائمًا @(posege clk أو posege rst) تبدأ
إذا (أولا) تبدأ
Shift_reg <= 8'b0;
data_out <= 8'b0;
نهاية إذا بدأ (التحميل).
Shift_reg <= Parallel_in؛
نهاية أخرى تبدأ
Shift_reg <= Shift_reg << 1;
Shift_reg[0] <= serial_in; // تدخل بيانات الإدخال التسلسلية بأقل بت
نهاية
نهاية
دائما @(*) تبدأ
data_out = Shift_reg; // تحديث بيانات الإخراج دائمًا
نهاية
في الكتلة المذكورة أعلاه دائمًا، تتم تهيئة السجل عن طريق الكشف عن إشارة إعادة الضبط أولاً، ويتم استخدام إشارة الحمل للتحكم في إجراء التحميل المتوازي أو النقل التسلسلي. في عملية التحول التسلسلي، بالإضافة إلى تحويل السجل بأكمله إلى اليسار لتحقيق حركة بتات البيانات، يجب أيضًا قبول إدخال تسلسلي جديد من خلال إشارة serial_in.
وحدة ShiftRegister_8bit_tb؛
// منفذ الإدخال
ريج clk_tb؛
ريج rst_tb؛
ريج Load_tb;
ريج serial_in_tb؛
ريج [7:0] موازي_in_tb؛
// منفذ الإخراج
سلك [7:0] data_out_tb؛
// إنشاء مثيل للوحدة المراد اختبارها
ShiftRegister_8bit uut (
.clk(clk_tb)،
.rst(rst_tb)،
.تحميل(load_tb),
.serial_in(serial_in_tb)،
.parallel_in(parallel_in_tb),
.data_out(data_out_tb)
);
// توليد إشارة الساعة
البداية الأولية
clk_tb = 0;
Forever #10 clk_tb = ~clk_tb; // إنشاء إشارة ساعة بفترة 20 وحدة زمنية
نهاية
// اختبار تسلسل التحفيز
البداية الأولية
// تهيئة الإشارة
rst_tb = 1; serial_in_tb = 0;
#25 rst_tb = 0; // حرر إشارة إعادة التعيين
#20load_tb = 1; Parallel_in_tb = 8'b10101010; // تحميل بيانات الاختبار بالتوازي
#20load_tb = 0; // قم بإيقاف التحميل المتوازي وبدء النقل التسلسلي
serial_in_tb = 1; // ابدأ بيانات الإدخال التسلسلية ولاحظ الإخراج
#(8 * 20) serial_in_tb = 0; // أدخل البيانات التسلسلية لدورات ساعة متعددة وتحقق من الإخراج
// اكتمل الاختبار، قم بإعادة التعيين
#40 rst_tb = 1;
#20 rst_tb = 0;
نهاية
com.endmodule
في وحدة المحاكاة، يتم إنشاء إشارة الساعة أولاً لتشغيل سجل الإزاحة بأكمله. بعد ذلك، تتم محاكاة المدخلات الخارجية عن طريق تغيير قيمة حافز الاختبار عند نقطة زمنية محددة، مثل إشارة إعادة الضبط الأولى، وإشارة التحكم في الحمل المتوازي للحمل، وإشارة الإدخال التسلسلي serial_in. أثناء المحاكاة، تحقق مما إذا كانت التغييرات في إخراج data_out تتوافق مع السلوك المتوقع لسجل التحول في ظل إثارات إشارة مختلفة. تحقق من الصحة الوظيفية للسجلات من خلال مراقبة أشكال موجية المحاكاة أو سجلات المحاكاة.
لتلخيص ذلك، يعد تصميم كود Verilog المعقول واختبار التحقق من الحقائق خطوات أساسية لضمان التشغيل الصحيح لسجل الإزاحة المكون من ثمانية بتات المتوازي والمتسلسل للخارج.
س: 1. كيف تتم كتابة وتنفيذ كود Verilog الخاص بسجل التحول ذو الثمانية بتات؟ ج: لكتابة وتنفيذ كود Verilog لسجل إزاحة ثماني بتات، عليك اتباع الخطوات التالية:
استخدم لغة Verilog لكتابة رمز وحدة تسجيل التحول وتحديد منافذ الإدخال والإخراج. اكتب رمز testbench لاختبار المحاكاة لوحدة تسجيل التحول. استخدم أداة محاكاة Verilog، مثل ModelSim أو Vivado، لتحميل وتجميع ملفات التصميم وملفات الاختبار. قم بتشغيل المحاكاة، ولاحظ مخرجات سجل التحول، وقم بإجراء تحليل الموجي للتحقق من وظائفه.س: 2. كيف يمكن محاكاة واختبار كود Verilog الخاص بسجل الإزاحة المكون من ثمانية بتات؟ ج: لإجراء اختبار محاكاة كود Verilog لسجل إزاحة مكون من ثمانية بتات، اتبع الخطوات التالية:
اكتب تعليمات برمجية للاختبار، بما في ذلك متجهات الاختبار التي تقوم بتعيين قيم لإشارات الإدخال لوحدة تسجيل التحول، والبيانات التي تتحقق من نتائج الإخراج. في كود testbench، استخدم الأمر $monitor أو $display في Verilog لعرض قيم إشارات الإدخال والإخراج للوحدة في الوقت الفعلي. أثناء المحاكاة، قم بتوليد إشارات الساعة المناسبة للتحكم في تشغيل سجل التحول ومراقبة نتائج الإخراج الخاصة به. قم بتشغيل المحاكاة ولاحظ وحلل شكل موجة المحاكاة للتحقق من أن سجل التحول يعمل بشكل صحيح.س: 3. هل هناك أي أداة محاكاة من Verilog يمكنك التوصية بها لإجراء محاكاة كود Verilog لسجل التحول ذي الثمانية بتات؟ ج: عند إجراء محاكاة كود Verilog لسجل إزاحة ثماني بتات، هناك العديد من أدوات محاكاة Verilog الشائعة للاختيار من بينها، بما في ذلك ModelSim وVivado وISE وQuartus وما إلى ذلك.
ModelSim هي أداة محاكاة Verilog شائعة الاستخدام توفر وظائف محاكاة وتصحيح قوية ويمكن استخدامها لإجراء اختبار محاكاة لكود Verilog. Vivado عبارة عن مجموعة أدوات شاملة تم تطويرها بواسطة Xilinx، والتي تتضمن أيضًا وظائف محاكاة ومناسبة لتنفيذ اختبارات محاكاة كود Verilog. ISE وQuartus عبارة عن مجموعة أدوات شاملة لأجهزة Xilinx وAltera FPGA، كما أنها توفر وظائف محاكاة يمكن استخدامها لإجراء اختبار محاكاة كود Verilog. عند اختيار أدوات محاكاة Verilog، يمكنك الاختيار بناءً على التفضيلات الشخصية واحتياجات المشروع، واتخاذ القرارات بناءً على خصائص كل منها.آمل أن تساعدك هذه المقالة على فهم وإتقان كتابة أكواد Verilog وطرق اختبار المحاكاة بشكل أفضل لسجلات التحول ذات ثمانية بتات. إذا كان لديك أي أسئلة، فلا تتردد في طرحها.