|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
大家好,我是做模拟的,我做混合仿真的过程中,数字设计人员给我的代码中有一段是关于RAM的代码。数字设计人员使用ncverilog编译仿真的,能够通过。因为混合仿真中好像cadence自动调用的verilogXL来进行编译和语法检查。而这段代码使用verilogXL编译,有两行始终无法通过。请高手指教原因和解决方法。通不过的代码为下面代码中的红色两行。
以前混合仿真时数字仿真器用的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 |
|