Board logo

标题: 请前辈们指点一下 急! [打印本页]

作者: chyanting    时间: 2009-4-7 22:06     标题: 请前辈们指点一下 急!

我写了一个简单的移位寄存器模块,综合出错,代码及错误报告如下:(代码中红色部分为出错行)

module shift_full(clock,rst,count,data_out);
parameter group_num=0;
parameter data_width=4;
input [group_num+data_width-1:0]count;
input clock,rst;
output [group_num+data_width-1:0]data_out;
reg [7:0] shift_reg [group_num+data_width-1:0];
assign data_out = shift_reg[0];

always @(negedge rst or posedge clock)
begin
if (!rst)
shift_reg<=0;
else
shift_reg<={shift_reg[6:0],count};
end

endmodule

ERROR:HDLCompilers:106 - "shift_full.v" line 35 Illegal left hand side of nonblocking assignment
ERROR:HDLCompilers:108 - "shift_full.v" line 35 Part-select of vector reg array 'shift_reg' is illegal
ERROR:HDLCompilers:107 - "shift_full.v" line 35 Illegal right hand side of nonblocking assignment
请前辈们指点一下该怎么改阿 存储器单元选择不是可以的吗,为什么提示我部分选择存储器单元是违法的,又不是对单元中的某个位选择!! 前辈们帮帮我!!!

[em06][em06][em06][em06]
作者: awetman    时间: 2009-4-25 12:32

你用的是数组,整体传送,怎么可以呢!

建议你:

module shift_full(clock,rst,count,data_out);
parameter group_num=0;
parameter data_width=4;
input [group_num+data_width-1:0]count;
input clock,rst;
output [group_num+data_width-1:0]data_out;
reg [7:0] shift_reg [group_num+data_width-1:0];
assign data_out = shift_reg[0];
integer i;
always @(negedge rst or posedge clock)
begin
if (!rst)
for(i=0;i<group_num+data_width;i=i+1)
shift_reg<=0;
else
for(i=0;i<group_num+data_width;i=i+1)
shift_reg<={shift_reg[6:0],count};
end
endmodule


作者: laoniao    时间: 2009-5-5 17:16

楼上正解!




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0