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

ТЕМА:

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

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

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

Желательно объявлять все сигналы, даже одиночные провода. По умолчанию, необъявленные сигналы считаются одиночными проводами, и "забытая" многоразрядная шина превратится в провод.

По массиву модулей - это именно то, что я имел в виду, спасибо! Пока с массивами еще не разбирался, Ваша подсказка здорово поможет.

По объявлению сигналов и проводов учту.
Имеет ли значение, в каком именно модуле будет объявлен тот, или иной сигнал (провод, шина), или любое объявление относится ко всему проекту? Можно ли, допустим, в топ-модуле сделать объявление всех сигналов, которые будут использоваться в проекте, чтобы потом внутри модулей уже не заморачиваться с этим?
Нужно ли так делать - это уже другой вопрос. ;)

Других замечаний по контрольной работе нет?

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

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

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

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

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

Увы, глобальные сигналы в Верилоге объявить нельзя, и это очень мешает - все сигналы приходится тащить через порты модулей. Видимость сигналов - только в пределах модуля.

Других замечаний по контрольной работе нет?

Нет.
После отладки конкрентого модуля, как топ-модуля, его можно переименовать, например, в drv: module drv(che,pwm,fsi,fsoh,fsol);
и далее вставлять в окончательный проект top.v одной строчкой, как отдельный модуль.

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

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

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

После отладки конкрентого модуля, как топ-модуля, его можно переименовать, например, в drv: module drv(che,pwm,fsi,fsoh,fsol);
и далее вставлять в окончательный проект top.v одной строчкой, как отдельный модуль.

Это уже сделано, спасибо.
На мой вопрос по мегафункции можете ответить?

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

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

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

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

как правильно добавить в текст кода мегафункцию (мф)?

В предлагаемом списке вывода надо поставить галочку напротив *_inst.v, содержимое этого файла и полагается вставлять в код со своими именами сигналов.

Я комменты удаляю (вместе с правкой кода под своми нужды).

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

Такое сам пишу. А мф - смотреть даташит, подходит или нет, в разделе арифметики(вроде).

// synopsys translate_off
...
// synopsys translate_on

Все, что между этими строками, для симуляции. Для синтеза не нужны, можно удалять.

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

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

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

Leka пишет: В предлагаемом списке вывода надо поставить галочку напротив *_inst.v, содержимое этого файла и полагается вставлять в код со своими именами сигналов.

*_inst.v на счетчик (имена не менял, стоят по умолчанию):
prescaler1_inst (
	.clock ( clock_sig ),
	.data ( data_sig ),
	.sload ( sload_sig ),
	.cout ( cout_sig ),
	.q ( q_sig )
	);
Это то? Как по этим строкам компилятор привяжет нужную библиотеку с описанием счетчика?
Может быть вот этот файл (*_bb.v):
module prescaler1 (
	clock,
	data,
	sload,
	cout,
	q);

	input	  clock;
	input	[9:0]  data;
	input	  sload;
	output	  cout;
	output	[9:0]  q;

endmodule 
Здесь есть хотя бы те настройки, которые я сам выбрал - разрядность счетчика, нужные входы/выходы...

Такое сам пишу. А мф - смотреть даташит, подходит или нет, в разделе арифметики(вроде).

МФ на lmp_counter смотрел, но не понял, что там, и как. Выбираю нужные параметры счетчика, а что с ними дальше делать, не знаю. Как реализовать загрузку в data по переполнению счетчика? Счетчик нужен 10-разрядный.
Можете любой пример "самописного" счетчика показать?

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

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

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
marsohod.org/verilog
Внизу есть список проектов, в тч и счетчиков.

*_bb.v не нужен для синтеза.
Параметры счетчика задаются при вызове мегавизарда, он создает и сохраняет в папке файл *.v, этот файл и используется при синтезе.

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

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

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Доброго всем времени. Возник очередной вопрос. Можно ли после if и else написать сразу два оператора (в коде вторые операторы закомментированы)?
Если нет, как правильно написать конструкцию, которая позволит выполнить сразу два оператора по if и по else?

