Ответы на вопросы (29.10.2010)

Ответы на вопросы (29.10.2010)

Сообщение sash » 29 окт 2010, 15:47

На этой и предыдущей лекциях возникли вопросы, на которые я обещал найти ответы:
1. В каком порядке производится вычисление поразрядной свертки, например ~|value: попарно биты, а затем инверсия результата или все разряды одновременно (ИЛИ от всех разрядов), а затем инверсия результата?

Как показали эксперименты, порядок не имеет значения. Например, свертка ~^ дает одинаковые результаты как при каскадном вычислении ^ разрядов с инверсией в конце каскада, так и при вычислении одновременно исключающего ИЛИ от всех разрядов с инверсией результата. См. следующий код:
Код: Выделить всё
module Testbench;

  reg [7:0] value;
  integer i;
  wire out_seq, out_reduction;

  assign out_reduction = ^~value;

  xor (v1, value[0], value[1]);
  xor (v2, v1,       value[2]);
  xor (v3, v2,       value[3]);
  xor (v4, v3,       value[4]);
  xor (v5, v4,       value[5]);
  xor (v6, v5,       value[6]);
  xnor (out_seq, v6,  value[7]);

  initial
  begin
    $dumpfile("reduction.vcd");
    $dumpvars;

    value = 0;
    for(i = 0; i < 256; i = i + 1)
      #2 value = value + 1;

    $finish;
  end

  always @(value)
    #1 if(out_seq ^ out_reduction)
      $display("seq %b does not match reduction %b, value %x", out_seq, out_reduction, value);

endmodule


2. Укажем две задержки на вентиле, первую для перепада в лог. "1" (A), вторую для перепада в лог. "0" (B), причем вторую длинее первой (A < B). Задержка для перепада в "x" будет равна A (как меньшее из двух). Пусть на вентить подали значение, которое на выходе дает лог. "1". Что будет, если подать значение переключающее выход вентиля в лог. "0", а затем через время меньше (B - A) подать на вход "x"?

Вентиль переключится с лог. "1" в "x". Переключение в лог. "0" будет "отменено" произошедшим ранее (с меньшей задержкой) переключением в "x". См. пример.

Код: Выделить всё
module Testbench;

  reg in;
  wire out;

  initial
  begin
    $dumpfile("delay.vcd");
    $dumpvars;
    in = 0;
    #10 in = 1;
    #1  in = 'bx;
    #1  in = 1;
    #20 $finish;
  end

  not #(1, 6) n (out, in);

endmodule
sash
 
Сообщения: 90
Зарегистрирован: 28 фев 2009, 20:56

Вернуться в Организация и проектирование встроенных вычислительных систем

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1