Форумы Modlabs.net: Минимум значения в поведении уст-ва - Форумы Modlabs.net

Перейти к содержимому

  • (2 Страниц)
  • +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Минимум значения в поведении уст-ва Устройство для реализации следующей ситуации. Имеется два 16-разрядных

#1 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 06 июня 2012 - 11:31

Представленное устройство для реализации следующей ситуации. Имеется два 16-разрядных регистра. Пользователь имеет в распоряжении четыре кнопки. Нажимая на первую или вторую,поль-тель уменьшает или увеличивает значение первого регистра на значение второго регистра. Нажимая на третью или четвёртую кнопки,- уменьшает или увеличивает значение второго регистра в 10 раз. Начальное значение второго регистра — 1, и оно не может опуститься ниже этого значения.

Общая схема реализована. Не достает только задать минимальное допустимое значение, которое было бы не меньше "1". Каким образом лучше реализовать (по примеру компаратор-мультиплексор нужного результата схема не получает)?
Изображение
Файл с общим решением:

Прикрепленные файлы


0

#2 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 06 июня 2012 - 13:26

Ситуацию в теме опишите. И схему картинкой.
0

#3 Пользователь офлайн   XSS 

  • 2fast2furious
  • PipPipPipPipPipPipPip
  • Группа: Team_MXS
  • Сообщений: 4 867
  • Регистрация: 17 марта 05

Отправлено 07 июня 2012 - 01:41

Загружать изображения можно здесь:
http://www.modlabs.n...ile/gallery_add
0

#4 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 03:51

Реализовывать, конечно, компаратором и мультиплексором. Для случая вычитания (сигнал вычитания назвал bt1) из регистра значения 10 получаем такую схему:

module calc(bt1, B);

input wire bt1;
output reg [15:0]  b=16'd77; // просто некоторое стартовое значение

always @(posedge bt1)
begin
  if(bt1)
  begin
    if(b >= 16'd11)
      b <= b - 16'd10;
	 else
      b <= 16'd1;
  end 
end

endmodule


Изображение

Если все не понятно, потом, когда будет время - нарисую в модельсиме.

Кстати, галерея у меня сейчас не работает - при загрузке выдает "Achtung! XSS attack! No REFERER!".
0

#5 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 07 июня 2012 - 14:05

Спасибо, не совсем понятно. Попробую разобраться почему в моей схеме значение ошибки.
Вот что получилось после изменений
http://zalil.ru/33403656 или:
Изображение
0

#6 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 15:53

Треугольники на выходах и в других местах - это тристэйты? Переключающие между high z и значением? Если да - то их обязательно нужно использовать?
0

#7 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 07 июня 2012 - 16:29

треугольники на выходах - это управляемые буферы..да, их использование желательно.
0

#8 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 19:40

Буферы убрал (впрочем, можете попробовать их вернуть), второй регистр изменил на negedge - т.е. теперь его значение будет менятся при отпускании кнопки.

Пара слов о буферах и состояниях.
Неверные значения, вроде бы, выдавались потому, что в исходном состоянии при использовании буферов шина находилась в неопределенном состоянии и именно его при такте программа пыталась засунуть в триггер. На самом деле, неопределенное состояние, которое обозначается X и высокий импеданс (high Z или просто Z, он же разрыв провода) - это разные вещи и возникают они в разных ситуациях. А в этой проге они не различаются и помечены как "???". Управляемый буфер как раз в выключенном состоянии и должен выдавать Z. Однако Z нужно выставлять только тогда, когда в этом действительно есть необходимость, так как реальная электроника ведет себя при этом неопределенным образом, если реакция на это состояние отдельно не оговорена в документации. Большинство простой логики реагирует на Z как на логическую единицу, однако, скажем у ПЗУ К573РФ4А, если у нее хотя бы один из адресных входов стоит в Z - выходы данных начинают переключатся случайным образом с большой частотой.

Теперь о повторителе, он же неуправляемый буфер. Его обычно используют как согласователь уровней напряжения или как элемент, создающий незначительную задержку сигнала. Я его попробовал вставить на тактирующую ногу регистра, чтобы буферы/мультиплексоры успели переключится чуть раньше, но не получилось никакой заметной задержки, поэтому пришлось изменить переключение регистра по негативному фронту. Может, если их штук 5 вставить - появится задержка, не знаю.

https://dl.dropbox.c...972804/min.circ
0

#9 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 07 июня 2012 - 19:50

спасибо, а каким образом в таком случае будет выглядеть полученная схема?
0

#10 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 20:13

Просмотр сообщенияKsenya23 (07 июня 2012 - 19:50) писал:

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


В аттаче лежит.
0

#11 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 07 июня 2012 - 20:24

т. е в файловом архиве? я не представляю что это..ссылка не открывается.
0

#12 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 20:36

Просмотр сообщенияKsenya23 (07 июня 2012 - 20:24) писал:

т. е в файловом архиве? я не представляю что это..ссылка не открывается.

Правой кнопкой по ссылке, в меню выбрать "Сохранить как" ("Save linked content As" - в Опере, "Save target as ..." - в инетэксплорере).

Или это попробуйте - оно же в архиве
0

#13 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 07 июня 2012 - 20:43

спасибо вам большое! :) а так, chrome только как ссылку сохранял..
сегодня к утру постараюсь завершить курсовую)
0

