2016-04-29 5 views
-1

Я новичок в verilog. Я использую Xilinx IDE. Мой модуль ALU выглядит следующим образом:Простая реализация ALU Verilog, нет выхода

module ALU(in1,in2,operation,clk,out  
); 
    input [15:0] in1; 
    input [15:0] in2; 
    input [3:0] operation; 
    input clk; 
    output[15:0] out; 
reg [15:0] out; 
[email protected](posedge clk) 
begin 
    case(operation) 
       4'b0010: 
        out <= in1+in2; 
       4'b0011: 
        out <= in1-in2; 
       4'b0100: 
        out <= !in1; 
       4'b0101: 
        out <= in1<<in2; 
       4'b0110: 
        out <= in1>>in2; 
       4'b0111: 
        out <= in1&in2; 
       4'b1000: 
        out <= in1|in2;  
       //4'b1001: 
       // out = in1>=in2?16'd0:16'd1; 
       default: out <= 16'hFFFF; 
    endcase 
end 
endmodule 

Мой испытательный стенд выглядит следующим образом

module test_projectALU; 
reg [15:0] in1; 
reg [15:0] in2; 
reg [3:0] operation; 
reg [15:0] out; 
reg clk; 

ALU PA(in1,in2,operation,out); 
initial 
begin 
operation=4'b0000; 
in1=4'b0000; 
in2=4'b0000; 
clk = 0; 
end 
always 
begin 
    #2 operation=4'b0010; in1=4'b0011; in2=4'b0000; 
    #2 operation=4'b0011; in1=4'b0001; in2=4'b0011; 
    #2 operation=4'b0000; in1=4'b1100; in2=4'b1101; 
    #2 operation=4'b0011; in1=4'b1100; in2=4'b1101; 
end 
always 
begin 
    #5 clk=~clk; 
    end 

initial $monitor($time,"f=%b, a=%b, b=%b,c=%b",operation,in1,in2,out); 
//initial #10 $stop; 
endmodule 

enter image description here

Мой выход для моделирования прилагается в качестве изображения.

Почему выход не определен (состояние X)? Что я делаю неправильно?

+2

В 'test_projectALU', измените 'out' с' reg' на 'wire'. – Greg

+2

NB: '! In1;' является логическим, а не in1. '~ in1' является поразрядным инвертированием in1, может быть, вы имели в виду здесь. – Morgan

ответ

2

out в вашем тестовом банке X, потому что ему никогда не присваивается значение. Вы ошибочно подключили его к порту clk экземпляра модуля ALU. Мой тренажер дает мне предупреждение:

ALU PA(in1,in2,operation,out); 
    | 
ncelab: *W,CUVWSP (./tb.v,41|5): 1 output port was not connected: out 

Изменение:

ALU PA(in1,in2,operation,out); 

к:

ALU PA(in1,in2,operation,clk,out); 

Использование соединений по имени вместо соединения-по-позиции может помочь избежать этого типа общей погрешности:

ALU PA (
     // Inputs: 
    .clk  (clk), 
    .in1  (in1), 
    .in2  (in2), 
    .operation (operation), 
     // Outputs: 
    .out  (out) 
);