Jump to content

    
verali

Автоматический сброс на System Verilog

Recommended Posts

Добрый день!

Являюсь новичком в Verilog и SV. До этого только подключал ip блоки к проекту, используя SV и писал простенькие testbench.

Возникли трудности в банальном описании сброса. Внешний сброс приходит с процессора, доступ к которому сейчас не имею. Хочу проверить работоспособность "железа" путем автоматического сброса - допустим после 100 клоков сигнал reset переходит из 0 в 1 и далее никак не изменяется.

Первая идея была использовать счетчик, который, досчитывая до 100, ставит сигнал reset в 1. Но, этот счетчик со временем обнулится, и сброс произойдет снова, что мне не подходит.

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

Share this post


Link to post
Share on other sites

вам железе или в симуляции?

потому что в симуляции просто делаются

reset = 0;

#100;

reset = 1;

 

где #100 - задержка в 100 ваших единиц, нсек обычно.

 

если в железе то что вам мешает счетчик остановить:)?

 

if(counter < 100)
  begin
    reset_n <= 1'b0;
    counter <= counter + 1'b1;
  end
else
  reset_n <= 1'b1;

 

 

досчитает до 100, поднимет ресет и встанет, начальное значение надо только не забыть не во всех платформах оно 0 по умолчанию

 

 

Share this post


Link to post
Share on other sites
Хочу проверить работоспособность "железа" путем автоматического сброса - допустим после 100 клоков сигнал reset переходит из 0 в 1 и далее никак не изменяется.

Если нужна симуляция сброса можно попробовать такой вариант:

integer i;
initial
    begin
        reset = 0;
        for(i = 0; i < 100; i = i+1)
            @(posedge clk);            
        reset = 1;
    end

После 100 клоков reset навсегда перейдет в 1.

Share this post


Link to post
Share on other sites

Всем привет, подниму тему.

Написал модуль сброса:

module StartUp (
	input clk,
	output wire reset );
	
	reg [4 : 0] delay;

	assign reset = !delay[4];
	always @(posedge clk) if (reset) delay <= delay + 1;

endmodule

При старте должен выдавать положительный на выход и позже сбрасывается в 0.

Этот модуль не работает, синтезатор пишет:

@N: CL189 :"D:\Dropbox\Sources\Codes\Libraries\Verilog\StartUp.v":8:1:8:6|Register bit delay[4] is always 1.
@N: CL159 :"D:\Dropbox\Sources\Codes\Libraries\Verilog\StartUp.v":2:7:2:9|Input clk is unused.

Подскажите почему не работает?

Спасибо.

Share this post


Link to post
Share on other sites
13 минут назад, RadiatoR сказал:

Подскажите почему не работает?

вам же написали - когда delay[4]=1 , тогда reset = 0 и ветка с клоком не работает никогда, наверное по этому синтезатор выкинул эти неиспользуемые вещи.

Share this post


Link to post
Share on other sites
22 минуты назад, RadiatoR сказал:

Всем привет, подниму тему.

Написал модуль сброса:


module StartUp (
	input clk,
	output wire reset );
	
	reg [4 : 0] delay;

	assign reset = !delay[4];
	always @(posedge clk) if (reset) delay <= delay + 1;

endmodule

 

Подскажите почему не работает?

 

Ну и при этом не факт, что регистр delay по исходному равен нулю... Такое может быть при загрузке ПЛИС, но может и не быть... 

При этом, вы хотите, чтобы модуль сработал только один раз после включения. Т.е. при холодном старте. А вот потом, в процессе работы кто-то захочет перезапустить устройство. Т.е. сделать горячий старт. Но увы, здесь как говорится "но пасаран"! 

Share this post


Link to post
Share on other sites
7 minutes ago, iosifk said:

А вот потом, в процессе работы кто-то захочет перезапустить устройство.

Ножка ресет у меня выведена. Мне приходится каждый раз тыкать кнопку (это пока всего лишь отладка) чтобы всё завести.

Я ожидаю, что delay[4], как и весь delay будет на старте равен 0. Возможно я ошибаюсь и это не так. Собственно я оцениваю по отладочным светодиодам. У меня их 16 штук и все они assigned к разным регистрам. И все они после конфигурации фпга не горят, из чего я делаю вывод, что после конфигурации все регистры в 0.

