verilog中BCD到7段解码器

verilog中BCD到7段解码器,verilog,modelsim,Verilog,Modelsim,我正在写一个代码来模拟bcd到七段解码器。当我这样做的时候,我在波形窗口(Modelsim)中得到了红色和蓝色的线条,这意味着输入没有被驱动,输出处于未定义的状态。但是当我通过强制值来运行代码时,它会显示正确的结果。从这一点上,我可以看出问题出在我的测试台上。如果有人能看看m代码并指出我做错了什么,我将不胜感激。 代码 //BCD to seven segment display module seven_segment; reg [3:0] BCD; wire [6:0] display; p

我正在写一个代码来模拟bcd到七段解码器。当我这样做的时候,我在波形窗口(Modelsim)中得到了红色和蓝色的线条,这意味着输入没有被驱动,输出处于未定义的状态。但是当我通过强制值来运行代码时,它会显示正确的结果。从这一点上,我可以看出问题出在我的测试台上。如果有人能看看m代码并指出我做错了什么,我将不胜感激。 代码

//BCD to seven segment display
module seven_segment;
reg [3:0] BCD;
wire [6:0] display;
parameter stop_time = 200;


bcd_seven n(display,BCD);       //Instantiation of the bcd to seven segment      display code

initial #stop_time $finish;

initial
begin
BCD = 0;
#10 BCD = 1;
#10 BCD = 2;
#10 BCD = 3;
#10 BCD = 4;
#10 BCD = 5;
#10 BCD = 6;
#10 BCD = 7;
#10 BCD = 8;
#10 BCD = 9;
end
initial begin
$monitor("display = %d BCD = %b",display,BCD);
end
endmodule 

//Decsription of the BCD to seven segment display
module bcd_seven(D,BCD);
output  D; 
reg [6:0] D;
input [3:0] BCD;

parameter BLANK = 7'b0000000;
parameter ZERO = 7'b1111110;
parameter ONE = 7'b0110000;
parameter TWO = 7'b1101101;
parameter THREE = 7'b1111001;
parameter FOUR = 7'b0110011;
parameter FIVE = 7'b1011011;
parameter SIX = 7'b1011111;
parameter SEVEN = 7'b1110000;
parameter EIGHT = 7'b1111111;
parameter NINE = 7'b1111011;

//I have doubt especially in this section
always @(BCD)
case(BCD)
0: D = ZERO;
1: D = ONE;
2: D = TWO;
3: D = THREE;
4: D = FOUR;
5: D = FIVE;
6: D = SIX;
7: D = SEVEN;
8: D = EIGHT;
default: D = BLANK;
endcase
endmodule

我确实注意到你的代码中有一个bug。您缺少BCD=9的case语句。但这并不能解释你看到的其他问题

我试着运行你的代码。输入是驱动的,输出不是未定义的。看起来没问题。你期望什么行为?你在哪个模拟器中运行它?我希望测试台正常工作,因此当我运行代码时,我应该得到所需的波形。在icarus verilog中运行你的代码应该工作。你能告诉我在知道特定代码在模拟器中工作之前,我应该寻找什么吗,我的意思是,我们能知道一种特殊的代码编写风格是否适用于这个模拟器而不是这个模拟器吗?