首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请前辈们指点一下 急!

请前辈们指点一下 急!

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

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]

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

建议你:

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

楼上正解!
返回列表