Какой будет хороший способ написать 10-битный декодер? - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь записать 10-битный двоичный код в тепловой декодер.

Для 4-битного декодера это относительно просто, как показано ниже. Тем не менее, для 10 битов есть более разумный способ сделать это вместо записи 1000-строчного кода.

module decoder(in,out);
   input [3:0] in;
   output [15:0] out;
//   input       enable;
   reg [15:0]        out;

   always @(in) begin
      casez(in) 
        4'h1: out=16'b0000000000000001;
        4'h2: out=16'b0000000000000011;
        4'h3: out=16'b0000000000000111;
        4'h4: out=16'b0000000000001111;
        4'h5: out=16'b0000000000011111;
        4'h6: out=16'b0000000000111111;
        4'h7: out=16'b0000000001111111;
        4'h8: out=16'b0000000011111111;
        4'h9: out=16'b0000000111111111;
        4'hA: out=16'b0000001111111111;
        4'hB: out=16'b0000011111111111;
        4'hC: out=16'b0000111111111111;
        4'hD: out=16'b0001111111111111;
        4'hE: out=16'b0011111111111111;
        4'hF: out=16'b0111111111111111;
       default: out=16'h0000;
      endcase
     end

endmodule

1 Ответ

1 голос
/ 02 октября 2019

Да, вы можете сделать этот модуль полностью параметризуемым, используя неуправляемый цикл for. Этот цикл будет проверять каждый бит сигнала out, если индекс цикла все еще меньше двоичного входного сигнала.

Код будет выглядеть следующим образом:

module decoder #(
  parameter IN_W  = 10,
  parameter OUT_W = 1 << IN_W
)
(
  input      [IN_W-1:0]    in,
  output reg [OUT_W-1:0]   out
);

  integer i;

  always @* begin
    // Use an unrollable loop.
    for (i = 0; i < OUT_W; i++) begin
      // (in < i) returns a 1-bit value
      out[i] = (in < i);
    end
  end

endmodule

Как вы, наверное, заметили, я также изменил способ объявления портов. В Verilog 2001 - а также в более поздних (системных) версиях Verilog - список портов и объявление портов могут комбинироваться. Этот новый синтаксис, также известный как стиль ANSI, имеет то преимущество, что вам не нужно добавлять столько стандартного кода.

...