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

به اشتراک بگذارید:
آگاه‌سازی‌ها
پاک‌کردن همه

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

9 ارسال‌
2 کاربران
0 Reactions
1,450 نمایش‌
(@amirrezabhb)
ارسال‌: 5
Active Member
شروع کننده موضوع
 

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

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

 
ارسال‌شده : 5 تیر، 1399 11:57 ب.ظ
(@m12gsj)
ارسال‌: 26
Eminent Member
 

سلام
برای ساخت شیفت رجیستر باید یک سیگنال چندبیتی (به تعداد ظرفیت شیفت رجیستر) تعریف کنین و تو هر لبه بالارونده کلاک ورودی سریال رو به داخلش شیفت بدین .
به عنوان مثال یک شیفت رجیستر 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 میشه و به همین ترتیب تا انتها..

 
ارسال‌شده : 7 تیر، 1399 12:34 ب.ظ
(@amirrezabhb)
ارسال‌: 5
Active Member
شروع کننده موضوع
 

.

 
ارسال‌شده : 7 تیر، 1399 6:30 ب.ظ
(@amirrezabhb)
ارسال‌: 5
Active Member
شروع کننده موضوع
 

سلام مرسی از شما
شیفت رجیستر رو من اینطوری نوشتم کدشو :
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 بیتی رو پر کنه

 
ارسال‌شده : 7 تیر، 1399 6:31 ب.ظ
(@m12gsj)
ارسال‌: 26
Eminent Member
 

با فرض عرض بیت 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";

 
ارسال‌شده : 7 تیر، 1399 6:49 ب.ظ
(@amirrezabhb)
ارسال‌: 5
Active Member
شروع کننده موضوع
 

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

 
ارسال‌شده : 7 تیر، 1399 6:52 ب.ظ
(@m12gsj)
ارسال‌: 26
Eminent Member
 

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

 
ارسال‌شده : 7 تیر، 1399 6:58 ب.ظ
(@amirrezabhb)
ارسال‌: 5
Active Member
شروع کننده موضوع
 

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

 
ارسال‌شده : 7 تیر، 1399 7:04 ب.ظ
(@m12gsj)
ارسال‌: 26
Eminent Member
 

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

 
ارسال‌شده : 7 تیر، 1399 7:16 ب.ظ
به اشتراک بگذارید:
>