Перейти к содержанию

Help the noob with Verilog

Только начинаю изучать Verilog, столкнулся с необъяснимыми трудностями. Второй час бьюсь головой об стену, пытаясь понять причины недовольства компилятора. Знатоки, помогите, пожалуйста. Файл с исходником ниже прилепил.

QIP_Shot_-_Screen_174.png

test.v

Изменено пользователем Fantasm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у вас комбинация if - else сама по себе болтается, её надо в always сунуть , а assign вытащить из неё.

з.ы.

правда что вы хотите от led-a я так и не понял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
у вас комбинация if - else сама по себе болтается, её надо в always сунуть , а assign вытащить из неё.

з.ы.

правда что вы хотите от led-a я так и не понял.

 

Каждые 40 нс меняется состояние led. То есть это имитация светодиода, который горит в течение 40 нс каждые 40 нс.

 

За совет - спасибо. Не знал, что нельзя вне блока always операторы совать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
это имитация светодиода, который горит в течение 40 нс каждые 40 нс.

если лед будет гореть 40 нс, каждые 40 нс - то он будет гореть непрерывно.

Но я вас понял - вы на самом деле хотите чтобы у вас лед мигал со скважностью 2.

 

reg led_reg=0;
always @(posedge clk) 
if (tm!=40) tm<=tm+1; 
else
begin
tm<=0;
led_reg<=~led_reg;
end
assign led = led_reg;

 

Симулятора у меня под рукой нет - надеюсь не накосячил.

Само - собой , тактовая 1 ГГц. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно оффтоп?

Есть какие-нибудь наработки для визуализации всего этого дела? Виртуальная эмуляция платы например, которая будет мигать диодами и реагировать на клики мышью по кнопкам? Настоящую ПЛИС приобрести пока нет возможности.

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

 

led_reg<=~led_reg;

 

А что, так можно было?? :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Есть какие-нибудь наработки для визуализации всего этого дела?

А симулятор чем плох?

Напишите модуль, напишите тестбенч и любуйтесь на здоровье.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А симулятор чем плох?

Напишите модуль, напишите тестбенч и любуйтесь на здоровье.

 

Никрасиво! :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Никрасиво! :D

Как в известном анекдоте: "Так вам шашечки или ехать?"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Никрасиво! :D

На самом деле, симулятор это очень даже няяя и кавайно.

HDL симулятор это основной инструмент разработки и отладки. Если noob решил учиться, то пусть учится сразу правильно. Некоторые малоопытные разработчики, немного пишущие на Verilog, как раз и задерживают свое развитие в данной области, потому что не желают научиться пользоваться симулятором. В итоге, когда нужно справить даже со средней сложности проектом, они оказываются беспомощными.

 

https://electronix.ru/forum/index.php?showtopic=147073

https://electronix.ru/forum/index.php?showtopic=147246

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только начинаю изучать Verilog, столкнулся с необъяснимыми трудностями. Второй час бьюсь головой об стену, пытаясь понять причины недовольства компилятора. Знатоки, помогите, пожалуйста. Файл с исходником ниже прилепил.

QIP_Shot_-_Screen_174.png

Нет энтера после endmodule , он синим должен быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Нет энтера после endmodule , он синим должен быть.
Ошибка не в этом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

Нет энтера после endmodule , он синим должен быть.
При чем тут энтер - if не может болтаться в теле модуля сам по себе - он должен быть либо в always либо в generate блоках.

module ...

generate 
  if (...) begin 
    assign var0 = ...
  end
endgenerate

always_comb begin
  if (..) begin
   var1 =  ...
  end
end

always @(posedge clk) begin
  if (..) begin
    var2 <= ...
  end
end

endmodule

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти