Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Программируемые логические схемы и их применение»

Простой пример с перевернутыми разрядами в симуляторе

Отправлено wukrly 24 января 2008 г. 15:45


Ниже приведен пример с умножителем, реализованным, как аппаратный умножитель в ИМС Циклон2. В состав умножителя включен конвеерный регистр, который продублирован выходным регистром DR. Попробуйте добиться, чтобы внутренний или выходной регистр проекта индицировались при группировке бит в правильном порядке относительно входных и выходных кодов.

КТО ЗНАЕТ, ПОМОГИТЕ. Кроме того, в установках симулятора есть опция "Group bus channels in simulation resultat", ставлю, убираю галочку - не помогает. Выходной и конвеерный регистры умножителя не группируется.

Основной файл MULTT.tdf
% Простой пример проверки работы умножителя altmult_add4
обратите внимание на инверсную индикацию результата умножителя
содержит:
- TDA, TDB) - входные регистры
- multA (altmult_add4) - умножитель 18*18 для умножения чисел,
умножители настроены для умножения целых чисел со знаком, т.е. два старших бита
результата умножителя - это знак.
- DR - выходной регистр %
INCLUDE "altmult_add4.inc";
SUBDESIGN MULTT
(
DA[17..0], DB[17..0], CLK : INPUT;
DR[35..0] : OUTPUT;
)
VARIABLE
TDA[17..0], TDB[17..0] : dff;
DR[35..0] : dff;
multA :altmult_add4;
BEGIN
% входные регистры %
TDA[].clk = CLK;
TDA[].d = DA[];
TDB[].clk = CLK;
TDB[].d = DB[];
% объявления для умножителя %
multA.aclr0 = gnd;
multA.clock0 = CLK;
multA.dataa_0[] = TDA[];
multA.datab_0[] = TDB[];
% объявления для выходов %
DR[].clk = CLK;
DR[].d = multA.result[35..0];

END;
файл altmult_add4.inc
FUNCTION altmult_add4
(
aclr0,
clock0,
dataa_0[17..0],
datab_0[17..0]
)
RETURNS (
result[35..0]
);
файл altmult_add4.tdf
INCLUDE "altmult_add.inc";
SUBDESIGN altmult_add4
(
aclr0 : INPUT = GND;
clock0 : INPUT = VCC;
dataa_0[17..0] : INPUT = GND;
datab_0[17..0] : INPUT = GND;
result[35..0] : OUTPUT;
)

VARIABLE

ALTMULT_ADD_component : altmult_add WITH (
ADDNSUB_MULTIPLIER_PIPELINE_ACLR1 = "ACLR0",
ADDNSUB_MULTIPLIER_PIPELINE_REGISTER1 = "CLOCK0",
ADDNSUB_MULTIPLIER_REGISTER1 = "UNREGISTERED",
DEDICATED_MULTIPLIER_CIRCUITRY = "AUTO",
INPUT_REGISTER_A0 = "UNREGISTERED",
INPUT_REGISTER_B0 = "UNREGISTERED",
INPUT_SOURCE_A0 = "DATAA",
INPUT_SOURCE_B0 = "DATAB",
INTENDED_DEVICE_FAMILY = "Cyclone II",
LPM_TYPE = "altmult_add",
MULTIPLIER1_DIRECTION = "ADD",
MULTIPLIER_ACLR0 = "ACLR0",
MULTIPLIER_REGISTER0 = "CLOCK0",
NUMBER_OF_MULTIPLIERS = 1,
OUTPUT_REGISTER = "UNREGISTERED",
PORT_ADDNSUB1 = "PORT_UNUSED",
PORT_SIGNA = "PORT_UNUSED",
PORT_SIGNB = "PORT_UNUSED",
REPRESENTATION_A = "SIGNED",
REPRESENTATION_B = "SIGNED",
SIGNED_PIPELINE_ACLR_A = "ACLR0",
SIGNED_PIPELINE_ACLR_B = "ACLR0",
SIGNED_PIPELINE_REGISTER_A = "CLOCK0",
SIGNED_PIPELINE_REGISTER_B = "CLOCK0",
SIGNED_REGISTER_A = "UNREGISTERED",
SIGNED_REGISTER_B = "UNREGISTERED",
WIDTH_A = 18,
WIDTH_B = 18,
WIDTH_RESULT = 36
);

BEGIN

result[35..0] = ALTMULT_ADD_component.result[35..0];
ALTMULT_ADD_component.dataa[17..0] = dataa_0[17..0];
ALTMULT_ADD_component.datab[17..0] = datab_0[17..0];
ALTMULT_ADD_component.aclr0 = aclr0;
ALTMULT_ADD_component.clock0 = clock0;
END;


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
увеличьте 2 вдвое:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru