PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : چرا بعضی از دستورات تو vhdl و verilog جواب نمیده



jonbakhsh
30-05-2010, 03:52
سلام خسته نباشید.
مدتی هست دارم با vhdl کار میکنم نمیدونم چرا تو دستور تقسیم و باقیمانده تقسیم مشکل داره
مثلا یک عدد به 2 تقسیم میشه ولی همون عدد به 10 تقسیم نمیشه و کامپایلر آی اس ای خطا
میگیره. متوجه شدم تو verilog هم همین مشکل هست. کسی میدونه مشکل کجاست؟؟؟
:x:x:x:x:x:x:xii998)ii998)ii998)ii998):(:(:(:(8O8O 8O8O8O

arsalan681
30-05-2010, 11:50
کد و برنامه ای رو که نوشتی اینجا بذار

jonbakhsh
30-05-2010, 12:24
کد و برنامه ای رو که نوشتی اینجا بذار

سلام آقا ارسلان
شما تو سایت ECA هم همین نوشتید بعد دیگه جواب ندادید

این لینک دانلودش

You can see links before reply

اینم برنامه به 2 تقسیم میشه و کامپایل میشه ولی به 10 نمیشه که نمیشه:x:x:x

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity segm is
Port ( clk : in STD_LOGIC;
sw : in STD_LOGIC;
segment : out STD_LOGIC_vector (3 downto 0);
output : out bit_vector (6 downto 0));
end segm;

architecture Behavioral of segm is
type x is array (9 downto 0) of bit_vector (6 downto 0);
signal a:x:=("1111110","0110000","1101101","1111001","0110011","1011011","1011111","1110000","1111111","1111011");
signal cant : std_logic_vector (1 downto 0);
signal y,d,s,h : integer range 0 downto 9 ;
signal l,t : integer;
begin

output <= a(y) when cant = "00" else
a(d) when cant = "01" else
a(s) when cant = "01" else
a(h) when cant = "01";


segment <= "0001" when cant = "00" else
"0010" when cant = "01" else
"0100" when cant = "10" else
"1000" when cant = "11";


process (clk)
begin
if rising_edge(clk)
then
cant <= cant + 1;

y <=l mod 10;
s <=l /10;
d <=l mod 10;
s <=l /10;
s <=l mod 10;
h <=l / 10;

end if;
end process;

process (sw )

begin

if rising_edge(sw)
then

l <= l + 1;
-- canter <= t;
end if;
end process;



end Behavioral;

arsalan681
30-05-2010, 14:35
دوتا مشکل پیدا کردم ولی بهتره بگی این کد قراره چیکار کنه
در ضمن تو اون سایت من سوالی از شما نپرسیدم دوستان دیگه ای بودن

jonbakhsh
31-05-2010, 00:31
این کد قراره یکان و دهگان یک عددی جدا کنه و روی سون سگمنت بریزه
مثلا اگه داخل یک متغیر ما عدد 12 داریم یک بار تقسیم به 10 میکنیم و یک بار باقیمانده تقسیم
به دست میاریم
اولی عدد سون سگمنت اول حساب میشه دومی عدد سون سگمنت دومی.
مشکل چیه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟:(:(:(:(:(:(:(:(:(

arsalan681
31-05-2010, 01:26
ظاهرا اشکال تو این دو خط زیر هست چون توی یک کلاک دو مقدار به یه سیگنال داده میشه که فکر کنم سنتز نمیشه.

s <=l /10;
s <=l mod 10;

jonbakhsh
31-05-2010, 02:13
حالاچه جوری میشه این مشکل بر طرف کرد
روش دیگه ای هست که این مشکل بر طرف بشه ؟؟
اصلا واسه اینکه عملیات تقسیم انجا م بشه کتابخانه ای باید
لود بشه یا کلا نمیشه ؟؟؟؟؟؟:cry::cry::(:(:(

arsalan681
31-05-2010, 11:35
دارم روش مشکل کار میکنم امیدوارم حل بشه:(
برای عملیات تقسیم کتابخانه خاصی نداریم ولی پکیجهایی هستند که میتونید از اونها استفاده کنید کافیه اروری که ise بهتون میده رو تو گوگل سرچ کنی این پکیجها رو میتونی پیدا کنی

arsalan681
01-06-2010, 13:23
اگر که مطمئن هستی دستور mod درست کار میکنه میتونی با case کد هر عدد رو پورت خروجی و روی سون سگمنت بریزی. من فکر کنم دستور mod فقط برای عددهای توان 2 درست کارمیکنه

jonbakhsh
01-06-2010, 23:46
دستت درد نکنه. حالا بازم فهمیدم که دیگه سراق تقسیم و باقیمانده تقسیم نرم و فکر یک کار دیگه بکنم
:wink:

wonderboy_mfy
24-06-2010, 13:37
FPGA تقسیم به توانهای دو رو به راحتی انجام میده (با شیفت به راست) اما اگر بخواهی تقسیم یک سیگنال (یا متغیر) به یک عدد غیر از این انجام بدی FPGA ابزارش رو نداره. چون همونطور که میدونین تقسیم کار مشکلیه. FPGA های حرفه ای مثل Virtex 4 و اینها قابلیت ضرب رو دارند.
برای کدی که میخواهی بنویسی از BCD استفاده کن تا لازم نباشه تقسیم به 10 کنی. فقط عددت رو به دو تا 4 بیتی تقسیم کن.