【问题标题】:Division in verilog with test带测试的verilog除法
【发布时间】:2020-04-29 04:02:06
【问题描述】:

我收到以下错误

保留所有权利 该程序是专有和保密的 Synopsys Inc. 的信息,只能作为 在控制此类使用和披露的许可协议中获得授权。

警告:产品 vcscompiler_Net (723) 的许可证将在 26 天,日期:2015 年 12 月 31 日。如果您想暂时禁用 此消息,将 vcs LIC EXPIRE WARNING 环境变量设置为 您希望此消息在到期前的天数 开始(最小值为 0)。解析设计文件'../src/divi .v' 错误-[SE] 语法错误“以下verilog源有语法错误

.../src/divi .v", 12: token is 'bit' reg [4:0] bit;

系统verilog关键字'bit'预计不会在此使用 语境。 1 错误 CPU 时间: .143 秒编译 eng-sv r-0:/class/linux/avicente/ASIC_Design/work>

module streamlined_divider(quotient,remainder,ready,dividend,divider,start,clk);


input [15:0]  dividend,divider;
   input         start, clk;
   output [15:0] quotient,remainder;
   output        ready;

   reg [15:0]    quotient;
   reg [31:0]    dividend_copy, divider_copy, diff;
   wire [15:0]   remainder = dividend_copy[15:0];

   reg [4:0]     bit;
   wire          ready = !bit;

   initial bit = 0;

   always @( posedge clk )

     if ( ready && start ) begin

        bit = 16;
        quotient = 0;
        dividend_copy = {16'd0,dividend};
        divider_copy = {1'b0,divider,15'd0};

     end else begin

        diff = dividend_copy - divider_copy;
        quotient = { quotient[14:0], ~diff[31] };
        divider_copy = { 1'b0, divider_copy[31:1] };
        if ( !diff[31] ) dividend_copy = diff;
        bit = bit - 1;

     end

endmodule

module l07_test_div();
   wire [15:0] quot, rem;
   reg [15:0]  shadow_quot, shadow_rem;
   reg [15:0]  a, b;
   integer    i;
   parameter  num_tests = 1000;

   reg        clk;
   initial clk = 0;
   always #1 clk = ~clk;

   reg        start;
   wire       ready;

   wire [15:0] infinity;
   assign     infinity = 16'hffff;

   // simple_divider div(quot,rem,ready,a,b,start,clk);
   streamlined_divider div(quot,rem,ready,a,b,start,clk);

   initial begin

      # 0.5;

      while ( !ready ) #1;

      for (i=0; i<num_tests; i=i+1) begin:A

         integer shadow_quot, shadow_rem;

         a = $random;
         b = i & 1 ? $random : $random & 3;
         start = 1;

         while ( ready ) #1;

         start = 0;

         while ( !ready ) #1;

         shadow_quot = b ? a / b : infinity;
         shadow_rem  = b ? a % b : a;

         #1;
         if ( quot != shadow_quot || rem != shadow_rem ) begin
            $display("Wrong quot: %h / %h  =  %h r %h  !=  %h r %h (correct)",
                     a, b, quot, rem, shadow_quot, shadow_rem);
            $stop;
         end
      end

      $display("Tried %d divide tests",num_tests);
      $stop;
   end

endmodule'

需要帮助找出错误

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    字符串bit 不能用作信号名称,因为它是关键字。请参阅 IEEE Std 1800-2012 部分“6.8 变量声明”。它于 2005 年被添加到语言中。

    您应该将bit 更改为my_bit 之类的内容(或对您的设计有意义的内容)。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多