-1

我为和门编写了一个简单的测试台。我的代码和测试台工作正常。现在我想做的是“我正在尝试为我的案例实现一个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

4 回答 4

2

嘿,我想你可能想要

 while( count <= 100) 

你从来没有进入过while循环,因为你从零开始,所以

while(count==100)

从不评估为真

于 2013-06-20T08:16:09.843 回答
1

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

while(count<=100)

并且 count++ 在verilog中也不起作用。利用

count = count + 1

而不是计数++。

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

于 2013-06-21T05:35:39.143 回答
1

几个问题:

  1. while循环的咖喱括号(ei{})需要分别 替换为beginandend
    • 如果模拟器没有生成语法错误并且当前代码不遵循 Verilog 或 SystemVerilog 允许的用法,则模拟器存在错误。

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

  3. while(count==100)应该是while(count<=100)while(count<100)
    • 如果使用==则整个循环将被跳过,因为count它被初始化为零。
    • 循环的替代解决方案:使用for(integer count=0; count<100; count++) 而不是while(count<100)
于 2013-06-26T21:46:51.880 回答
0

while(count == 100)?!

[........8 more chars].

于 2013-06-20T07:43:12.647 回答