МАРСОХОД

Open Source Hardware Project

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

ТЕМА: Вопросы по языку Verilog

Re: Вопросы по языку Verilog 7 года 5 мес. назад #974

Без диаграмок все равно не очень понятно, поэтому попробую объяснить то , что смог понять.
Для того чтобы получить импульсы с периодом 1мс из 4МГц , нужен счетчик по модулю 4000.
Как реализовать такой счетчик , описано здесь - marsohod.org/verilog/158-verilogpictcnt ,
только нужно увеличить разрядность до 12 и константу до 3999.
Затем , сигнал "cout", использовать для "разрешения счёта" еще одного счетчика по модулю,
но уже на 100 ( или 102, здесь я не очень понял какой нужен период).

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

Re: Вопросы по языку Verilog 7 года 5 мес. назад #975

Извиняюсь ещё раз, попробовал изобразить что требуется.
Во вложении диаграмма предполагаемой работы.
Времена и масштабы условные - будут подбираться позже. Сейчас главное принцип.
Насколько я Вас понял - задержки организовать в Verilog'е можно только описанием счётчиков? Какой-либо встроенной функции (как это делается в МК) для этих целей не существует? Жаль - хотел "утрамбовать" в EPM3128 - он есть в городе.

PS: И ещё вопрос появился: при сборке проекта под EPM240 проект занимал 90 ячеек, при пересборке под EPM3128 - 117, это может быть связано с особенностями Quartus'а или всё таки со структурой "камней"?
Вложения:

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

"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...
Последнее редактирование: от Серый Волк. Причина: PS

Re: Вопросы по языку Verilog 7 года 5 мес. назад #976

"Насколько я Вас понял - задержки организовать в Verilog'е можно только описанием счётчиков?"

Это относится не столько к верилогу, сколько к ПЛИС в принципе.
Если вам подходит "пауза (для четкой работы логики) " в 1мс, то второй счетчик вам
нужно сделать "по модулю 104", тогда , при его значении "100" будет эта пауза,
при значении "101" - импульс загрузки, а прии "102" и"103" технологическая пауза - далее - по кругу.
Что касается количества ячеек, то в MAX2 и MAX3000 они имеют разную структуру, поэтому получается их
разное количество.
Спасибо сказали: Серый Волк

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

Re: Вопросы по языку Verilog 7 года 5 мес. назад #977

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

При попытке компиляции ругается на конструкцию case, очевидно я неправильно её описал. К сожалению имел дело с Си для микроконтроллеров, а тут... :huh:
Подскажите как выкрутиться? Неужели писать для каждого qXxx свой nX?

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

"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...
Последнее редактирование: от Серый Волк.

Re: Вопросы по языку Verilog 7 года 5 мес. назад #978

Кое-что поисправлял, попробуйте отсимулировать.
И еще, у вас не определен "qEn"

module block_form (
input wire clk,
output reg qCnt,
output reg qEn,
output reg qLd,
output reg qRst );

reg [23:0]counter;

localparam F = 2000; // ???????? ??????? ? ???

// ????????? ????????? ? ??
localparam t1 = 1,
t2 = 5,
t3 = 100,
t4 = 5,
t5 = 10,
t6 = 5,
t7 = 1,
t8 = 4;

// ??????? ??????? ? "?????" ???????? ???????
localparam n1 = 0,
n2 = n1 + t1 * F,
n3 = n2 + t2 * F,
n4 = n3 + t3 * F,
n5 = n4 + t4 * F,
n6 = n5 + t5 * F,
n7 = n6 + t6 * F,
n8 = n7 + t7 * F,
n9 = n8 + t8 * F;


always @(posedge clk)
begin
if(counter==24'd504000) // ????? ????????
counter <= 24'b0;
else
counter <= counter + 1'd1; // ????????? ?????

case (counter)
n1: begin qRst <= 1; qCnt <= 0; qLd <= 0; end // ??????? ?????? Rst
n2: begin qRst <= 0; qCnt <= 0; qLd <= 0; end
n3: begin qRst <= 0; qCnt <= 1; qLd <= 0; end // ??????? ?????????? ????? Cnt
n4: begin qRst <= 0; qCnt <= 0; qLd <= 0; end
n5: begin qRst <= 0; qCnt <= 0; qLd <= 1; end // ??????? ???????? ????????? Ld
n6: begin qRst <= 0; qCnt <= 0; qLd <= 0; end
n7: begin qRst <= 0; qCnt <= 0; qLd <= 0; end // ???????? ??????? ? ?????? ???????
default;

endcase

end

endmodule
Спасибо сказали: Серый Волк

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

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

Re: Вопросы по языку Verilog 7 года 5 мес. назад #982

Огромное Вам СПАСИБО! (Не нашёл как ЛС отправить :blush: )
Всё оказалось очень просто - begin/end. Ну почему я такой глупый? :evil:
Сейчас попробуем.

PS: qEn лишнее. Исключил.
Скомпилировалось без единой ошибки и предупреждений! Вот это профессионал! :ohmy:

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

"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...
Последнее редактирование: от Серый Волк.

Re: Вопросы по языку Verilog 7 года 4 мес. назад #1006

Доброго времени суток!

Имеется массив сигналов, каждый сигнал необходимо проанализировать схемой(определяет длительность и период). Собсно возникает проблема со схемой переключения по исследуемым сигналам=( пока имеется вот такой простенький код:

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


схема вырабатывает адрес сигнала

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


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

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

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

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

Re: Вопросы по языку Verilog 7 года 4 мес. назад #1007

Старайтесь не подавать на тактовый вход триггера сигнал с логической функции ( marsohod.org/11-blog/149-registers )
Вам нужно выбрать какой-то главный (управляющий) клок, и тактировать все триггера только им.
А у исследуемых сигналов выделять и считать изменения ( marsohod.org/verilog/157-verilogedges ).

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

Re: Вопросы по языку Verilog 7 года 1 нед. назад #1180

а можно ли на Verilog отслеживать и posedge и negedge изменения одного сигнала ?

два блока always попробовал написать - получаю кучу ошибок что у выходных линий multiple drivers

в одном блоке always написал оба условия @(posedge cs or negedge cs) - получил ошибку что нельзя отслеживать два разных изменения в одном блоке always

как это реализовать ?

p.s. могу приложить файл проекта

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

Re: Вопросы по языку Verilog 7 года 1 нед. назад #1184

  • Dr.Mike
  • Dr.Mike аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 5
  • Спасибо получено: 4
ну да, если пытаешься по фронту и по спаду назначить одному сигналу два значения, то квартус так и ругается.
проект покажи, тебе подскажут как получше исправить.

module test (input w, output reg t );
wire r,u;

always @(posedge w)
begin
r = ~ r;
end

always @(negedge w)
begin
u = ~ u;
end

always @(r, u)
begin
t = r & u;

end

endmodule

прога бред, но в моем случае хватило такой концепции, а так нужен проект.
хотя тоже послушал бы совета от профи.

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

Последнее редактирование: от Dr.Mike.
Время создания страницы: 0.982 секунд

ВКонтакте  facebook  GitHub  YouTube  Twitter