2016-11-18 3 views
0

Я использую этот фрагмент функции, чтобы сделать 7-сегментный дисплей более удобочитаемым. Почему он печатает '00', а не '0E'?Результат функции Verilog отличается от ожидаемого

http://www.iverilog.com/index.php?public_code=v6o1rG

module main; 

function disp; 
input [6:0] a; 
begin 
    case (a) 
     7'b0000001 : disp=4'h0; 
     7'b1001111 : disp=4'h1; 
     7'b0010010 : disp=4'h2; 
     7'b0000110 : disp=4'h3; 
     7'b1001100 : disp=4'h4; 
     7'b0100100 : disp=4'h5; 
     7'b0100000 : disp=4'h6; 
     7'b0001111 : disp=4'h7; 
     7'b0000000 : disp=4'h8; 
     7'b0001100 : disp=4'h9; 
     7'b0001000 : disp=4'hA; 
     7'b1100000 : disp=4'hB; 
     7'b0110001 : disp=4'hC; 
     7'b1000010 : disp=4'hD; 
     7'b0110000 : disp=4'hE; 
     7'b0111000 : disp=4'hF; 
     default : disp=4'bxxxx; 
    endcase 
end 
endfunction 

initial 
    begin 
    $display("%h%h", disp(7'b0000001), disp(7'b0110000)); //expecting 0E 
    $finish; 
    end 
endmodule 

ответ

5

Вы пропускаете размер выхода из функции. По умолчанию он равен 1 бит, и поскольку первый бит 'hE равен 0, он возвращает ноль.

Изменить объявление функции для:

function [3:0] disp; 
Смежные вопросы