问题描述
我正在为 CNN 中的卷积层编写 verilog 代码,但出现以下错误:
1)ERROR:HDLCompiler:257 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 52 行:不能分配给非变量 max_irow
2)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 52 行:对非寄存器 max_irow 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
3)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 52 行:对非寄存器 max_irow 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
4)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 52 行:对非寄存器 max_irow 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
5)ERROR:HDLCompiler:257 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 54 行:不能分配给非变量 max_icol
6)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 54 行:对非寄存器 max_icol 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
7)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 54 行:对非寄存器 max_icol 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
8)ERROR:HDLCompiler:257 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 56 行:不能分配给非变量 max_krow
9)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 56 行:对非寄存器 max_krow 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
10)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 56 行:对非寄存器 max_krow 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
11)ERROR:HDLCompiler:257 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 58 行:不能分配给非变量 max_kcol
12)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 58 行:对非寄存器 max_kcol 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
13)ERROR:HDLCompiler:1660 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 58 行:对非寄存器 max_kcol 的程序分配不是 允许,左侧应该是 reg/integer/time/genvar
14)ERROR:HDLCompiler:255 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 60 行:不能直接分配给内存总和
15)ERROR:HDLCompiler:747 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 60 行:前缀中不允许使用范围
16)ERROR:HDLCompiler:698 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 60 行:不允许部分选择内存映像
17)ERROR:HDLCompiler:971 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 60 行:运算符 *
的非法操作数18)ERROR:HDLCompiler:1373 - "D:\DSD_CEP_verilog\convolution_normal.v" 第 60 行:未打包的值/目标不能用于赋值
19)ERROR:HDLCompiler:598 - "D:\DSD_CEP_verilog\convolution_normal.v"
第 21 行:模块
我的verilog代码是:
module convolution_normal(sum,clk,image,kernel,bias);
/*suppose we have input image of size 15*16*3,and a kernel of size 3*3*3*/
parameter reg max_irow = 15; //number of input rows
parameter reg max_icol = 16; //number of input columns
parameter reg max_idepth = 3; //depth of input
parameter reg max_krow = 3; //number of kernel rows
parameter reg max_kcol = 3; //number of kernel columns
parameter reg max_kdepth = 3; //depth of kernel
parameter reg max_orow = 15; //number of output rows
parameter reg max_ocol = 16; //number of output columns
parameter reg max_odepth = 3; //depth of output
input clk;
input bias = 0;
input image[max_irow:0][max_icol:0][max_idepth:0];
input kernel[max_krow:0][max_kcol:0][max_kdepth:0];
output reg sum[max_orow:0][max_ocol:0][max_odepth:0];
always@(posedge clk)
begin
//NOTE: ++ does not exist in verilog
for (max_irow = 0; max_irow <= max_irow; max_irow = max_irow+1)
begin
for (max_icol = 0; max_icol <= max_icol; max_icol = max_icol+1)
begin
for(max_krow = 0; max_krow <= max_krow; max_krow = max_krow+1)
begin
for(max_kcol = 0; max_kcol <= max_kcol; max_kcol = max_kcol+1)
begin
sum = image[max_irow:0][max_icol:0][max_idepth:0]*kernel[max_krow:0][max_kcol:0][max_kdepth:0];
end
end
end
end
end
endmodule
有人能解决这个问题吗?
解决方法
你的循环不正确: 例如:
for (max_irow = 0; max_irow <= max_irow; max_irow = max_irow+1)
max irow 是一个参数而不是一个变量。不能递增或赋值。
所有其他循环都存在同样的问题。
你应该这样修改它们:
integer iter;
for (iter = 0; iter <= max_irow; iter = iter+1)