Pagina 1 di 1

Multiplexer con VERILOG. Perché la simulazione non parte?

MessaggioInviato: 5 nov 2016, 12:50
da g26
Ho scritto (o meglio, ho tentato di scrivere) un multiplexer con Verilog, che prendesse in ingresso quattro segnali da 3 bit e che ponesse in uscita solo uno di questi segnali. Ovviamente il selettore ha 2 bit.

Il codice del multiplexer è questo:
Codice: Seleziona tutto
`timescale 1ns / 1ps

module mux(
input wire [2:0]in1,
input wire [2:0]in2,
input wire [2:0]in3,
input wire [2:0]in4,
input reg [1:0]sel,
output reg [2:0]out
);

initial
    begin
        out = 3'b000;
        case (sel)
        2'b00: out = in1;
        2'b01: out = in2;
        2'b10: out = in3;
        2'b11: out = in4;
        default: begin
            out = 3'b000;
            sel = 2'b00;
            end
        endcase
    end
endmodule


Poi, per far partire la simulazione ho provato a scrivere il testbench:
Codice: Seleziona tutto
`timescale 1ns / 1ps

module tbmux;
reg [2:0]IN1;
reg [2:0]IN2;
reg [2:0]IN3;
reg [2:0]IN4;
reg [1:0]SEL;
wire [2:0]OUT;
mux dut(IN1,IN2,IN3,IN4,SEL,OUT);
//mux dut(.in1(IN1),.in2(IN2),.in3(IN3),.in4(IN4),.sel(SEL),.out(OUT));
initial
    begin
        $monitor($time,,"IN1=%b IN2=%b IN3=%b IN4=%b SEL=%b OUT=%b",IN1,IN2,IN3,IN4,SEL,OUT);
        IN1 = 3'b000;
        IN2 = 3'b001;
        IN3 = 3'b010;
        IN4 = 3'b100;
        #5 SEL = 2'b00;
        #5 SEL = 2'b01;
        #5 SEL = 2'b10;
        #5 SEL = 2'b11;
        #5 $stop;
    end
endmodule


Però la simulazione non parte. Penso di aver fatto un errore da qualche parte, ma essendo abbastanza niubbo in materia, non riesco a trovarlo. Qualcuno mi può aiutare?
Grazie mille!

Re: Multiplexer con VERILOG. Perché la simulazione non parte

MessaggioInviato: 5 nov 2016, 13:15
da g26
Ok, ho risolto, ho mantenuto lo stesso testbench, ma ho cambiato il modulo del mux:

Codice: Seleziona tutto
`timescale 1ns / 1ps

module mux(
input wire [2:0]in1,
input wire [2:0]in2,
input wire [2:0]in3,
input wire [2:0]in4,
input wire [1:0]sel,
output reg [2:0]out
);

always @(sel)
    case(sel)
        2'b00: out = in1;
        2'b01: out = in2;
        2'b10: out = in3;
        2'b11: out = in4;
    endcase
endmodule


Forse ho capito cosa stavo sbagliando: l'initial non aggiornava il valore di sel.