Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Все это дает основания полагать....
reg[7:0]
always (posedge async_rst_i, posedge clk) begin
if(async_rst_i) reg <= 8'b1010_0101;
else reg <= ХХ;
end
reg pon_reset_reg = 0;
always @( posedge clk )
pon_reset_reg <= 1'b 1;
То есть сброс получился отрицательным. Соответственно в других always в качестве сброса нужно будет использовать negedge pon_reset_reg:always @( posedge clk, negedge pon_reset_reg )
begin
if( !pon_reset_reg )
begin
// Здесь инициализируем регистры в то, что надо.
end
else
begin
// Здесь выполняем действия по фронту тактов
end
end
P.S: Почему именно асинхронный ресет? Потому что он уже есть в триггерах, и не придется городить лишнюю логику, тем самым отжирая ресурсы и ухудшая быстродействие.
(правда после кнопки конечно нужно будет поставить триггер, подзащелкивающий этот ресет, чтобы он случайно не попал на фронт клока).
общесхемный асинхронный ресет триггеров заводят на неё (правда после кнопки конечно нужно будет поставить триггер, подзащелкивающий этот ресет, чтобы он случайно не попал на фронт клока).подразумевает, как минимум два триггера. Если один, то это не самая хорошая идея, в сети и в частотности на этом ресурсе по метастабильности много информации и даже есть выкладки с вероятностью попасть в такое состояние и для одного триггера она не такая уж и маленькая.
Ну типа вот в моем случае, с подачей ресета на D вход, может сложиться такая ситуация, что ты зажал кнопку слишком близко к фронту частоты, и на выходе, на ближайший такт, получил ни рыбу ни мясо. В итоге часть триггеров у тебя асинхронно сбросится на этом такте, а часть только на следующем, когда метастабильность пропадет. Навскидку не могу придумать ситуации когда это окажется критичным.
reg [1:0] reset_reg = 0;
// Формирователь сброса
always @( posedge clk, negedge reset_n_i )
begin
if( !reset_n_i )
reset_reg <= 0;
else
reset_reg <= { reset_reg[0], 1'b 1 };
end
// Остальные always
always @( posedge clk, negedge reset_reg[1] )
begin
if( !reset_reg[1] )
//
else
//
end
Отладочная плата ПЛИС — Франкенштейн. Контроллер елочных гирлянд