МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА: Проблема со схемой. Quartus 2

Проблема со схемой. Quartus 2 3 года 6 мес. назад #3448

  • Qordis
  • Qordis аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 2
  • Спасибо получено: 0
Уважаемые форумчане!
В этих делах я совсем новичок и не могу понять в чем проблема.
У меня есть схема с клавиатурой. Нажатия клавиш ловит (я его называю модуль 1) блок ввода. Вот его схема
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

В этом модуле 1 происходит преобразование входных сигналов в двоичный код, часть преобразованных сигналов уходит на 4-х разрядный семисегментник, часть уходит для дальнейших расчетов в модуль вычислений (модуль 2).
В модуле вычисления (модуль 2) происходит преобразование входного числа по некоторой функции, в данном случае число просто остаётся в том же виде:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


С этого модуля результат выходит на другой семисегментник, 8-ми разрядный.

Как только вставляю в отмеченное место код вида:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


У меня при нажатии на кнопку с цифрой на клавиатуре на первом семисегментнике появляется сразу 2 цифры, как только код уберу всё начинает вводиться нормально.
Загвоздка в том что модуль 1 в котором начинает происходить косяк не получает ничего от модуля 2:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


1) Объясните мне дураку, каким образом код в модуле 2 влияет на модуль 1, если модуль 1 из него ничего не получает.
2) как оптимизировать код который я пытаюсь вставить, он слишком требовательный к количеству логических элементов и каждый кусочек на каждый разряд кушает по 1000!
3) как мне избавиться от этих проблем с вводом сразу двух чисел?

p.s. Проверка работы осуществляется на специальном виртуальном учебном стенде UNIL.
Клавиатура, и семисегментники были зашиты в специальный шаблон, изменять их не рекомендуется.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Qordis.

Проблема со схемой. Quartus 2 3 года 6 мес. назад #3449

Без этого фрагмента, синтезатор весь ваш код выбрасывает, вот и получается мало занятых логических элементов.
Много могут занимать математические операции, такие как умножение/деление.
Как-то сложновато для начала. Вы светодиодом моргать пробовали?
Еще, если клок в вашем модуле нужен, то нужно писать "always @ (posedge clk)"
Спасибо сказали: Qordis

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проблема со схемой. Quartus 2 3 года 6 мес. назад #3450

  • Falcon
  • Falcon аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 31
  • Спасибо получено: 8
Зачем такое городить?
casex (C)
5'bx0000 : c=0;
5'bx0001 : c=1;
5'bx0010 : c=2;
5'bx0011 : c=3;
5'bx0100 : c=4;
5'bx0101 : c=5;
5'bx0110 : c=6;
5'bx0111 : c=7;
5'bx1000 : c=8;
5'bx1001 : c=9;
endcase
Вот по проще.
wire [3:0] c;
assign c = C[3:0];
Либо через синхронную логику.
reg [3:0] c;
always @(clk)
 c := C[3:0];
Так же не очень хороший код.
if (D[4]>0)
У вас всего один бит по этому запись будет проще.
if (D[4])
Вот этот код кушает львиную долю ресурсов.
x6= x % 10;
x=x-x6;
x=x/10;
Так как у вас тут происходит деление а это мат. функцию очень требовательна к ресурсам.
Спасибо сказали: Qordis

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Falcon.

Проблема со схемой. Quartus 2 3 года 6 мес. назад #3452

  • Qordis
  • Qordis аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 2
  • Спасибо получено: 0
Falcon, umarsohod спасибо за ответ!
На другом форуме вообще посчитали меня сумасшедшим и сказали что ЭТО не должно компилироваться. Только это мало того что компилировалось, но и правильно считало, за исключением того что при нажатии клавиши появлялось сразу две цифры.
До меня теперь дошло, что так много кушало элементов. Мне требовалось реализовать подсчет функции по ряду тейлора 1+2х+3х^2... но я хотел сделать решение которое позволяло бы вычислить любую функцию (х может быть с точкой), а не только эту. Однако в связи с тем что мы это делаем на шаблонах и менять ПЛИС не получится, а кол-во элементов явно перевалит за 8 тысяч, то я решил реализовать просто подсчет моего ряда на мегафункциях с отловом точки (хватило 1К элементов) следующим образом:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Так же пришлось добавлять перевод одного бинарного числа на 8 чисел по разрядам, очередной самопальный бредокод:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Он хоть и на коленках состряпан, но я думаю он вполне универсален для перевода бинарных чисел для 8 разрядного семисегментника (даже для числа 99999999 хватит 28 бит). А повысить разрядность числа до 28 можно одной мегафункцией умножения или простейшим самодельным модулем с двумя шинами.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Вроде работает, только ума не хватило гасить сегменты неиспользуемые.

Однако один вопрос всё же для меня не ясен, каким это образом модуль 2 влиял на модуль 1 если связь у них односторонняя?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
Время создания страницы: 0.182 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Обсуждаем Altera Quartus II Проблема со схемой. Quartus 2