سلام
ببخشید عنوان رو نخواستم به فارسی بنویسم تا هنگام جستجو پیدا نشه.
یه پروژه کار میکنم که لازمه یه سیگنال enable یا همون flag رو از یه دامین با فرکانس کم تر به یه دامین با فرکانس بالا بفرستم. نمیدونم چطوری توضیح بدم، اگر منظورم رو نرسوندم، بگید تا بیشتر مشکل رو توضیح بدم.
یکم انترنت گشتم اینو دیدم.:
http://www.fpga4fun.com/CrossClockDomain2.html
راستش من vhdl کار میکنم و از verilog زیاد سر در نمیارم. میخوام همینو خودم با vhdl بنویسم.
چون چندبار برنامه رو از اول نوشتم ولی همش مشکل داشتند.
حالا میخوام اینو امتحان کنم.
میشه یکی توضیح بده این برنامه چجوری کار میکنه؟
یعنی مفهوم کاری که برنامه نویسش کرده چیه؟
چرا یه آرایه 3 تایی تعریف کرده؟ [2:0]
در always دوم چه چیزی به SyncA_clkB اختصاص داده میشه؟
ببخشید عنوان رو نخواستم به فارسی بنویسم تا هنگام جستجو پیدا نشه.
یه پروژه کار میکنم که لازمه یه سیگنال enable یا همون flag رو از یه دامین با فرکانس کم تر به یه دامین با فرکانس بالا بفرستم. نمیدونم چطوری توضیح بدم، اگر منظورم رو نرسوندم، بگید تا بیشتر مشکل رو توضیح بدم.
یکم انترنت گشتم اینو دیدم.:
http://www.fpga4fun.com/CrossClockDomain2.html
راستش من vhdl کار میکنم و از verilog زیاد سر در نمیارم. میخوام همینو خودم با vhdl بنویسم.
چون چندبار برنامه رو از اول نوشتم ولی همش مشکل داشتند.
حالا میخوام اینو امتحان کنم.
کد:
module Flag_CrossDomain( clkA, FlagIn_clkA, clkB, FlagOut_clkB); // clkA domain signals input clkA, FlagIn_clkA; // clkB domain signals input clkB; output FlagOut_clkB; reg FlagToggle_clkA; reg [2:0] SyncA_clkB; // this changes level when a flag is seen always @(posedge clkA) if(FlagIn_clkA) FlagToggle_clkA <= ~FlagToggle_clkA; // which can then be sync-ed to clkB always @(posedge clkB) SyncA_clkB <= {SyncA_clkB[1:0], FlagToggle_clkA}; // and recreate the flag from the level change assign FlagOut_clkB = (SyncA_clkB[2] ^ SyncA_clkB[1]); endmodule
یعنی مفهوم کاری که برنامه نویسش کرده چیه؟
چرا یه آرایه 3 تایی تعریف کرده؟ [2:0]
در always دوم چه چیزی به SyncA_clkB اختصاص داده میشه؟
دیدگاه