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

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

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

У меня эта схема занимает 64 LE в чипе.Если выбросить переменную "t12", то будет 54.
Вам сколько таких модулей нужно? 8 не поместится.

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

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

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Такой модуль только один нужен.
В общем, я потихоньку начинаю разбираться с Квартусом, и основные проблемы возникают не с логиков построения модулей, и даже не с языком, а с синтаксисом. Чтобы синтаксически правильно писать, просто нужен опыт, а его пока нет.
Хелп по ошибкам довольно скуден, и не всегда удается понять, что не нравится компилятору. Разгадывание этих шарад занимает основное время.
Пример: создаю новый проект, добавляю первый модуль, счетчик с заданными параметрами. Ничего своего пока не добавляю. Попытка компиляции выдает ошибку, о которой уже спрашивал: Error (12007): Top-level design entity "Test" is undefined.
Второй день стучу в бубен, бегаю вокруг компа с заячьей лапкой, короче - камлаю по-взрослому. А толку - ноль. :woohoo:

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

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

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

Я никогда не трачу время на создание нового проекта. Копирую наиболее подходящий, лишнее удаляю, нужное добавляю :)
Хотя должен признать, для работы С Квартусом нужны хорошие нервы.

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

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

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Не думаю, что это оптимальный путь проектирования. Хотя в некоторых случаях вполне приемлемый.
Но мне хочется не только решить поставленную задачу, но и научить себя любимого чему-то новому. :blush:

To Leka: под "рассыпухой" я подразумевал только логику выходных драйверов. Ее там набралось почти 10 корпусов. А мозги были реализованы на ATMega162. Программа писалась в графическом ассемблерt AlgorythmBuilder от Громова.
Можно было бы обойтись и без внешней рассыпухи, но у Меги 162 ног маловато, ведь мне нужно порядка 40 выводов I/O, а уходить на более серьезный камень не хотелось.
Случайно наткнулся на Альтеру, вот и "вштырило". Решил попробовать реализовать новую версию своей управлялки на ПЛИС.
Вот теперь выношу мозг форумчанам Марсохода. Надеюсь, еще какое-то время меня не будут посылать... ;)

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

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

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Новый проект "с нуля" проще (имхо) так (для Windows):
- создать новую папку,
- скопировать туда содержимое top.zip,
- запустить top.bat, если нужна "иконка" вызова графической оболочки Квартуса,
- начать заполнять top.v, в top.qsf надо поменять семейство ПЛИС на требуемое.

Потом в top.qsf добавить назначения выводов для конкретного кристалла.

Имхо, лучше всегда назначать одно и то-же имя топ-модулю (у меня "top"), и не менять его (как "main" в Си). Различать проекты можно по имени папки.

Для синтеза можно не пользоваться графической оболочкой Квартуса, а просто запускать top.bat,
предварительно раскомментировав там строки. Для заливки прошивки можно запускать sof.bat.
Вложения:

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

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

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

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Дополнительные модули можно либо добавлять в top.v, либо в отдельных файлах в той-же папке. Имя файла должно совпадать с именем модуля, тогда не нужно ничего указывать Квартусу.

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

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

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5

Leka пишет: Я уже предлагал для "закрепления материала" взять простейшую отвлеченную задачку, типа 4х-входовый "И" на базе 2х-входовых "И", и отработать весь цикл перевода в Верилог и синтеза в Квартусе. Код выкладываете тут.

Внимательно изучил все рекомендации полученные от Вас, и от других участников.
"Домашнее задание" немного усложнил (под свои конкретные нужды) и выполнил.

На выходе формируется две шины фазных сигналов (управление верхними и нижними ключами полумостов, питающих обмотки мотора), которые "собираются" из трех сигналов:
che - сигнал четности, инверсный для выходных шин верхних и нижних ключей (fsoh, fsol);
pwm - сигнал ШИМ, общий для всех ключей;
fsi - сигналы каждой из восьми фаз.
Логика формирования: fsol = che&pwm&fsi[x] и fsoh = ~che&pwm&fsi[x].
Не очень нравится, что пришлось писать 16 этажей практически одинаковых операндов. Можно ли это как-то минимизировать в тексте?
Сигнал клока здесь не требуется, т.к. все входные сигналы формируются синхронно по умолчанию.
Код компилируется нормально. Количество занимаемых LE = 16.

Жду оценку.
module top(che,pwm,fsi[7:0],fsoh[7:0],fsol[7:0]);
	input che;       
	input pwm;        
	input[7:0]fsi;
	output[7:0]fsoh;
	output[7:0]fsol;

assign chi = ~che;

