带测试的verilog除法

带测试的verilog除法,verilog,system-verilog,Verilog,System Verilog,我收到以下错误 保留所有权利本程序是专有和保密的 Synopsys Inc.的信息,仅可在以下情况下使用和披露: 在控制此类使用和披露的许可协议中授权 警告:产品vcscompiler_Net(723)的许可证将在年内到期 26天,日期:2015年12月31日。如果要临时禁用 通过此消息,将vcs LIC过期警告环境变量设置为 您希望此邮件在到期前的天数 开始(最小值为0)。正在分析设计文件“../src/divi.v” 错误-[SE]语法错误“以下verilog源有语法错误 ../src/di

我收到以下错误

保留所有权利本程序是专有和保密的 Synopsys Inc.的信息,仅可在以下情况下使用和披露: 在控制此类使用和披露的许可协议中授权

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

../src/divi.v”,12:令牌为'bit'reg[4:0]位

系统verilog关键字“bit”不应在本文件中使用 上下文1错误CPU时间:.143秒编译eng sv r-0:/class/linux/Avicent/ASIC_设计/工作>

module\u除法器(商、余数、就绪、被除数、除法器、开始、时钟);
输入[15:0]股息,除法器;
输入启动,时钟;
输出[15:0]商,余数;
输出就绪;
reg[15:0]商;
reg[31:0]股息副本,分割副本,差异;
电汇[15:0]余数=股息+副本[15:0];
reg[4:0]位;
电线准备就绪=!一点
初始位=0;
始终@(posedge clk)
如果(准备就绪&启动)开始
位=16;
商=0;
股息副本={16'd0,股息};
分隔符_copy={1'b0,分隔符,15'd0};
结束,否则开始
diff=股息副本-除法器副本;
商={商[14:0],~diff[31]};
除法器拷贝={1'b0,除法器拷贝[31:1]};
如果(!diff[31])股息_copy=diff;
位=位-1;
结束
端模
模块l07_test_div();
导线[15:0]quot,雷姆;
reg[15:0]shadow,shadow,rem;
reg[15:0]a,b;
整数i;
参数num_tests=1000;
注册时钟;
初始clk=0;
始终#1 clk=~clk;
注册开始;
电线准备就绪;
线[15:0]无穷大;
指定无穷大=16'hffff;
//简单除法器分区(QUOTE、rem、ready、a、b、start、clk);
流线型分隔器分区(QUOTE、rem、ready、a、b、start、clk);
初始开始
# 0.5;
而(!ready)#1;

对于(i=0;i而言,字符串
不能用作信号名称,因为它是一个关键字。请参阅IEEE Std 1800-2012“6.8变量声明”一节。它于2005年添加到语言中


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

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

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

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'