Verilog functions
时间:10-02
整理:3721RD
点击:
今天练习了verilog的函数,当进行testbench测试时,输出总是显示第一位,其他位为高阻态,仔细检查了功能模块与testbench对应的端口位数相同,仿真的时候总是提醒位数不匹配,代码如下,求大神指导:module led_data(in_data,seg);
input[1:0] in_data;
output [1:0] seg;
reg seg;
always@(in_data)
begin
seg=display(in_data);
end
function[1:0] display;
inputdata;
case(data)
'd0:
display=2'b00;
'd1:
display=2'b01;
'd2:
display=2'b10;
'd3:
display=2'b11;
default:display=2'bxx;
endcase
endfunction
endmodule
`timescale 10ns/1ns
module led_data_tb();
reg[1:0] in_data_test;
wire[1:0] seg_test;
initial
begin
#100
in_data_test=0;
#100
in_data_test=1;
#100
in_data_test=2;
#100
in_data_test=3;
#1000 $stop;
end
led_data led_data1(.in_data(in_data_test),.seg(seg_test));
endmodule
input[1:0] in_data;
output [1:0] seg;
reg seg;
always@(in_data)
begin
seg=display(in_data);
end
function[1:0] display;
inputdata;
case(data)
'd0:
display=2'b00;
'd1:
display=2'b01;
'd2:
display=2'b10;
'd3:
display=2'b11;
default:display=2'bxx;
endcase
endfunction
endmodule
`timescale 10ns/1ns
module led_data_tb();
reg[1:0] in_data_test;
wire[1:0] seg_test;
initial
begin
#100
in_data_test=0;
#100
in_data_test=1;
#100
in_data_test=2;
#100
in_data_test=3;
#1000 $stop;
end
led_data led_data1(.in_data(in_data_test),.seg(seg_test));
endmodule
inputdata;
reg [1:0] seg;
^^^
output [1:0] seg;
reg seg;
这两句冲突了,仿真器忽略了第一次声明,用了1bit的reg。
嗯,明白了,谢谢!