سؤال
فيما يلي بعض الكود من طرازات:
begin
tb_in_top = 0;
#5 tb_in_top = 4'b0000;#5 tb_in_top = 4'b0001;
#5 tb_in_top = 4'b0010;#5 tb_in_top = 4'b0011;
#5 tb_in_top = 4'b0100;#5 tb_in_top = 4'b0101;
#5 tb_in_top = 4'b0110;#5 tb_in_top = 4'b0111;
#5 tb_in_top = 4'b1000;#5 tb_in_top = 4'b1001;
#5 tb_in_top = 4'b1010;#5 tb_in_top = 4'b1011;
#5 tb_in_top = 4'b1100;#5 tb_in_top = 4'b1101;
#5 tb_in_top = 4'b1110;#5 tb_in_top = 4'b1111;
#100 $finish;
end
ماذا يمثل #5 و 100؟ هل أرقام الخطوط هذه؟ هل هناك شيء خاطئ في هذا الرمز؟
المحلول
إنه ليس رمز "Modelsim" أكثر من شيء ما هو رمز "Visual Studio". إنه Verilog.
ال #
الرمز المميز يدل على تأخير في النانو ثانية.
إذن ما يعنيه هذا الرمز هو:
- في t = 0 ، قم بتعيين tb_in_top على جميع 0.
- عند t = 5 ns ، قم بتعيين tb_in_top على القيمة الثنائية 4 بت 0000.
- عند t = 10 ns ، قم بتعيين tb_in_top على القيمة الثنائية 4 بت 0001.
- عند t = 15 ns ، قم بتعيين tb_in_top على القيمة الثنائية 4 بت 0010.
- عند t = 20 ns ، قم بتعيين tb_in_top على القيمة الثنائية 4 بت 0011.
(... استمر في العد ، زيادة TB_IN_TOP بمقدار 1 كل 5 نانو ثانية ...)
- عند t = 80 ns ، قم بتعيين tb_in_top على القيمة الثنائية 4 بت 1111.
- عند t = 180 ns ، إنهاء المحاكاة.
نعم ، Verilog لديه for
الحلقات ، ونعم ، يجب أن تكون واحدة.
إضافة
ال for
ستبدو الحلقة:
integer index;
reg [3:0] tb_in_top;
begin
tb_in_top = 0;
for(index = 0; index < 16; index = index + 1)
begin
#5 tb_in_top = tb_in_top + 4'h1;
end
#100 $finish;
end
أخيرًا ، لاحظ أن Verilog تستخدم #
لا يمكن تصنيع عملية التأخير الزمني للمنطق ؛ لا يمكن استخدامه إلا للمحاكاة.
لا تنتمي إلى StackOverflow