模块没有正确实例化?

时间:2015-11-20 03:22:30

标签: verilog

我有一个关于T-Bird尾灯的示例代码,它将状态传递给下一个模块。我修改了它不必通过状态的代码,但似乎输出没有改变(一直保持000)

这是我修改过的代码:

module TBird(E,B,L,R,int_clk,L_Light,R_Light);
input E,B,L,R,int_clk;
output [2:0] L_Light;
output [0:2] R_Light;
reg [19:0] C;
wire int_clk;

One_Side U1 (E,B,R,int_clk,R_Light);
One_Side U2 (E,B,L,int_clk,L_Light);
endmodule

module One_Side(e,b,t,clk,light_eb);
input e,b,t,clk;
output reg [2:0] light_eb=3'b000;
always @(posedge clk or e or b or t)
    begin
        case ({e,b,t})
        3'b000: light_eb=3'b000;
        3'b0?1: begin
                    if (light_eb==3'b000) begin
                        light_eb=3'b001;
                    end else if (light_eb==3'b001) begin
                        light_eb=3'b011;
                    end else if(light_eb==3'b011) begin
                        light_eb=3'b111;
                    end else begin
                        light_eb=3'b000;
                    end
                end
        3'b?10: light_eb=3'b111;
        3'b10?: begin
                    if (light_eb!==(3'b000|3'b111)) begin
                        light_eb=3'b000;
                    end
                    light_eb=~light_eb;
                end
        3'b111: begin
                    if (light_eb==3'b000) begin
                        light_eb=3'b001;
                    end else if (light_eb==3'b001) begin
                        light_eb=3'b011;
                    end else if(light_eb==3'b011) begin
                        light_eb=3'b111;
                    end else begin
                        light_eb=3'b000;
                    end
                end
        endcase
    end
endmodule

我有一些Java经验,但我对verilog一无所知,所以我甚至不知道哪里出错(在Java中,eclipse有断点和调试器等等, )任何建议/建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

测试平台和设计中的一些错误。列出如下:

未提供任何时钟信号切换。因此,不会检测到任何posedge时钟。有许多生成时钟的方法,其中一种方法如下:

always #5 clk = ~clk;

在设计中使用reset信号是一种很好的做法。从testbench应用重置,将设计中的所有i 内部寄存器设置为初始值

重要最重要的是你没有为设计提供任何输入激励。必须应用任何随机刺激才能获得输出。您必须提供一些输入才能获得输出,因此您的输出为x

initial
begin
forever
begin
  #6;
  E = $random;
  B = $random;
  R = $random; // and so on...
end
end

在设计中使用非阻塞(< =)赋值是一种很好的编码习惯。此外,不要混合阻止(=)和非阻止(< =)分配

a = b; // never use this in sequential circuit.
a<= b; // use this in sequential circuit.

我为您的设计制作了一个有点有效的测试平台,看一下EDAPlayground链接。

必须参考thisthisthis链接才能了解常规测试平台架构