模拟人员请教verilog代码编译错误mem....
以前混合仿真时数字仿真器用的ldv,当时也遇到相同的问题,一直以为是版本太老不支持一些写法。这次用的数字仿真器为IUS92,按理说不应该存在版本问题了。另外,ncverilog与verilog来自同一个软件平台IUS92,应该使用同一个编译内核,为什么会出现这种差异呢?
报的错误为:
Error! syntax error [Van]
"/***/functional/verilog.v", 7434:
mem[A] [<-
module RAM8x13(
Q,CLK,CEN,WEN,A,D,DBin,
//wr_tosu,
wr_tosh,wr_tosl
);
input CLK; //stkptr access clock
input CEN; //stkptr access chip enable
input WEN; //stkptr access write enable
input [2:0]A; //stkptr address
input [`PA_PC:0]D; //stkptr data
input [7:0] DBin; //data bus
//input wr_tosu;//write TOS [20:16] signal
input wr_itosh; //write TOS [15:8] signal
input wr_tosl; //write TOS [7:0] signal
output [`PA_PC:0]Q; //stkptr data out
wire [`PA_PC:0]Q;
reg [`PA_PC:0]mem[7:0];
wire wr;
/*
wire rd;
assign rd = !CEN && WEN;
always @(posedge CLK)
begin
if(rd) //read data
Q <= mem[A];
else if(!CEN)
Q <= D;
end
*/
assign wr = !CEN && !WEN;
always @(posedge CLK)
if(wr) //write data
mem[A] <= D;
//else if(wr_tosu)
// mem[A] [20:16] <= DBin[4:0];
else if(wr_tosh)
mem[A] [13:8] <= DBin[5:0];
else if(wr_tosl)
mem[A] [7:0] <= DBin;
assign Q = mem[A];
endmodule
改成这样试下:
else begin
if(wr_tosh) mem[A] [13:8] <= DBin[5:0];
if(wr_tosl) mem[A] [7:0] <= DBin;
end
在verilog95中只能对MEM[`PA_PC:0]整体访问,不能部分、单独访问某几个、某个bit的,部分、单独访问是verilog2001增加的语法。VerilogXL好像默认是不支持verilog2001语法的。你查查看能不能加什么参数让它支持。
-sv ...........
谢谢朋友们的回答。
语法本身没有问题,我将上面两句注释掉,后面foundry提供的IP中也出现问题,问题出在语法支持上,orlye朋友说的对的。我提问后也去找了下,也看到了verilogXL的语法支持的问题。看来cadence是推着我们使用新的AMS designer,逐渐不修改老版本的spectreverilog了。
谢谢另外一位朋友的提醒,我去加-sv试一试。
简单的-sv参数好像不行的哦,-s为交互性,-v为lib file。
看来只能去用ams了。ams的数字仿真器使用的是nc-verilog。
后面的朋友有知道解决办法的请回一个,对spectre-verilog还是蛮有感情的呀。不过目前的spectre-verilog除了本贴讨论的这个问题外,还有一个缺点,就是不支持多核。
谁让你拆开理解的................., -sv是按 systemverilog文件编译, 总之ius92支持
查了下,-sv 表示systemverilog好像不是verilogXL的参数(我实际运行了下,也是不行的),而是ncvlog的参数。是我最前面描述不准确,我们说的混合仿真好像不一样,我说的混合仿真是模拟和数字混合仿真,仿真器在ADE中用的spectreverilog,仿真的时候,模拟仿真器自动去调用spectre,数字仿真器自动去调用verilogXL,两个仿真器通过IPC交换数据。
bluray2005理解的混合仿真好像是verilog与VHDL两种语言的混合仿真。对否?
我根本不管你什么混合仿真的。我只看你说那两行红的无法编译。 -sv 是 ncverilog的参数, 如果你用verilogXL我就不知道了