В топе у меня сделано так:

	wire initReset, reset;
	StartUp startup(.clk(clk), .reset(initReset));
	assign reset = initReset | rst;

rst - это внешний ресет

reset - уже синхронный, который используется для всех остальных модулей

Share this post


Link to post
Share on other sites
1 минуту назад, RadiatoR сказал:

Ножка ресет у меня выведена. Мне приходится каждый раз тыкать кнопку (это пока всего лишь отладка) чтобы всё завести.

Я ожидаю, что delay[4], как и весь delay будет на старте равен 0. Возможно я ошибаюсь и это не так. Собственно я оцениваю по отладочным светодиодам. У меня их 16 штук и все они assigned к разным регистрам. И все они после конфигурации фпга не горят, из чего я делаю вывод, что после конфигурации все регистры в 0.

Сложно то как! Светодиоды? Это примерно как записку для похода в магазин высекать на каменной плите и потом тащить ее на горбу с собой... А как проекты побольше будут? А как компилятор линии к светодиодам проложит? Сейчас - так, а в следующей итерации проекта - по другому... И тогда - "вот только что работало, час назад, а как начальник пришел - перестало"... А симулятор для чего сделан? 

Share this post


Link to post
Share on other sites
16 minutes ago, iosifk said:

А как проекты побольше будут?

С fpga я столкнулся не по основному направлению. За исключением текущего проекта на ~70LE имею на нее виды только в рамках хобби.

16 minutes ago, iosifk said:

А как компилятор линии к светодиодам проложит?

Не понял этот момент. Как внешний ресет, который создается также как и линии во время конфигурации как-то влияет на саму конфигурацию?

 

16 minutes ago, iosifk said:

А симулятор для чего сделан?

ModelSim (использовал только его) без принудительного ресета через initial не знает начального состояния регистров и не симулирует. Это логично, я понимаю.

На самом деле код у меня не сложный. Особо с проблемами я не сталкиваюсь и пишу с первого раза. Не комильфо, не в рамках стандартной парадигмы разработки, понимаю, но если сталкиваюсь с проблемами - они либо для меня понятны и симулятор не требуется, либо симулятор не помогает. Как и произошло сейчас (без initial блока не пройдет симуляция).

 

А в этом проекте я использую lattice с внутренним hard SPI блоком. Мне нечего скормить ModelSim в качестве описания этого SPI, вот и использовал для отладки светодиоды. К слову с SPI я разобрался.

Share this post


Link to post
Share on other sites
1 minute ago, RadiatoR said:

PS упрощу вопрос: на практике есть решение с внутренним стартовым сбросом или же это решается внешними средствами?

Спасибо.

Смотря что вы имеете в виду.

Практически все supervisor'ы со счётчиками внутри не имеют наружного сигнала сброса, и сбрасываются при подаче питания.

Многие микроконтроллеры имеют несколько источников сброса: PowerUp Reset, сброс c помощью  внешнего вывода RST (который может быть отключён, и больше не будет выполнять Power-Up Clear, а будет генерировать лишь прерывание). А также возможности программного сброса, который тоже настраивается либо на PowerUp Clear либо на простое направление счётчика программ на вектор сброса.

Share this post


Link to post
Share on other sites

С ресетом мк я знаком. С ними проще - железо детерминировано и цепи сброса сформированы. А с фпга как? Такое решение (внутреннее) мне не попадалось. Вот и задался написать...

Share this post


Link to post
Share on other sites
9 минут назад, RadiatoR сказал:

PS упрощу вопрос: на практике есть решение с внутренним стартовым сбросом или же это решается внешними средствами?

Все зависит от разработки. 

Скажем домофон "завис", ну так плюнули, начали в дверь стучать...

Или другой вариант - висит контроллер связи и периферия, которая от него работает не доступна. Вот тогда микроконтроллер может подать сигнал на сброс и повторную программную инициализацию.  

Я же написал "холодный сброс" и "горячий сброс". 

А что касается " нечего скормить ModelSim в качестве описания этого SPI", то на несинтезируемых конструкциях имитатор SPI делается за 10 мин. Хотя я уверен, что модель SPI производитель предоставляет. Ведь даже изготовители микросхем памяти дают модели памяти для совместной симуляции проекта.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.