【问题标题】:4-bit Ripple Carry adder testbench in vivadovivado 中的 4 位纹波进位加法器测试台
【发布时间】:2018-04-23 11:48:46
【问题描述】:

以下代码适用于 4 位纹波进位加法器测试平台。它给了我 8 个语法错误,4 个接近结束,4 个接近其他。我不知道这些错误指的是什么,需要修复什么?

module rca_dataflow_tb(

reg [3:0] a,
reg [3:0] b,
reg cin,
reg [3:0] s,
reg cout

);

rca_dataflow uut(.a(a),.b(b),.cin(cin),.s(s),.cout(cout));

initial 
begin

#20
a = 4'b0;
b = 4'b0;
cin = 1'b0;
#20
if (s == 4'b0000 & cout == 1'b0) 
$display("Test Passed")
else 
$display("Test Failed")
end

#20
a = 4'b0010;
b = 4'b0000;
cin = 1'b0;
#20
if (s == 4'b0010 & cout == 1'b0)
$display("Test Passed")
else 
$display("Test Failed")
end


end
endmodule

【问题讨论】:

    标签: if-statement syntax vivado


    【解决方案1】:

    下次也请列出语法错误。

    但是在这种情况下,它是相当明显的:你有额外的end 语句在那里。语法是:

    if (condition)
        statement_or_block;
    else
        statement_or_block;
    

    另外(谢谢凯文!)您的显示器最后缺少分号,并且 您的顶级测试台应该没有端口。所有信号都是本地的:

    module rca_dataflow_tb;
    reg [3:0] a;
    reg [3:0] b;
    // etc.
    

    另外我建议你使用条件与而不是逻辑与:
    if (s == 4'b0010 && cout == 1'b0)

    顺便说一句,如果您首先将表达式转换为单个位,则可以使用逻辑 AND:
    if ( (s==4'b0010) & (cout==1'b0) )

    【讨论】:

      【解决方案2】:

      您的代码中有一些非常基本的错误。

      1. 您没有在所有 4 个 $display 语句的末尾使用 ;
      2. 您不能使用reg 作为端口声明的类型。事实上,因为这是您的 TB,所以不会有端口。您可以只做module rca_dataflow_tb(); 并将所有 reg 语句移到外部
      3. 对 DUT 的输入使用 reg 数据类型,对 DUT 输出使用 wire

      这应该可以解决问题。如果您仍然遇到问题,请告诉我

      【讨论】:

      • 抱歉,您的回答消失了(显示为已删除),因此我将您的 cmets 添加到我的。
      • 没有问题。谢谢!
      • 我已经按照你的建议做了,但是有一个新的错误提示'rca_dataflow_tb'附近的语法错误
      • 您在module rca_dataflow_tb(); 的末尾添加了; 吗?抱歉,我现在编辑的答案中有错字
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多