带测试的verilog除法
我收到以下错误 保留所有权利本程序是专有和保密的 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_设计/工作>带测试的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
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'