ModelSim意外的z输入

问题描述 投票:0回答:1

我正在构建一个简单的7段显示器.当我编译模块和测试本时,我没有出现错误.但是,当我在模拟时,我一直得到 z 值作为输入。 为什么我得到的是 z?

Verilog代码如下。

module  dec_7seg(d, seg);

input [3:0]d;
output [7:0]seg;

assign seg[1]= (d[1]&~d[2]) | d[0] | (~d[1]&d[2]) | (d[2]&~d[3]);
assign seg[2]= (~d[0]&d[1]) | (~d[1]&~d[2]&~d[3]) | (d[1]&d[2]) | (d[0]&~d[1]&d[3]);
assign seg[3]= (~d[1]&~d[3]) | (d[0]&d[1]) | (d[2]&~d[3]) | (d[0]&d[2]);
assign seg[4]= (~d[1]&~d[3]) | (d[1]&~d[2]&d[3]) | (~d[1]&d[2]) | (d[2]&~d[3]) | (d[0]&~d[3]);
assign seg[5]= (~d[2]&d[3]) | (~d[0]&d[1]) | (~d[0]&~d[2]) | (d[0]&~d[1]) | (~d[0]&d[3]);
assign seg[6]= (~d[1]&~d[2]) | (~d[0]&~d[2]&~d[3]) | (~d[0]&~d[1]) | (~d[0]&d[2]&d[3]) | (d[0]&~d[2]&d[3]) | (d[0]&d[2]&~d[3]);
assign seg[7]= (~d[1]&~d[3]) | (~d[0]&d[2]) | (d[1]&d[2]) | (~d[0]&d[1]&d[3]) | (d[0]&~d[1]&~d[2]);

endmodule

Testbench 。

  `timescale 1ns/1ps
module tb_dec_7seg_selfchecking();
reg [3:0] d;
wire [7:0] seg;
dec_7seg U0(.d(d),.seg(seg));

initial begin
d=4'b0000; #10; //0000
if(seg !== 8'b11111100)$display("0 fail");
d=4'b1000; #10; //0001 
if(seg !== 8'b01100000)$display("1 fail");
d=4'b0100; #10; //0010
if(seg !== 8'b11011010)$display("2 fail");
d=4'b1100; #10; //0011
if(seg !== 8'b11110010)$display("3 fail");
d=4'b0010; #10; //0100
if(seg !== 8'b01100110)$display("4 fail");
d=4'b1010; #10; //0101
if(seg !== 8'b10110110)$display("5 fail");
d=4'b0110; #10; //0110
if(seg !== 8'b10111110)$display("6 fail");
d=4'b1110; #10; //0111
if(seg !== 8'b11100100)$display("7 fail");
d=4'b0001; #10; //1000
if(seg !== 8'b11111110)$display("8 fail");
d=4'b1001; #10; //1001
if(seg !== 8'b11100110)$display("9 fail");
d=4'b0101; #10; //1010
if(seg !== 8'b11111010)$display("a fail");
d=4'b1101; #10; //1011
if(seg !== 8'b00111110)$display("b fail");
d=4'b0011; #10; //1100
if(seg !== 8'b00011010)$display("c fail");
d=4'b1011; #10; //1101
if(seg !== 8'b01111010)$display("d fail");
d=4'b0111; #10; //1110
if(seg !== 8'b11011110)$display("e fail");
d=4'b1111; #10; //1111
if(seg !== 8'b10001110)$display("f fail");


end
endmodule
verilog modelsim
1个回答
1
投票

你不开车 seg[0]. 安 output port被隐式声明为 wirewire 类型默认为 z 未驱动时。 为了摆脱 z由于你的测试平台期望位0为0,你可以在你的测试平台中添加这一行。dec_7seg 模块。

assign seg[0]= 0;
© www.soinside.com 2019 - 2024. All rights reserved.