كيف يمكنك تنفيذ هذا المنطق الرقمي في Verilog أو VHDL؟
سؤال
لقد نشرت إجابة ل سؤال آخر لتدفق المكدس الأمر الذي يتطلب تنفيذ بعض المنطق الرقمي في Verilog أو VHDL بحيث يمكن برمجته في FPGA.
كيف يمكنك تنفيذ المخطط المنطقي التالي في Verilog أو VHDL أو أي لغة أخرى لوصف الأجهزة؟
تمثل المربعات المرقمة البتات الموجودة في الحقل.كل حقل لديه ك بت، وبت ل حاضِر و قناع سيتم توفيرها بواسطة نظام كمبيوتر (باستخدام سجل مغلق أو ما يعادله).البتات في التالي ستتم قراءتها مرة أخرى في نفس نظام الكمبيوتر.
نص بديل http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg
أنظر أيضا: سؤال تدفق المكدس هذا
المحلول
شيء من هذا القبيل؟
module scheduler
#( parameter K = 10 )
(
input wire [K:1] current,
input wire [K:1] mask,
output reg [K:1] next
);
reg [K:1] a;
reg [K:1] b;
//'[i+1]' busses that wrap.
// eg, for a 4-bit bus...
// a[i]: a[4],a[3],a[2],a[1] (obviously...)
// a_wrap[i]: a[1],a[4],a[3],a[2]
wire [K:1] mask_wrap = { mask[1],mask[K:2] };
wire [K:1] a_wrap = { a[1], a[K:2] };
wire [K:1] current_wrap = { current[1], current[K:2] };
integer i;
always @( * ) begin
for( i=1; i<=K; i=i+1 ) begin
a[i] = ~current_wrap[i] && b[i];
b[i] = a_wrap[i] || mask_wrap[i];
next[i] = ~a[i] && mask_wrap[i];
end
end
endmodule
(تنصل:مبطن ولكن غير مقلد)
لا تنتمي إلى StackOverflow