#14 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 20:48

Всегда пожалуйста. А не поздновато ли курсовые сдавать?
0

#15 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 07 июня 2012 - 20:59

видимо нет) нас просто за день внезапно об этом известили, а у меня ошибки нашлись :)
и насчет работы устройства: оно выдает значение на порядок меньше, с чем это может быть связано?
0

#16 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 21:33

Просмотр сообщенияKsenya23 (07 июня 2012 - 20:59) писал:

и насчет работы устройства: оно выдает значение на порядок меньше, с чем это может быть связано?


На порядок меньше чего? Что делаете, что ожидалось и что получаете?
0

#17 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 07 июня 2012 - 21:40

т.е мы определяем на сколько будем прибавлять и уменьшать значение для конечного устройства..я поняла, что это связано с левым мультиплексором (после нажатия одной из кнопок - получаем логический "0", т.е одновременно выполняются и "*" и "/" )..может тут нужен другой подход?
как например в варианте без проверки на значение меньше "1":

Прикрепленные файлы

  • Прикрепленный файл  3.zip (10,61К)
    Количество загрузок:: 1

0

#18 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 21:57

Просмотр сообщенияKsenya23 (07 июня 2012 - 21:40) писал:

т.е мы определяем на сколько будем прибавлять и уменьшать значение для конечного устройства..я поняла, что это связано с левым мультиплексором (после нажатия одной из кнопок - получаем логический "0", т.е одновременно выполняются и "*" и "/" )..может тут нужен другой подход?


1). После сброса моделирования в регистр пишется 0 - таким образом его инициализирует программа. Возможно, его можно инициализировать другим значением, но это опять вопрос к программе, я особо не искал. Правильней, конечно, инициализировать 1.
Из этого состояния при нажатии на кнопку * или / получаем тот же самый 0.
0 * 10 = 0
0 / 10 = 0.
Но так как у нас минимально допустимым значением этого регистра является 1 - то она и записывается в регистр после первого нажатия кнопок */.

2). После каждого следующего нажатия этих кнопок это значение будет обрабатываться по тем же самым принципам математического вычисления и ограничений по ТЗ, т.е. для той единицы, что получили на шаге 1
1 * 10 = 10
1 / 10 = 0.1 (т.к. число целое то оно округляется отбрасыванием до 0) = 0 (и опять поднимается до 1) = 1.

3) Если у нас 1 или число меньше 10 - то см. шаг 2
Если 10 (и больше) - опять математика
10 * 10 = 100
10 / 10 = 1
и т.д.

Одновременно и умножения, и деления не происходит ни при нажатии ни на какие кнопки.
0

#19 Пользователь офлайн   Ksenya23 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 19 апреля 12

Отправлено 07 июня 2012 - 22:03

т.е как как ни крути, а так чтобы выводился именно тот порядок для вычислений не получится реализовать? нужно еще раз произвести умножение на тот самый порядок?
0

#20 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 265
  • Регистрация: 18 декабря 08

Отправлено 07 июня 2012 - 22:18

Просмотр сообщенияKsenya23 (07 июня 2012 - 22:03) писал:

т.е как как ни крути, а так чтобы выводился именно тот порядок для вычислений не получится реализовать? нужно еще раз произвести умножение на тот самый порядок?


Чтобы после первого нажатия на кнопку умножения в регистре оказалось 10?
Можно, двумя способами. В ПЛИСе я могу задать любое значение для начальной инициализации регистра. Конкретно для этого случая - единицу. Если здесь можно это сделать - то будет аналогично. Если нет - то этот способ не подходит.
Второй способ - обрабатывать эту стартовую ситуацию отдельным блоком с компаратором/мультиплексором, который туда запишет эту десятку (вместо единицы), если в регистре 0.

Цитата

Начальное значение второго регистра — 1, и оно не может опуститься ниже этого значения.
Пока что я вижу, что у данной программы начальное значение любого регистра = 0. У реальных и плисовских регистров это будет не так.
0

Поделиться темой:


  • (2 Страниц)
  • +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

2 человек читают эту тему
0 members, 2 guests, 0 anonymous users




Яндекс.Метрика