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

module comp
(
// {{ALTERA_ARGS_BEGIN}} DO NOT REMOVE THIS LINE!
comp_in, clr, clk, clr_out
// {{ALTERA_ARGS_END}} DO NOT REMOVE THIS LINE!
);
// Port Declaration

// {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
input comp_in;
input clr;
input clk;
output clr_out;
// {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!

reg clr_out;
reg zamok;

initial
begin
clr_out = 0;
zamok = 0;
end

always @ (clk or comp_in)
  begin
  clr_out <= 0;
  if (clr == 1) 
            begin
              zamok <= 0;
              end
  if (comp_in == 1) 
        begin
          if (zamok == 0) clr_out <= 1;
          zamok <= 1;
          end
  
  end

endmodule

Подскажите по поводу корректности кода. Вроде в ModelSim работает, но смущает, что clr_out <= 0;

вроде бы может присвотся не в попад с тактом.

Пытаюсь сделать одновибратор. т.е. когда приходит posedge comp_in должен произойти однократный сброс через clr_out, а затем при любом comp_in ничего не происходить, пока не придет сброс по clr.

Спасибо!

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


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

вроде бы может присвотся не в попад с тактом.

с каким "тактом"? если хотите с тактом, то нужно так:

always @(posedge clk

а у Вас что?..

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


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

clk и есть такт. always @ (posedge clk) - это положтельный перепад, а always @ (clk) - это любой перепад. Разве не так?

 

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


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

clk и есть такт. always @ (posedge clk) - это положтельный перепад, а always @ (clk) - это любой перепад. Разве не так?

НЕТ. Вы создали список чувствительности, ваша конструкция триггер вообще не порождает. Да и если бы запись была верной - нет в ПЛИС триггеров, реагирующих на любой фронт.

Вы поймите, что не все, что вы сможете написать, в ПЛИС реализуемо.

 

Почитайте 1364.1 - 2002 IEEE Standard for Verilog Register Transfer Level Synthesis. Еще поищите книги автора (соавтора) Yatin Trivedi.

Вы сам один заниматесь этой темой? Коллеги (если работаете), преподаватели (если учитесь) могут помочь?

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


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

Один занимаюсь. А почему тогда в ModelSim все показывает правильно?

А что по Вашему моделсим должен был показать? Реально Ваша схема вырождается в комбинационную логику без триггеров, можете проверить на rtl viewer. Modelsim правильно покажет и несинтезируемую конструкцию типа

initial begin
#5 a=b
end

Раз помочь некому, советую начать с азов проектирования на ПЛИС с помощью языков HDL - книг и статей сейчас навалом даже на русском.

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


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

Странно, но многая литература пишет, что always @ (clk) именно срабатывание по любому фронту....... ?

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


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

Странно, но многая литература пишет, что always @ (clk) именно срабатывание по любому фронту....... ?

действительно...такая конструкция срабатывает по любому фронту. но она не синтезируемая.

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


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

Странно, но многая литература пишет, что always @ (clk) именно срабатывание по любому фронту....... ?

 

одна из самых распространенных ошибок начинающих разработчиков цифровых схем. Очень многие, начиная писать на HDL языках, продолжают мыслить в алгоритмах языков обычного программирования. Автору хотелось бы сказать, что в HDL языках, коим является и verilog следует четко разделять синтезируемое и несинтезируемое подмножество языка. Синтезируемое - это то, в рамках чего вы создаете схему, здесь каждый шаг, должен быть продуман с точки зрения аппаратной реализации, то бишь что вы подразумеваете, применив данную конструкцию языка. Несинтезируемое подмножество - та часть языка в которой вы вольны писать как душе угодно, эта часть не применяется для создания схем, её основное назначение-создание тестового окружения проекта, создание тестовых воздействий, вывод результатов моделирования и др.

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

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


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

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

 

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

(много непечатных слов) у меня в Questasim все работоло а в NC-Sim кое что не пашет и tapeout через день ( снова много непечатных слов)

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


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

Что-то ничего не получается. Помогите, пожалуйста!!!

Есть три входных сигнала: clk - 100MHz, comp, reset. и один выходной pld_out.

Нужно, что-бы при reset == 0 при (posedge comp) pld_out стал 1, а затем при (posedge clk) pld_out стал 0, и больше не менялся, пока reset == 0, и т.д.

Заранее огромное спасибо!

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


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

хы. тогда можете так:

 

module tst(
            input wire clk    ,
            input wire comp    ,
            input wire reset,
            
            output wire pld_out,
            output wire en, en1
            );
            
    assign pld_out = (comp && ~reset && en1) ? 1'b1 : (clk) ? 1'b0 : pld_out;
    assign en = (reset) ? 1'b1 : (clk && pld_out) ? 1'b0 : en;
    assign en1 = (~reset && en) ? 1'b1 : (clk) ? 1'b0 : en1;
    
endmodule

 

но щас Вам более корректный код отпишут. напишут "ай-ай, латчи, тыры-пыры" =)

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

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

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


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

Да, я с защелками тоже столкнулся, решил, что их нельзя использовать... Вроде все просто, но оказалась какая-то засада... :(

 

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...