Какова синтезированная цифровая схема для этого [verilog] мультиплексора с неполным списком чувствительности? - PullRequest
0 голосов
/ 03 декабря 2018

Синтезированная неоптимизированная цифровая схема для следующего кода:

a, b и c имеют длину 1 бит.У sel есть 2 бита.

always@(a, b, sel)
case(sel)
    begin
    2'b00: a;
    2'b01: b;
    2'b10: c;
    default: 0;
    end
endcase

Если я не ошибаюсь, у нас будет мультиплексор с тремя входами и двумя битами выбора.

В качестве битов выбора у нас есть sel [0] и sel [1].В качестве входных данных у нас есть a, b и защелка.Защелка будет иметь в качестве входных данных c и что-то еще.Я не знаю, что еще нужно ввести в защелку.

Этот вопрос только образовательный.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Большинство синтезаторов не рассматривают список чувствительности, если только он не предназначен для синхронной логики.Поведение с фиксацией, которое вы увидите в симуляции, не произойдет после синтеза.Основная причина @* была добавлена ​​в IEEE1364-2001 для предотвращения случайных пропусков из списка чувствительности.

Если вы действительно хотите вывести защелоченную версию c, то вам нужно создать защелку перед мультиплексором:

always @*
  if (lat_en) c_latch <= c;
always @*
  case(sel)
    2'b00: a;
    2'b01: b;
    2'b10: c_latch;
    default: 0;
  endcase

Чувствительные к уровню защелки не распространены на FPGA.Они экономно используются на ASIC из-за проблем с синхронизацией.Чувствительные к краям шлепанцы обычно предпочтительнее:

always @(posedge clk)
  if (update) c_ff <= c;
always @*
  case(sel)
    2'b00: a;
    2'b01: b;
    2'b10: c_ff;
    default: 0;
  endcase
0 голосов
/ 03 декабря 2018

Это не синтезирует в цифровую логику.Сигнал разрешения для защелки на c должен быть «когда любой из 4 битов {a, b, sel} изменится, а затем закроет его, прежде чем c изменится снова».

...