|
Как уменьшить объем проекта?, по количеству логических ячеек |
|
|
|
Jul 30 2010, 09:52
|

Участник

Группа: Участник
Сообщений: 43
Регистрация: 2-03-10
Из: С.-Пб.
Пользователь №: 55 772

|
Всё, проблемы решены. Нашел и протестировал BIN-2-BCD на 16 разрядов Binary. Занимает примерно 300 Logic cells работает просто замечательно, намного удобнее в использовании чем на счетчиках. На весь проект ушло 1200 cells
BIN-2-BCD - AHDL: ***************************************** SUBDESIGN bin2dec ( DATA[15..0] : INPUT; DIG5[3..0],DIG4[3..0],DIG3[3..0],DIG2[3..0],DIG1[3..0] : OUTPUT; ) VARIABLE DATA_A[15..0],DATA_B[15..0],DATA_C[15..0],DATA_D[15..0] : NODE; BEGIN IF DATA[]>=60000 THEN DIG5[]=6; DATA_A[]=DATA[]-60000; ELSIF DATA[]>=50000 THEN DIG5[]=5; DATA_A[]=DATA[]-50000; ELSIF DATA[]>=40000 THEN DIG5[]=4; DATA_A[]=DATA[]-40000; ELSIF DATA[]>=30000 THEN DIG5[]=3; DATA_A[]=DATA[]-30000; ELSIF DATA[]>=20000 THEN DIG5[]=2; DATA_A[]=DATA[]-20000; ELSIF DATA[]>=10000 THEN DIG5[]=1; DATA_A[]=DATA[]-10000; ELSE DIG5[]=0; DATA_A[]=DATA[]; END IF;
IF DATA_A[]>=9000 THEN DIG4[]=9; DATA_B[]=DATA_A[]-9000; ELSIF DATA_A[]>=8000 THEN DIG4[]=8; DATA_B[]=DATA_A[]-8000; ELSIF DATA_A[]>=7000 THEN DIG4[]=7; DATA_B[]=DATA_A[]-7000; ELSIF DATA_A[]>=6000 THEN DIG4[]=6; DATA_B[]=DATA_A[]-6000; ELSIF DATA_A[]>=5000 THEN DIG4[]=5; DATA_B[]=DATA_A[]-5000; ELSIF DATA_A[]>=4000 THEN DIG4[]=4; DATA_B[]=DATA_A[]-4000; ELSIF DATA_A[]>=3000 THEN DIG4[]=3; DATA_B[]=DATA_A[]-3000; ELSIF DATA_A[]>=2000 THEN DIG4[]=2; DATA_B[]=DATA_A[]-2000; ELSIF DATA_A[]>=1000 THEN DIG4[]=1; DATA_B[]=DATA_A[]-1000; ELSE DIG4[]=0; DATA_B[]=DATA_A[]; END IF;
IF DATA_B[]>=900 THEN DIG3[]=9; DATA_C[]=DATA_B[]-900; ELSIF DATA_B[]>=800 THEN DIG3[]=8; DATA_C[]=DATA_B[]-800; ELSIF DATA_B[]>=700 THEN DIG3[]=7; DATA_C[]=DATA_B[]-700; ELSIF DATA_B[]>=600 THEN DIG3[]=6; DATA_C[]=DATA_B[]-600; ELSIF DATA_B[]>=500 THEN DIG3[]=5; DATA_C[]=DATA_B[]-500; ELSIF DATA_B[]>=400 THEN DIG3[]=4; DATA_C[]=DATA_B[]-400; ELSIF DATA_B[]>=300 THEN DIG3[]=3; DATA_C[]=DATA_B[]-300; ELSIF DATA_B[]>=200 THEN DIG3[]=2; DATA_C[]=DATA_B[]-200; ELSIF DATA_B[]>=100 THEN DIG3[]=1; DATA_C[]=DATA_B[]-100; ELSE DIG3[]=0; DATA_C[]=DATA_B[]; END IF;
IF DATA_C[]>90 THEN DIG2[]=9; DATA_D[]=DATA_C[]-90; ELSIF DATA_C[]>80 THEN DIG2[]=8; DATA_D[]=DATA_C[]-80; ELSIF DATA_C[]>70 THEN DIG2[]=7; DATA_D[]=DATA_C[]-70; ELSIF DATA_C[]>60 THEN DIG2[]=6; DATA_D[]=DATA_C[]-60; ELSIF DATA_C[]>50 THEN DIG2[]=5; DATA_D[]=DATA_C[]-50; ELSIF DATA_C[]>40 THEN DIG2[]=4; DATA_D[]=DATA_C[]-40; ELSIF DATA_C[]>30 THEN DIG2[]=3; DATA_D[]=DATA_C[]-30; ELSIF DATA_C[]>20 THEN DIG2[]=2; DATA_D[]=DATA_C[]-20; ELSIF DATA_C[]>10 THEN DIG2[]=1; DATA_D[]=DATA_C[]-10; ELSE DIG2[]=0; DATA_D[]=DATA_C[]; END IF; DIG1[]=DATA_D[3..0]; END; ***************************************
|
|
|
|
|
Jul 30 2010, 10:19
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(Docent86 @ Jul 29 2010, 23:06)  Цитата aD0:=aD rem 10; aD:=(aD-aD0)/10; --а такое преобразование можно и в одну функцию записать Деление на 10 не будет реализовано. Также желательно дополнительно ввести переменную, которая запоминала разность, а потом уже производить деление. Вы проект делаете для синтеза или только для моделирования? PS Mой совет почитайте мат. часть
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|