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

ТЕМА: Система управления синхронным многофазным электрод

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5118

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Попробовал реализовать тот функционал, что выше описали. Но мог и неправильно понять.

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5119

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Можете хотя бы вкратце по-модульно объяснить, что там написано? Буду весьма признателен.

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

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5120

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
В код внес изменения, тк невнимательно прочитал исходные условия:

KIV пишет: Рассмотренной схемой я анализирую временной интервал между фронтами двух импульсов.
Теперь мне нужно выполнить одну из трех операций:
1) Если измеренный интервал находится в диапазоне между двумя константами на входе мультиплексоров, ничего не делаем.
2) Если интервал короче меньшей константы, нужно уменьшить состояние счетчика (на схеме его нет), в котором уже что-то есть, на определенную константу.
3) Если интервал длиннее большей константы, нужно увеличить состояние счетчика на другую константу.

Счетчик формирует ШИМ, и мне нужно изменять скважность импульсов.
...

Задача неполностью сформулирована, поэтому дал примерный код. Чтобы в первую очередь было понятно, как разбивать дизайн на мелкие модули, и как их объединять в топ-модуле. Такой подход позволит полностью избавиться от схемного ввода, в тч и на верхнем уровне.

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

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5121

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Пишите, что как поняли. Если что не так поняли, конкретные места поясню подробнее. С объявлениями, думаю, проблем нет. А кода в каждом модуле - по 2 строчки...

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5122

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Ну, это формулировка не задачи, а кусочка задачи. К тому же, не очень внятно. Писал на скорую руку.

Могу подробно описать всю задачу целиком, от начала до конца. Но вряд ли Вам это будет интересно. Да к тому же, мне хочется самому чему-то научиться, выполняя эту работу.
Но если согласитесь, скажем так, курировать мое продвижение по просторам Верилога и ПЛИС... Это было бы очень здорово. У меня нет рядом специалистов в этом деле.

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5123

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

Ну, это формулировка не задачи, а кусочка задачи. К тому же, не очень внятно. Писал на скорую руку.

Я так и понял, и это правильно - чтобы разобраться с проблемой, ее надо выделить, и очистить от ненужных подробностей. Всю задачу приводить, конечно, не нужно - никто не будет вникать, если только не делает такую-же.

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5124

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Leka, я правильно понял (далее мои комменты в тексте кода):
module top(clk,p1,p2,out_pwm); 
// Сигналы: входы - clk (понятно), p1, p2 - импульсы, задержку между фронтами которых нужно измерять, выход - out_pwm - генерируемые ШИМ импульсы.
 input clk;
 input p1,p2;
 output out_pwm;
 wire[7:0]dat; - ??? назначение этих трех wire мне не очевидно, поясните, плз.
 wire[9:0]t12; - ??? 
 wire en1,en2; - ??? 
 det m1(clk,p1,en1); //выделение фронта импульса p1	  
 det m2(clk,p2,en2); //выделение фронта импульса p2	
 tdc m3(clk,en1,en2,t12); //измерение интервала t12 между фронтами p1 p2
 upd m4(clk,t12,dat); //сравнение t12 и обновление параметра dat
 pwm m5(clk,dat,out_pwm);
endmodule

// Выше перечислены все сигналы системы (рассматриваемой части системы), и модули, которые будут описаны ниже?
// Если после названия модуля идет описание входов/выходов, которые там будут использованы? 
// Тогда почему ниже, в описании каждого модуля вы делаете то же самое?


module det(clk,p,en); //Модуль выделения фронта первого импульса. 

 input clk,p; //- понятно (далее в строках, которые не вызывают вопросов буду ставить "+")
 output reg en; // +
 reg old; //- это временный регистр, аналогичный Temp в программировании?
 always@(posedge clk)old<=p; //- вопрос по синтаксису: пробелы между словами и после закрывающей скобки не обязательны?
 always@(posedge clk)begin // +
  if((old==0)&&(p==1))en<=1; // - долго пытался понять логическую разницу между "&" и "&&", но так и не понял пока. Можно подробно расписать смысл этой строки?
  else en<=0; // +
 end
endmodule

// Здесь, видимо, должен быть еще один модуль, аналогичный первому: module det(clk,p,en) ? 

module tdc(clk,en1,en2,t12); // +
 input clk,en1,en2; // +
 output reg[9:0]t12; // Это выходной регистр для хранения измеренного интервала между фронтами?
 reg[9:0]cnt; // Новый регистр? что означает cnt - это слово выше не описано (переменная?), в тезаурусе Верилога я его тоже не нашел, отсюда следуют вопросы в строках ниже.
 always@(posedge clk)begin // +
  if(en1)cnt<=0; // ??? 
  else cnt<=cnt+1; // + cnt присваивается значение на 1 больше предыдущего.
  if(en2)t12<=cnt; // ??? А если это выражение не истина? Почему нет завершающей else? Или в случае else ничего не изменяется?
 end
