verilog代码中的语法错误
我想把这个c代码转换成verilog模块,但我遇到了一些困难verilog代码中的语法错误,verilog,fpga,system-verilog,hdl,Verilog,Fpga,System Verilog,Hdl,我想把这个c代码转换成verilog模块,但我遇到了一些困难 void window_averaging(void) { register unsigned int i, k; for (i = 0; i < 128; i++) { // Copying first 128 output samples to the Window 0 and so on till Window 7. W[count][i] = O[i]; } for (i = 0;
void window_averaging(void) {
register unsigned int i, k;
for (i = 0; i < 128; i++) {
// Copying first 128 output samples to the Window 0 and so on till Window 7.
W[count][i] = O[i];
}
for (i = 0; i < 128; i++) {
for (k = 0; k< 8; k++) {
O[i] += W[k][i];
}
O[i] /= 8; // Averaging over 8 window
}
count = (count++)%8; // Count = 0 after all the window elements are filled.
}
void窗口\u平均值(void){
寄存器无符号整数i,k;
对于(i=0;i<128;i++){
//将前128个输出样本复制到窗口0,依此类推,直到窗口7。
W[count][i]=O[i];
}
对于(i=0;i<128;i++){
对于(k=0;k<8;k++){
O[i]+=W[k][i];
}
O[i]/=8;//在8个窗口上求平均值
}
count=(count++)%8;//填充所有窗口元素后,count=0。
}
Verilog:
module window_averaging(
input [16:0]in_noise, //input from noise cancellation
input clk,
output reg [16:0]window_average // output after window averaging
);
integer i;
integer k;
integer count = 0;
reg [16:0] store_elements[0:7][0:128]; // 2-D array for window averaging
reg [16:0] temp;
always @(posedge clk)
begin
// Copying first 128 output samples to the Window 0 and so on till Window 7
for(i=0 ; i < 128 ; i = 1+1)
begin
store_elements[count][i] = in_noise;
end
for(i=0; i<128 ; i=i+1)
begin
for(k=0;k<8;k = k+1)
begin
temp = temp + store_elements[i][k];
end
window_average = temp/8;
count = (count+1)%8;
end
end
endmodule
模块窗口\u平均(
在_noise中输入[16:0],//来自噪声消除的输入
输入时钟,
输出寄存器[16:0]窗口平均//窗口平均后的输出
);
整数i;
整数k;
整数计数=0;
reg[16:0]存储元素[0:7][0:128];//用于窗口平均的二维阵列
注册[16:0]温度;
始终@(posedge clk)
开始
//将前128个输出样本复制到窗口0,依此类推,直到窗口7
对于(i=0;i<128;i=1+1)
开始
存储单元[计数][i]=在噪声中;
结束
对于(i=0;i首先,您尝试从@always块内部驱动导线,这是不允许的。如果您将导线转换为regs,则它将工作:
module window_averaging(
input [16:0]in_noise, //input from noise cancellation
input clk,
output reg [16:0]window_average // output after window averaging
);
integer i;
integer k;
integer count = 0;
reg [16:0] store_elements[0:7][0:128]; // 2-D array for window averaging
reg [16:0] temp;
...
另外,我认为要与C代码保持一致,行计数=(计数+1)%8;应该在for循环之外,如下所示:
window_average = temp/8;
end
count = (count+1)%8;
end
endmodule
我不知道您正在使用什么进行编译,但我认为以下内容应该会给您带来错误:
对于第一个循环:
for(i=0 ; i < 128 ; i = 1+1)
记住声明store_元素[0:7][0:128]
,所以可能是开关i
和k
这不是一个真正的答案。对不起,我还没有评论权限。谢谢你的回复,我这样做了,错误消失了,但是当我对代码进行模拟时,我得到的输出值是未知值(X).正如Remian8985所说,您还有两个错误。当您修复这些错误时,它会起作用吗?在您的模拟中,您是否将In_noise设置为一些合理的值(而不是“X”)?
temp = temp + store_elements[i][k];