Jump to content

    
Sign in to follow this  
demsp

Симуляция счётчика в ModelSim

Recommended Posts

Не совсем. Сначала триггер синхронизируется по тактовой частоте, а только потом уже используется для асинхронного сброса.

Share this post


Link to post
Share on other sites
Не совсем. Сначала триггер синхронизируется по тактовой частоте, а только потом уже используется для асинхронного сброса.

Тогда он не нужен совсем...

Выход с reset bridge делает асинхронный сброс синхронным тактовой. Больше никаких дополнительных триггеров не нужно.

P.S. Вы хоть читали статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»"

Share this post


Link to post
Share on other sites
Приходит асинхронный сброс на триггер.

И загоняет его в метастабильное состояние.

Эм, может, я чего-то пропустил в этой жизни? Где это написано?

Share this post


Link to post
Share on other sites
Эм, может, я чего-то пропустил в этой жизни? Где это написано?

Так вот была предложена такая схема сброса:

always @(posedge clk_i)
     begin
          rst_rg <= reset_i;
     end

 

Если сигнал reset_i - внешний и асинхронен тактовой, то триггер rst_rg перейдет в метастабильное состояние.

И соответственно применять выход rst_rg применять как асинхронный сброс - чревато проблемами.

А если сброс был синхронизирован раньше, то зачем вообще применять триггер rst_rg ?

Share this post


Link to post
Share on other sites
Тогда он не нужен совсем...

Выход с reset bridge делает асинхронный сброс синхронным тактовой. Больше никаких дополнительных триггеров не нужно.

P.S. Вы хоть читали статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»"

Да, причем в оригинале.

Скажу лишь одно, применял подобную схему во многих проектах (FPGA, ASIC) и никогда проблем со сбросом не наблюдалось. Спасибо за Ваше уточнение, а я обязательно проанализирую Ваше замечание.

 

Эм, может, я чего-то пропустил в этой жизни? Где это написано?

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

 

Share this post


Link to post
Share on other sites
Насколько я понял, тут имеется в виду ситуация, когда сигнал сброса формируется по одной частоте, а схема работает по другой. В таком случае, после подачи сигнала сброса на триггер, он действительно может "свалиться" в метастабильное состояние.
Это странно. Сброс на то и сброс, чтобы переводить триггер в заведомо известное стабильное состояние. А вот снятие сброса в окрестности фронта клока может устроить метастабильность, тут я согласен.

Поэтому часто делают так: подача сброса асинхронно, снятие сброса синхронно.

Быстрый гуглинг: http://chipverification.blogspot.com/2008/...nous-reset.html

Share this post


Link to post
Share on other sites
Спасибо за всю серию в общем и за статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»" в частности )

Вам спасибо, за то что читаете.

И если захотите обсудить, то могу еще кое-что рассказать "инженерное, чисто по жизни"... По скайпу...

 

Share this post


Link to post
Share on other sites

ТС почему Вы не хотите пользоваться описание из темплате:

 

// Quartus Prime Verilog Template
// Binary counter

module binary_counter
#(parameter WIDTH=64)
(
    input clk, enable, reset,
    output reg [WIDTH-1:0] count
);

    // Reset if needed, or increment if counting is enabled
    always @ (posedge clk or posedge reset)
    begin
        if (reset)
            count <= 0;
        else if (enable == 1'b1)
            count <= count + 1;
    end

endmodule

 

???

Share this post


Link to post
Share on other sites

ТС почему Вы не хотите пользоваться описание из темплате:

Могу предположить потому-что ему не нужен был изначально асинхронный сброс. Но нужна была начальная установка регистрам, для того, чтобы запускалось моделирование в Modelsim

Share this post


Link to post
Share on other sites
ТС почему Вы не хотите пользоваться описание из темплате:

Могу предположить потому-что ему не нужен был изначально асинхронный сброс. Но нужна была начальная установка регистрам, для того, чтобы запускалось моделирование в Modelsim

А отсюда какой вывод?

Проще было взять "обычное шаблонное" описание с асинхронным сбросом, как это привел Маверик. В симуляторе не задумываясь использовать Сброс, подогнав его в тестбенче под такты. А в железе, если этот Сброс не нужен, то на самом верху приписать ему неактивное значение и компилятор его сожрет. При этом все делается совершенно без ошибок и не плодятся лишние версии описания...

Правда тогда нам всем нечего будет обсуждать, увы :(

Share this post


Link to post
Share on other sites
Да, спасибо, в реальной схеме сброс вообще не нужен, но в симуляции использую сброс для инициализации регистров нулями

Я бы не был таким категоричным. Например FPGA фирмы Actel не умеют инициализировать триггеры нужным значением(во всяком случае у них были такие FPGA). Там без начального сброса никуда....

А вообще советую ознакомиться: http://www.kit-e.ru/articles/circuit/2009_1_96.php

Share this post


Link to post
Share on other sites
Да, спасибо, в реальной схеме сброс вообще не нужен, но в симуляции использую сброс для инициализации регистров нулями

 

 

`timescale 1 ns / 1 ps
module ct
(
input             clk,
output [1:0] counter
);

reg [1:0] counter_rg = 2'b00;

always @(posedge clk)
begin 
counter_rg <= counter_rg + 1'b1;
end

assign counter = counter_rg;

endmodule

 

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.

Sign in to follow this