Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Multiplexer con VERILOG. Perché la simulazione non parte?

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Multiplexer con VERILOG. Perché la simulazione non parte?

Messaggioda Foto Utenteg26 » 5 nov 2016, 12:50

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!
Avatar utente
Foto Utenteg26
55 4
 
Messaggi: 19
Iscritto il: 1 mag 2014, 10:49

1
voti

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

Messaggioda Foto Utenteg26 » 5 nov 2016, 13:15

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.
Avatar utente
Foto Utenteg26
55 4
 
Messaggi: 19
Iscritto il: 1 mag 2014, 10:49


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti