Skip to content

Final project - Top level module

Code

/*
 *
 * Based on Pablo Aravena's work
 * Updated by Philippe Libioulle for Fab Futures 
 *
 */

module puf_top (
    input  wire [7:0] ui_in,    // Dedicated inputs - challenge
    output wire [7:0] uo_out,   // Dedicated outputs - response
    // verilator lint_off UNUSEDSIGNAL
    input  wire [7:0] uio_in,   // IOs: Input path - not used 
    output wire [7:0] uio_out,  // IOs: Output path - not used
    output wire [7:0] uio_oe,   // IOs: Enable path (active high: 0=input, 1=output) - not used 
    // verilator lint_on UNUSEDSIGNAL
    input  wire       ena,      // always 1 when the design is powered, so you can ignore it
    input  wire       clk,      // clock
    input  wire       rst_n     // reset_n - low to reset
);

  // All output pins must be assigned. If not used, assign to 0.
  assign uio_out = 8'b00000000;
  assign uio_oe  = 8'b00000000;

  // List all unused inputs to prevent warnings
  wire _unused = &{1'b0};

  localparam n_bits = 8;

  // verilator lint_off UNUSEDSIGNAL
  wire[n_bits-1:0] finish;
  // verilator lint_on UNUSEDSIGNAL

  genvar i;

  generate
    for (i = 0; i < n_bits; i = i+1) begin
      puf_bit myBuffer(.challenge(ui_in[n_bits-1:0]), .clk(clk), .rst_n(rst_n), .enable(ena), .response(uo_out[i]), .done(finish[i]));
    end
  endgenerate

endmodule

Lint

/foss/designs/philippelibioulle/designs > make lint-top
verilator --lint-only -Wall -Ilib puf/puf_bit.v puf/ro.v puf/mux.v puf/counter.v puf/arbiter.v puf/puf_top.v  config.vlt
- V e r i l a t i o n   R e p o r t: Verilator 5.044 2026-01-01 rev v5.044
- Verilator: Built from 0.131 MB sources in 7 modules, into 23.107 MB in 26 C++ files needing 0.000 MB
- Verilator: Walltime 1.591 s (elab=0.003, cvt=1.261, bld=0.000); cpu 1.591 s on 1 threads; alloced 233.344 MB