endmodule

module upd(clk,t,dat); // В этом модуле, вроде, все понятно, кроме отсутствия else в нижних строках.
 input clk;
 input[9:0]t;
 output reg[7:0]dat=100;
 always@(posedge clk)begin
  if(t<620) dat<=dat-3;
  if(t>837) dat<=dat+5;
 end
endmodule

module pwm(...
...
endmodule

Пожалуйста, ответьте на вопросы, которые я задал в тексте кода.
И прошу извинить, если мои вопросы покажутся слишком "детскими". Но ответы на них позволят в дальнейшем сократить число новых вопросов.

P.S. Довольно принципиальные для меня вопросы:
1) В течение какого времени исполняется описанный выше код?
2) Идет последовательное исполнение каждого описанного модуля, или, учитывая, что вся логика синхронная, все описанные выше операции исполняются одновременно, т.е. параллельно?
3) Как задается цикличность выполнения описанных в модулях операций, и цикличность выполнения самих модулей?

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

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5125

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

назначение этих трех wire

Разные блоки схемы соединяются проводами/шинами эти провода/шины надо объявить с указанием ширины.

Выше перечислены все сигналы системы (рассматриваемой части системы)

Да.

Выше перечислены ... модули, которые будут описаны ниже?

Перечислены все копии используемых модулей, м/б несколько одинаковых(в данном случае - 2шт det).
Описание модулей м/б где угодно, выше, ниже, в другом файле
(для Квартуса достаточно, чтобы находился в той-же папке под тем-же именем, например det.v).

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

Не описания, а сами конкретно используемые сигналы. В скобках, в определенном порядке, перечислены "разъемы", в которые надо "воткнуть" конкретные провода/шлейфы.

Тогда почему ниже, в описании каждого модуля вы делаете то же самое?

Имена м/б другие. В данном способе описания важен порядок сигналов, но не их имена.
Имена, кстати, не совпадают, например: "p1" и "p".

reg old; //- это временный регистр, аналогичный Temp в программировании?

Да.

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

только между словами и спецсимволами. Как человеку понятно, так и синтезатору.

долго пытался понять логическую разницу между "&" и "&&", но так и не понял пока. Можно подробно расписать смысл этой строки?

В данном случае все-равно. Можно поменять && на &, а выяснение разницы оставить на потом.

output reg[9:0]t12; // Это выходной регистр для хранения измеренного интервала между фронтами?

Да.

reg[9:0]cnt; // Новый регистр?

А где еще хранить текущее значение счетчика интервала? "t12" хранит только измеренное значение.
Можно поменять алгоритм, и выдавать наружу не измеренное значение интервала, а сам счетчик интервала "cnt", тогда модуль "upd" должен производить сравнение только при установленном сигнале "en2" (в этот момент "cnt" будет содержать значение интервала). В этом случае "en2" надо заводить в "upd". Это, кстати, уменьшит значение ЛЕ (не нужен будет "t12"), что важно.

if(en2)t12<=cnt; // ??? А если это выражение не истина? Почему нет завершающей else? Или в случае else ничего не изменяется?

Да, в случае else ничего не меняется, что и требуется.

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

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5126

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

1) В течение какого времени исполняется описанный выше код?
2) Идет последовательное исполнение каждого описанного модуля, или, учитывая, что вся логика синхронная, все описанные выше операции исполняются одновременно, т.е. параллельно?
3) Как задается ...цикличность выполнения самих модулей?

1) Непрерывно.
2)Параллельно. И для синхронной, и для асинхронной.
3)Порядок модулей неважен, "работают" непрерывно и параллельно.

Здесь, видимо, должен быть еще один модуль, аналогичный первому: module det(clk,p,en) ?

Нет, м/б сколько угодно рабочих "копий" модуля, с разными сигналами, и только одно описание. 100шт КТ315 в схеме, и один "даташит" на него.

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

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

Система управления синхронным многофазным электрод 5 года 7 мес. назад #5127

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

3) Как задается цикличность выполнения описанных в модулях операций

Разные блоки "always" выполняются параллельно и непрерывно, их порядок в тексте неважен.
Внутри "always" все выполняется последовательно и непрерывно, поэтому важен порядок операторов.
"Прерывистость" исполнения задается "@(posedge clk)", что означает "исполнить в момент фронта клока".

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

Время создания страницы: 0.227 секунд
Работает на Kunena форум