Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

4-к-1 мультиплексор на Verilog: assign и case реализации

Что такое мультиплексор?

Мультиплексор (mux) передаёт данные с одного из N входов на выход по управляющему сигналу sel. Для N=4 входов селектор 2-битный.

Значения sel и соответствующие выходы:

sel  a  b  c  d  out
0    3  7  1  9  3
1    3  7  1  9  7
2    3  7  1  9  1
3    3  7  1  9  9

Две распространённые реализации:

Реализация через assign

module mux_4to1_assign (
  input  [3:0] a, b, c, d,
  input  [1:0] sel,
  output [3:0] out
);
  assign out = sel[1] ? (sel[0] ? d : c) : (sel[0] ? b : a);
endmodule

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

Реализация через case

Выход out объявлен как reg, так как используется в always.

module mux_4to1_case (
  input  [3:0] a, b, c, d,
  input  [1:0] sel,
  output reg [3:0] out
);
  always @(a or b or c or d or sel) begin
    case (sel)
      2'b00: out <= a;
      2'b01: out <= b;
      2'b10: out <= c;
      2'b11: out <= d;
    endcase
  end
endmodule

Аппаратная схема

Обе модели синтезируются в идентичную схему.

Тестбенч

module tb_4to1_mux;
  reg [3:0] a, b, c, d;
  wire [3:0] out;
  reg [1:0] sel;
  integer i;

  mux_4to1_case mux0 (.a(a), .b(b), .c(c), .d(d), .sel(sel), .out(out));

  initial begin
    $monitor("[%0t] sel=0x%0h a=0x%0h b=0x%0h c=0x%0h d=0x%0h out=0x%0h", $time, sel, a, b, c, d, out);
    sel <= 0; a <= $random; b <= $random; c <= $random; d <= $random;
    for (i = 1; i < 4; i = i+1) begin #5 sel <= i; end
    #5 $finish;
  end
endmodule

Результат симуляции

[0]  sel=0x0 a=0x4 b=0x1 c=0x9 d=0x3 out=0x4
[5]  sel=0x1 a=0x4 b=0x1 c=0x9 d=0x3 out=0x1
[10] sel=0x2 a=0x4 b=0x1 c=0x9 d=0x3 out=0x9
[15] sel=0x3 a=0x4 b=0x1 c=0x9 d=0x3 out=0x3
Simulation complete via $finish(1) at time 20 NS

Verilog

  1. Освоение Verilog: полное руководство по проектированию цифровых схем
  2. Освоение конкатенации в Verilog: практическое руководство
  3. Понимание назначений в Verilog: типы, синтаксис и лучшие практики
  4. Блокирующие и неблокирующие назначения в Verilog: ключевые различия
  5. Мастерство функций в Verilog для эффективного RTL дизайна
  6. Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
  7. Генератор тактового сигнала в Verilog: проектирование и реализация
  8. Мастерство математических функций Verilog для эффективного аппаратного дизайна
  9. Мастерство $timeformat в Verilog: точность и контроль отображения времени
  10. Понимание и печать timescale в Verilog в любой области видимости