module SSS(
 input wire clock,
 input wire [7:0]in,
 output reg [7:0]cnt,
 output reg ld 
 );
always @(posedge clock)
begin
 if(cnt==8'b11111111)
 cnt <= in; /*ld <= 1'b1;*/
 else
 cnt <= cnt + 1'b1; /*ld <= 1'b0;*/
end

endmodule

Или следует написать так:
module SSS(
 input wire clock,
 input wire [7:0]in,
 output reg [7:0]cnt,
 output reg ld 
 );
always @(posedge clock)
begin
 if(cnt==8'b11111111)
 ld <= 1'b1;
 else
 ld <= 1'b0;

 if (ld==1'b1)
 cnt <= in;
 else
 cnt <= cnt + 1'b1;
end 
endmodule

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

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

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

Комментарии так писать можно, они будут проигнорированы.
Чтобы между if и else вставить несколько инструкций, необходимо поместить эти инструкции между begin и end

if(cnt==8'b11111111)
  begin
    cnt <= in; 
    ld <= 1'b1;
  end
else
  begin
   /* инструкции работают если условие не выполняется */
  end
Спасибо сказали: KIV

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

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

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

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Спасибо, alman. Я уже понял это. Под утро... ;)

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

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

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
После того, как удалось переключить свой ГМ со схемотехнического, на логический образ мышления, что называется, попёрло.
За пару дней написал практически весь проект. Разумеется, ошибки исключать нельзя, они будут вылезать при симулировании (до этого еще не добрался), но каждый отдельный модуль компилируется без серьезных замечаний (без красного).
Проблемы начинаются, когда пытаюсь собирать отдельные *.v файлы в один. Так как модулей в проекте не много, и они все довольно простые, и занимают всего по несколько строк кода (максимум - не более 20-25 строк), решил просто скопировать коды отдельных модулей в файл топ-модуля. Разумеется, при этом указал и описал каждый модуль в списке модулей топ-модуля.
В основном, возникающие при этом ошибки ошибки связаны с портами, и линиями связи.
Вот типичные сообщениях:
Error (10206): Verilog HDL Module Declaration error at DDMV.v(12): top module port "s_phi" is not found in the port list,
Error (10663): Verilog HDL Port Connection error at DDMV.v(28): output or inout port "f_ft" must be connected to a structural net expression.

При том, что указанный в первом сообщении порт включен в соответствующий порт-лист в топ-модуле, и в нет-листы модулей, в которых он задействован, так же, как порт из второй ошибки вроде бы подключен, куда надо.

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

В связи с этим вопросы:
Важен ли порядок перечисления (очередность) используемых input wire и output reg в нет-листе топ-модуля, и вторичного модуля? У меня не всегда эта очередность соблюдается. Хотя исправление очередности одного порта (или его исключение из списков), как правило, влечет за собой появление аналогичной ошибки, но уже по другому порту.
Как корректно организовать линии связи, соединяющие разные модули, когда нужно выходной порт (output reg, или просто output) одного модуля соединить c входным портом (input wire, или просто wire) другого (других) модулей? Здесь же: когда нужно использовать output reg (или input wire), а когда просто output (или input)?
Я уже задавал подобный вопрос, но уважаемый umarsohod ответил, что не видит разницы. Так ли это?

Еще вопрос: в модуле А есть output reg [7:0]data. Нужно сигнал n-го бита этой шины передать в модуль В. Как правильно это сделать - "тянуть" всю шину data от модуля к модулю, и на приемной стороне выделить сигнал n-го бита шины data, или сразу в модуле А выделить нужный бит, назначить его дополнительной wire, и передать в модуль В только эту линию?
В принципе, data подается и в другие модули, т.е. уже гуляет внутри чипа, и компилятор сам найдет оптимальный вариант соединения?

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

Последнее редактирование: от KIV.
Время создания страницы: 0.156 секунд
Работает на Kunena форум