add1 (che,pwm,ce_p);
add1 (chi,pwm,ci_p);

// Выходы на верхние ключи
add1 (ci_p,fsi[0],fsol[0]);
add1 (ci_p,fsi[1],fsol[1]);
add1 (ci_p,fsi[2],fsol[2]);
add1 (ci_p,fsi[3],fsol[3]);
add1 (ci_p,fsi[4],fsol[4]);
add1 (ci_p,fsi[5],fsol[5]);
add1 (ci_p,fsi[6],fsol[6]);
add1 (ci_p,fsi[7],fsol[7]);

// Выходы на нижние ключи
add1 (ce_p,fsi[0],fsoh[0]);
add1 (ce_p,fsi[1],fsoh[1]);
add1 (ce_p,fsi[2],fsoh[2]);
add1 (ce_p,fsi[3],fsoh[3]);
add1 (ce_p,fsi[4],fsoh[4]);
add1 (ce_p,fsi[5],fsoh[5]);
add1 (ce_p,fsi[6],fsoh[6]);
add1 (ce_p,fsi[7],fsoh[7]);

endmodule

module add1(
	input i1,
	input i2,
	output out);
assign out = i1 & i2;

endmodule

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

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

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

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Вопрос: как правильно добавить в текст кода мегафункцию (мф)?
При создании мф через Tools/Wizard создается два файла: *.v и *_bb.v. Первый - полное описание мф, во втором, как я понял, хранятся только ее текущие настройки.
Какой из этих двух файлов нужно вставлять в свой код, и можно ли удалять из текста своего кода все строки комментариев, находящихся в файлах *.v и *_bb.v? Вопрос прагматичный - стандартные комментсы занимают очень много места, и делают код плохочитаемым.

И хотелось бы посмотреть описание, например, многофункционального счетчика (с разными входами/выходами) на Верилоге.
Можете подсказать, в каком проекте это есть?

И еще, что означают эти строке перед описанием модуля мф counter:
// synopsys translate_off
`timescale 1 ps / 1 ps
// synopsys translate_on


Мне конкретно нужен 10-разрядный счетчик, у которого наряду со стандартными clock и q должны быть входы sload и data, и выход cout. При этом перезагрузка в порт data должна исполняться по переполнению счетчика ("1" на выходе cout).

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

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

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

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

Не очень нравится, что пришлось писать 16 этажей практически одинаковых операндов. Можно ли это как-то минимизировать в тексте?

Можно, например, через массив модулей (см код). Или цикл generate. Но для начала лучше использовать простые конструкции + дублирование(ctrl/D) в редакторе (я использую Notepad++).

Желательно объявлять все сигналы, даже одиночные провода. По умолчанию, необъявленные сигналы считаются одиночными проводами, и "забытая" многоразрядная шина превратится в провод.
//module top(che,pwm,fsi[7:0],fsoh[7:0],fsol[7:0]);
module top(che,pwm,fsi,fsoh,fsol);
	input che;       
	input pwm;        
	input[7:0]fsi;
	output[7:0]fsoh;
	output[7:0]fsol;

//assign chi = ~che;
wire chi = ~che;
wire ce_p, ci_p; 

add1 (che,pwm,ce_p);
add1 (chi,pwm,ci_p);

// Выходы на верхние ключи
add1 aL[7:0](ci_p,fsi,fsol);
// add1 (ci_p,fsi[0],fsol[0]);
// add1 (ci_p,fsi[1],fsol[1]);
// add1 (ci_p,fsi[2],fsol[2]);
// add1 (ci_p,fsi[3],fsol[3]);
// add1 (ci_p,fsi[4],fsol[4]);
// add1 (ci_p,fsi[5],fsol[5]);
// add1 (ci_p,fsi[6],fsol[6]);
// add1 (ci_p,fsi[7],fsol[7]);

// Выходы на нижние ключи
add1 aH[7:0](ce_p,fsi,fsoh);
// add1 (ce_p,fsi[0],fsoh[0]);
// add1 (ce_p,fsi[1],fsoh[1]);
// add1 (ce_p,fsi[2],fsoh[2]);
// add1 (ce_p,fsi[3],fsoh[3]);
// add1 (ce_p,fsi[4],fsoh[4]);
// add1 (ce_p,fsi[5],fsoh[5]);
// add1 (ce_p,fsi[6],fsoh[6]);
// add1 (ce_p,fsi[7],fsoh[7]);

endmodule

module add1(
	input i1,
	input i2,
	output out);
assign out = i1 & i2;

endmodule

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

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

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Квартус на другом компе, не помню, что в _bb.v, это вроде для симуляции. Д/б что-то похожее на "instance".

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

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