انجمن گفتگوی فراد اندیش

Notifications
Clear all

جمع کننده سریال  

  RSS
Amirreza Behboodi
(@amirrezabhb)
عضو فعال

میخواستم یک جمع کننده سریال با یک ورودی سریال طراحی کنم
تو قسمت شیفت رجیسترش یکم مشکل دارم
بعد تو کتاب موریس مانو ، ورودی سریال رو فقط یه یدونه از رجیسترا وصل کرده

ورودی شیفت رجیستر هارو رو چطور باید تعیین کنم کلا سر در نمیارم

نقل‌قول
ارسال‌شده : 06/04/1399 12:57 ق.ظ
m12gsj
(@m12gsj)
عضو برجسته

سلام
برای ساخت شیفت رجیستر باید یک سیگنال چندبیتی (به تعداد ظرفیت شیفت رجیستر) تعریف کنین و تو هر لبه بالارونده کلاک ورودی سریال رو به داخلش شیفت بدین .
به عنوان مثال یک شیفت رجیستر 4 بیتی:
if rising_edge(Clk)then
if(En = '1')then
ShiftReg <= ShiftReg(2 downto 0) & Input_A
end if
end if
علت یک ورودی بودن جمع کننده سریال تو کتاب موریس مانو به نظرم اینه که بشه با اون جمع کننده هرچندتا ورودی رو باهم جمع کرد، مثلا 4 تا عدد 4 بیتی رو جمع کنیم..البته به شرط اینکه حاصل جمع سرریز نداشته باشه..
کارکردش هم اینطوریه که شیفت رجیستر A در ابتدا صفر هست ، عدد اول جمع رو به داخل شیفت رجیستر B وارد می کنیم(به کمک ورودی سریال) ، بعد از 4 کلاک حاصل جمع عدد اول و صفر وارد A شده ، حالا عدد دوم رو وارد B میکنیم ، بعد از 4 کلاک حاصل جمع عدد اول و دوم وارد A میشه و به همین ترتیب تا انتها..

پاسخنقل‌قول
ارسال‌شده : 07/04/1399 1:34 ب.ظ
Amirreza Behboodi
(@amirrezabhb)
عضو فعال

.

پاسخنقل‌قول
ارسال‌شده : 07/04/1399 7:30 ب.ظ
Amirreza Behboodi
(@amirrezabhb)
عضو فعال

سلام مرسی از شما
شیفت رجیستر رو من اینطوری نوشتم کدشو :
signal sr : std_logic_vector(width-1 downto 0);
begin
process(clock)
begin
if(clock'event and clock='1')then
if(enable='1')then
for i in 1 to width-1 loop
sr(i)<=sr(i-1);
end loop;
s_out <= sr(sr'high);
end if;
end if;
end process;

الان مشکلم اینه نمیدونم چطوری با کلاک پالس ، ورودی سریال رو بزارم داخل شیفت رجیستر
یعنی هر دفعه ک کلاک لبه بالارونده بود بیاد ببینه ورودی چیه و اینطوری 2تا شیفت رجیستر 16 بیتی رو پر کنه

پاسخنقل‌قول
ارسال‌شده : 07/04/1399 7:31 ب.ظ
m12gsj
(@m12gsj)
عضو برجسته

با فرض عرض بیت 4 شما در اصل اینو نوشتین
sr(1) <= sr(0)
sr(2) <= sr(1)
sr(3) <= sr(2)
خب توی این توصیف شما برای sr(0) مقداری مشخص نکردین، بنابراین باید ورودی تک بیتی ماژول جمع کننده سریال رو به sr(0) ارجاع بدین، در کدتون بعد از if (enable) اینو بنویسین:
sr(0) <= SA_In
و SA_In ورودی سریال ماژول هست.
در ضمن نرم افزار سنتز به صورت پیش فرض این کد شما رو با یک SRL پیاده سازی میکنه(که SRL در یک Lut هست که در شرایطی میتونه شیفت رجیستر هم بشه)....اگه مئ نظرتون هست که این توصیف دقیقا با 4 عدد جیستر انجام بشه این تیکه کد رو قبل از begin و در محل تعریف سیگنال ها بنویسین:
attribute shreg_extract : string;
attribute shreg_extract of sr : signal is "no";

پاسخنقل‌قول
ارسال‌شده : 07/04/1399 7:49 ب.ظ
Amirreza Behboodi
(@amirrezabhb)
عضو فعال

اره اونو نوشته بودم اول ک ورودی به بیت اول شیفت رجیستر بره بعد اومدم تغییرش بدم پاک شد دیگه ننوشتم
یعنی به نظر شما اونی ک گفتم در حالت عادی انجام میشه ؟
که ورودی همزمان با کلاک تعیین بشه

پاسخنقل‌قول
ارسال‌شده : 07/04/1399 7:52 ب.ظ
m12gsj
(@m12gsj)
عضو برجسته

بله
تو لبه بالا رونده کلاک ورودی هرمقداری داشته باشه وارد شیفت رجیسترها میشه
فقط فرکانس ها رو هم درنظر بگیرین که یکی باشن مثلا اگه فرکانس کلاک 100 مگاهرتز است ورودی هم با همین فرکانس وارد بشه

پاسخنقل‌قول
ارسال‌شده : 07/04/1399 7:58 ب.ظ
Amirreza Behboodi
(@amirrezabhb)
عضو فعال

خیلی ممنون لطف کردید :-)
امکانش هست یه ایدی چیزی تو شبکه مجازی ب من بدید ؟

پاسخنقل‌قول
ارسال‌شده : 07/04/1399 8:04 ب.ظ
m12gsj
(@m12gsj)
عضو برجسته

خواهش می کنم
توی نرم افزار ایتا هستم
@Mdjavad

پاسخنقل‌قول
ارسال‌شده : 07/04/1399 8:16 ب.ظ
به اشتراک بگذارید:
>