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

Счётчик Грея на Verilog: 4-битный генератор кода Грея

Проект

module gray_ctr #(parameter N = 4) (
  input  clk, rstn,
  output reg [N-1:0] out
);
  reg [N-1:0] q;
  always @(posedge clk) begin
    if (!rstn) begin
      q <= 0; out <= 0;
    end else begin
      q <= q + 1;
      `ifdef FOR_LOOP
        for (int i = 0; i < N-1; i = i+1)
          out[i] <= q[i+1] ^ q[i];
        out[N-1] <= q[N-1];
      `else
        out <= {q[N-1], q[N-1:1] ^ q[N-2:0]};
      `endif
    end
  end
endmodule

Код Грея формируется как XOR смежённых битов бинарного счётчика q. Реализация показана двумя способами: через цикл и через конкатенацию/сдвиг.

Тестбенч

module tb;
  parameter N = 4;
  reg clk, rstn;
  wire [N-1:0] out;

  gray_ctr u0 (.clk(clk), .rstn(rstn), .out(out));

  always #10 clk = ~clk;

  initial begin
    {clk, rstn} <= 0;
    $monitor("T=%0t rstn=%0b out=0x%0h", $time, rstn, out);
    repeat(2) @(posedge clk);
    rstn <= 1;
    repeat(20) @(posedge clk);
    $finish;
  end
endmodule

Результат симуляции (последовательность Грея)

T=0   rstn=0 out=0xx
T=10  rstn=0 out=0x0
T=30  rstn=1 out=0x0
T=50  rstn=1 out=0x1
T=70  rstn=1 out=0x3
T=90  rstn=1 out=0x2
T=110 rstn=1 out=0x6
T=130 rstn=1 out=0x7
T=150 rstn=1 out=0x5
T=170 rstn=1 out=0x4
T=190 rstn=1 out=0xc
T=210 rstn=1 out=0xd
T=230 rstn=1 out=0xf
T=250 rstn=1 out=0xe
T=270 rstn=1 out=0xa
T=290 rstn=1 out=0xb
T=310 rstn=1 out=0x9
T=330 rstn=1 out=0x8
T=350 rstn=1 out=0x0  // цикл повторяется
...
Simulation complete via $finish(1) at time 430 NS

Verilog

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