而在测试台和门的循环。没有输出

时间:2013-06-20 04:59:52

标签: verilog

我写了一个简单的测试台和门。我的代码和测试平台工作正常。现在我想做的是“我正在尝试为我的案例实现一个while循环”。我没有得到语法错误但没有看到任何输出。任何人都可以告诉我的错误吗?。

timescale 1ns / 100ps


int count=0;
module and_gate_test;

    // Inputs
    reg in1_t;
    reg in2_t;

    // Outputs
    wire out_t;

    // Instantiate the Unit Under Test (UUT)
    and_gate and_gate_1 (in1_t,in2_t,out_t);


    initial 
    begin
        // Initialize Inputs
        //case 0
        while(count==100){
        in1_t <= 0;
        in2_t <= 0;
        #1 $display ("out_t=%b",out_t);
                //case 1
        in1_t <= 1;
        in2_t <= 1;
        #1 $display ("out_t=%b",out_t);

        //case2
        in1_t <= 0;
        in2_t <= 1;
        #1 $display ("out_t=%b",out_t);

        //case3
        in1_t <= 1;
        in2_t <= 0;
        #1 $display ("out_t=%b",out_t);

       count++; }
        // Add stimulus here

    end

endmodule

4 个答案:

答案 0 :(得分:2)

嘿,我想你可能想要

 while( count <= 100) 

你从未进入过循环,因为你从零开始,所以

while(count==100)

永远不会评估为真

答案 1 :(得分:1)

你使用的while循环将永远不会执行,因为计数永远不会等于100,正如Alex Rellim所说。它应该像

while(count<=100)

并且count ++将无法在verilog中运行。使用

count = count + 1

而不是计数++。

而且while循环应该有开始和结束而不是花括号。

答案 2 :(得分:1)

一些问题:

  1. while-loop的咖喱括号(e.i。{})需要分别由beginend替换
    • 如果模拟器没有生成语法错误,并且当前代码不遵循Verilog或SystemVerilog允许的使用,则模拟器有错误。

  2. int count=0;需要在模块内部
    • 注意int是SystemVerilog。如果您想严格遵循IEEE Std 1364,请使用integer。如果您想使用IEEE Std 1800,则可以使用intint默认为32'd0 integer默认为32'dX

  3. while(count==100)应为while(count<=100)while(count<100)
    • 如果使用==,则会跳过整个循环,因为count初始化为零。
    • 循环的
    • 替代解决方案:使用for(integer count=0; count<100; count++) 而不是while(count<100)

答案 3 :(得分:-1)

while(count == 100)?!

[........另外8个字符]。