fpga 1

در جلسه ی قبل برنامه ای برای چشمک زدن یکی از ledهاي روي برد نوشتيم.

با synthesizeكردن برنامه در ISE متوجه شديم،براي begin از end استفاده نكرديم!!بنابراين بايد اين error رفع شود.

بعد از رفع خطاي synthesize برنامه رو روي برد اجرا كرديم،چراغ فقط روشن ماند و چشمك نمي زد.مشكل برنامه در اين بود كه ما در انتخاب باارزش ترين بيت اشتباه كرده بوديم.

طرز كار برنامه به اين صورت بود كه متغير32بيتي a را يكي يكي افزايش مي داديم و ما مي خواستيم وقتي باارزش ترين بيت يك شد،چراغ روشن شود و تا صفر شدن آن روشن بماند و سپس خاموش شود. ولي با انتخاب [a[32 به عنوان خروجي ما درواقع كم ارزش ترين بيت را انتخاب كرده بوديم.وقتي برنامه شروع به اجرا مي كند،a از صفر به يك و سپس دو و سه و... افزايش مي يابد،يعني بيت كم ارزش با هركلاك از يك به صفر يا از صفر يه يك تبديل مي شود.بنابراين فركانس چشمك زدن بسيار بالا بود و قابل تشخيص توسط چشم نبود.

 اما بيت پرارزش بعد از 2به توان 31كلاك يك مي شود و تا 2به توان 31كلاك بعدي نيز يك مي ماند و وقتي a دوباره صفر شد بيت پرارزش نيز صفر مي شود.

كلاكي كه ما در اينجا استفاده مي كنيم،24مگاهرتز است،يعني فركانس آن بالاست و به اين صورت فركانس چشمك زن را كاهش داديم تا قابل مشاهده باشد. بنابراين به جاي [a[32 از [a[0 بايد استفاده كنيم.

اما بعد از اين تغيير نيز چراغ مدت زيادي خاموش بود و سپس مدت زيادي روشن مي ماند.درواقع فركانس ما بيش از حد كاهش يافته است.بنابراين به جاي انتخاب متغير 32بيتي از متغير25بيتي استفاده كرديم.بنابراين برنامه به اين شكل درمي آيد.(براي زيباترشدن از دو led استفاده كرديم،كه وقتي يكي خاموش است ديگري روشن و بالعكس)

module led(clk,out1,out2);
input clk;
output out1,out2;
reg out1,out2;
reg [0:25]a;
always @ (posedge clk)
begin
a=a+1;
out1=a[0];
out2=~out1;
end
endmodule

اين برنامه 100درصد جواب مي ده!

براي clkاز p77 و براي out1وout2 به ترتيب از p126و p134 استفاده كرديم.يعني از كلاك اصلي fpga و دو ledي يكسان بر روي sevensegmentها.

براي انتقال برنامه برروي برد بايد ابتدا ReRun All را اجرا كنيد و سپس فايل led.bit را از پوشه ي پروژه بر روي gxload.exe بكشيد و روي برد دانلود كنيد.

براي ديدن تمام پست هاي مربوط به fpga كليك كنيد.

/ 0 نظر / 3 بازدید