Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Verilog  (Прочитано 854 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aether
Опытный

ru
Offline Offline
Пол: Мужской

« : 08-12-2016 13:27 » 

Добрый день.

Всё таки решил набрать, и оценить результат симуляции работы примитивного триггера в verilog методом структурного описания (Gate and switch level modeling).

Литература: "IEEE Standard Verilog® Hardware Description Language" IEEE Std 1364-2001.
http://www-inst.eecs.berkeley.edu/~cs150/fa06/Labs/verilog-ieee.pdf

ПО: Icarus Verilog
http://iverilog.icarus.com
(Для пользователей Windows: http://bleyer.org/icarus/)

Verilog
Код:
module SR_flip_flop_negedge(output qp, output qm, input s, input r);

   wire q1, q2;

   assign qp = q1;
   assign qm = q2;

   nand x1(q1, s, q2);
   nand x2(q2, r, q1);

endmodule

module test_task;

   reg clk;
   always #1 begin
      clk = !clk;
   end

   wire qpp, qmm;
   reg ss, rr;

   SR_flip_flop_negedge SR1(qpp, qmm, ss, rr);

initial begin

   clk = 0;

   $display("      Element: SR_flip_flop based on NAND (Sensitive for negative edge)");

   $display("\n   Test 1. Set S = 1, R = 1");
   ss = 1;
   rr = 1;
   $monitor($time, " <> Clock: %d   Bin: %b : %b", clk, qpp, qmm);
   #4

   $display("\n   Test 2. Set S = 0, R = 1");
   ss = 0;
   rr = 1;
   #4

   $display("\n   Test 3. Set S = 1, R = 1");
   ss = 1;
   rr = 1;
   #4

   $display("\n   Test 4. Set S = 1, R = 0");
   ss = 1;
   rr = 0;
   #4

   $display("\n   Test 5. Set S = 1, R = 1");
   ss = 1;
   rr = 1;
   #4

   $display("\n   Test 6. Set S = 0, R = 0 (Error situation)");
   ss = 0;
   rr = 0;
   #4

   $display("\n   Test 7. Set S = 1, R = 1 (Here must have \"x : x\")");
   ss = 1;
   rr = 1;
   #4

   $monitor("");
   $display("      End.");
   $finish;

end

endmodule

Результат:
Element: SR_flip_flop based on NAND (Sensitive for negative edge)

   Test 1. Set S = 1, R = 1
                   0 <> Clock: 0   Bin: x : x
                   1 <> Clock: 1   Bin: x : x
                   2 <> Clock: 0   Bin: x : x
                   3 <> Clock: 1   Bin: x : x

   Test 2. Set S = 0, R = 1
                   4 <> Clock: 0   Bin: 1 : 0
                   5 <> Clock: 1   Bin: 1 : 0
                   6 <> Clock: 0   Bin: 1 : 0
                   7 <> Clock: 1   Bin: 1 : 0

   Test 3. Set S = 1, R = 1
                   8 <> Clock: 0   Bin: 1 : 0
                   9 <> Clock: 1   Bin: 1 : 0
                  10 <> Clock: 0   Bin: 1 : 0
                  11 <> Clock: 1   Bin: 1 : 0

   Test 4. Set S = 1, R = 0
                  12 <> Clock: 0   Bin: 0 : 1
                  13 <> Clock: 1   Bin: 0 : 1
                  14 <> Clock: 0   Bin: 0 : 1
                  15 <> Clock: 1   Bin: 0 : 1

   Test 5. Set S = 1, R = 1
                  16 <> Clock: 0   Bin: 0 : 1
                  17 <> Clock: 1   Bin: 0 : 1
                  18 <> Clock: 0   Bin: 0 : 1
                  19 <> Clock: 1   Bin: 0 : 1

   Test 6. Set S = 0, R = 0 (Error situation)
                  20 <> Clock: 0   Bin: 1 : 1
                  21 <> Clock: 1   Bin: 1 : 1
                  22 <> Clock: 0   Bin: 1 : 1
                  23 <> Clock: 1   Bin: 1 : 1

   Test 7. Set S = 1, R = 1 (Here must have "x : x")
                  24 <> Clock: 0   Bin: 0 : 1
                  25 <> Clock: 1   Bin: 0 : 1
                  26 <> Clock: 0   Bin: 0 : 1
                  27 <> Clock: 1   Bin: 0 : 1
      End.

Итог: в последнем тесте результат ожидался другим, и по идее анализ должен был дать значение "х : х", то есть неопределённое, однако, выдал конкретное значение. Это не является ошибкой, но само по себе подозрительно.
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 12-12-2016 12:44 » 

ошибкой является ситуация, в которой от этого состояния что либо зависит)
ничего подозрительного в этом нет. мне рассказывали, там непредсказуемо от многих физических факторов зависит состояние, но по факту оно объяснимо.

или простите, что значит выдать x:x??? нет такого состояния "x")  неопределенное состояние в том что оно не определено, а не в том, что логика знает что оно "неопределенное")

PS прошивки не пишу, но приходится часто в отладке участвовать.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Aether
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 12-12-2016 13:49 » 

ошибкой является ситуация, в которой от этого состояния что либо зависит)
ничего подозрительного в этом нет. мне рассказывали, там непредсказуемо от многих физических факторов зависит состояние, но по факту оно объяснимо.

или простите, что значит выдать x:x??? нет такого состояния "x")  неопределенное состояние в том что оно не определено, а не в том, что логика знает что оно "неопределенное")

PS прошивки не пишу, но приходится часто в отладке участвовать.
Так я и не пишу, что оно ошибочно, просто в начале опыта vvp показал, что способен на анализ неопределённых состояний, а потом как-то огорчил. Так-то Вы правы, даже мультивибратор, собранный из идеализированных компонентов запуститься не способен, и в реальной схеме всегда присутствует асимметрия. Строго говоря это означает, что две разные микросхемы при переходе из неопределённого состояния будут переключаться по разному, одной ближе будет "0", а другой "1".

Далее, существует некоторое различие между булевой алгеброй и физической аппаратурой. Естественно, модель, его описывающая, прорабатывается более тщательно, и помимо "0" и "1" вводятся дополнительные типы аргументов "х" - неопределёное, и "z" - высокоомное состояние. В контексте этого, таблицы операций также изменяются, например:
Из курса алгебры "И":
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
Из представлений HDL "И":
0 & x = 0
1 & 0 = 0
1 & 1 = 1
x & x = x

Собственно, что интересно: пользователем xilinx доступен анализатор vivado - существенно более продвинутый инструмент. Вот что покажет он?

Сейчас маленько занят, но попробую собрать более сложные виды тиггеров: D-latch и JK. Думаю, последний будет даже более показателен, но будет ли он работать при анализе? Естественно, что при реальной прошивке он может и запустится как надо, просто сопутствующий вопрос - это: могу ли я доверять программному анализатору и какому?
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 12-12-2016 14:13 » new

https://www.xilinx.com/support/documentation/university/Vivado-Teaching/HDL-Design/2013x/Nexys4/Verilog/docs-pdf/lab5.pdf

кстати у нас ребята синплифаем пользуются исключительно. он как ни странно лучше айса/вивады.
а вивада старые кристаллы не поддерживает до 7-мой кажется серии.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines