Verilog程序编译时出现的,求修改/
input clk,rst_n;
reg[63:0] sc1,ac1,tc,tc1,s1;
reg[63:0] pd [1:510][1:510];
reg[31:0] nq[0:1];
integer i1,j1;
initial
always @(posedge clk or negedge rst_n)
begin
for(i=1;i<511;i=i+1)
begin
for(j=1;j<511;j=j+1)
begin
ac1=64'b0;
tc=64'b0;
sc1=64'b0;
for(k=0;k<=2;k=k+1)
begin
for(l=0;l<=2;l=l+1)
begin
ac1=ac1+pd[i+k][j+l];
end
end
for(k=0;k<=2;k=k+1)
begin
for(l=0;l<=2;l=l+1)
begin
tc1=pd[i+k][j+l]-ac1;
tc=tc+pd[i+k][j+l]*tc1;
end
end
s1=tc/9;
sc1=s1^0.5;
if(sc1<1.5)
begin
nq[0] = nq[0]+1;
end
else
begin
nq[1] = nq[1]+1;
end
end
end
end
endmodule
编译时出现这样的错误:Error (10170): Verilog HDL syntax error at Verilog1.v(12) near text "always"; expecting "@", or an identifier ("always" is a reserved keyword )
整死什么原因,求各位大神帮忙修改一下,谢谢?
去掉 initial 还有 input output 不对 需要把引脚引出
module srcn(clk,rst_n);
input clk,rst_n;
reg[63:0] sc1,ac1,tc,tc1,s1;
reg[63:0] pd [1:510][1:510];
reg[31:0] nq[0:1];
integer i,j,k,l;
// initial
always @ (posedge clk or negedge rst_n)
begin
for(i=1;i<511;i=i+1)
begin
for(j=1;j<511;j=j+1)
begin
ac1=64'b0;
tc=64'b0;
sc1=64'b0;
for(k=0;k<=2;k=k+1)
begin
for(l=0;l<=2;l=l+1)
begin
ac1=ac1+pd[i+k][j+l];
end
end
for(k=0;k<=2;k=k+1)
begin
for(l=0;l<=2;l=l+1)
begin
tc1=pd[i+k][j+l]-ac1;
tc=tc+pd[i+k][j+l]*tc1;
end
end
s1=tc/9;
sc1=s1^0.5;
if(sc1<1.5)
begin
nq[0] = nq[0]+1;
end
else
begin
nq[1] = nq[1]+1;
end
end
end
end
endmodule
基础语法错误,你这个always 在initial 块里面啊。
如果initial 和always 语法没有理解透,随便找本verilog 的书看看先,建议看verilog IEEE standard。
注:这个是编译之后出现的问题。谢谢。
Error (12007): Top-level design entity "Verilog1" is undefined
Error: Quartus II 64-Bit Analysis & Synthesis was unsuccessful. 1 error, 0 warnings
Error: Peak virtual memory: 497 megabytes
Error: Processing ended: Tue Mar 08 14:58:20 2016
Error: Elapsed time: 00:00:05
Error: Total CPU time (on all processors): 00:00:01
Error (293001): Quartus II Full Compilation was unsuccessful. 3 errors, 0 warning
首先非常感谢您给我提出的建议,我修改了一下程序编译之后发现了这些错误,希望您给予指点(刚刚开始学这门语言,有些地方还不是太懂)注:这是错误
Error (12007): Top-level design entity "Verilog1" is undefined
Error: Quartus II 64-Bit Analysis & Synthesis was unsuccessful. 1 error, 0 warnings
Error: Peak virtual memory: 497 megabytes
Error: Processing ended: Tue Mar 08 14:58:20 2016
Error: Elapsed time: 00:00:05
Error: Total CPU time (on all processors): 00:00:01
Error (293001): Quartus II Full Compilation was unsuccessful. 3 errors, 0 warnings
希望给予指点,谢谢!
要从基础学起哦 开始都不容易 你的这个问题是由于你 保存的名字 要与 module名一样 你是直接保存了 默认是Verilog1.v 需要改动
Error (114016): Out of memory in module quartus_map.exe (3165 megabytes used)
Error (293007): Current module quartus_map ended unexpectedly
这两句是不是说我写的程序占用的内存过大,已经无法运行程序了?谢谢!
module srcn(clk,rst_n);
input clk,rst_n;
reg[63:0] sc1,ac1,tc,tc1,s1;
reg[63:0] pd [1:255][1:255];
//reg[31:0] nq[0:1];
integer i,j,k,l;
always @(posedge clk or negedge rst_n);
begin
for(i=1;i<255;i=i+1)
begin
for(j=1;j<255;j=j+1)
begin
ac1=64'b0;
tc=64'b0;
sc1=64'b0;
for(k=0;k<=2;k=k+1)
begin
for(l=0;l<=2;l=l+1)
begin
ac1=ac1+pd[i+k][j+l];
end
end
for(k=0;k<=2;k=k+1)
begin
for(l=0;l<=2;l=l+1)
begin
tc1=pd[i+k][j+l]-ac1;
tc=tc+pd[i+k][j+l]*tc1;
end
end
begin : block1
reg[31:0] nq;
for(i=0;i<2;i=i+1)
nq=32'b0;
end
s1=tc/9;
sc1=s1**(1/2);
if(sc1<1.5)
begin
nq[0]=nq[0]+1;
end
else
begin
nq[1]=nq[1]+1;
end
end
end
end
endmodule
这是修改之后,但还是有些错误,我实在不知道怎么解决,希望指点,非常感谢!Error (10170): Verilog HDL syntax error at srcn.v(12) near text "begin"; expecting "endmodule"
Error (10170): Verilog HDL syntax error at srcn.v(50) near text "="; expecting ".", or an identifier
Error (10112): Ignored design unit "srcn" at srcn.v(1) due to previous errors
module srcn(clk,rst_n);
input clk,rst_n;
reg[63:0] sc1,ac1,tc,tc1,s1;
reg[63:0] pd [1:510][1:510];
reg[31:0] nq[0:1];
integer i,j,k,l;
// initial
always @ (posedge clk or negedge rst_n)
begin
for(i=1;i<511;i=i+1)
begin
for(j=1;j<511;j=j+1)
begin
ac1=64'b0;
tc=64'b0;
sc1=64'b0;
for(k=0;k<=2;k=k+1)
begin
for(l=0;l<=2;l=l+1)
begin
ac1=ac1+pd[i+k][j+l];
end
end
for(k=0;k<=2;k=k+1)
begin
for(l=0;l<=2;l=l+1)
begin
tc1=pd[i+k][j+l]-ac1;
tc=tc+pd[i+k][j+l]*tc1;
end
end
s1=tc/9;
sc1=s1^0.5;
if(sc1<1.5)
begin
nq[0] = nq[0]+1;
end
else
begin
nq[1] = nq[1]+1;
end
end
end
end
endmodule
你把复制粘贴完全,估计 你漏掉了 最后一句 我这编译通过的
这个是你程序的问题,硬件电路不像c语音,每一句语句都对应一个电路,不能按照c语音的思路来写硬件电路 建议从简单实例学起 ,你的这个解决方法是 不要布局布线 先编译 是可以通过的
非常感谢您的指点,就是这样写sc1=s1^0.5;这个乘方是不是错的。我粘贴编译了一下,出现了这样的问题:Error (11720): Run Analysis and Synthesis (quartus_map) with top-level entity name "srcn" before running Fitter (quartus_fit)
还有就是你用的身软件编译的。Error: Quartus II 64-Bit Fitter was unsuccessful. 1 error, 0 warnings还有就是我计算机的内存是不是太小了。
兄弟,你这问题不是一般的严重。always时序里面一般阻塞赋值,四重for循环,偶的娘呀,吓死宝宝了,
reg[63:0] pd [1:510][1:510]; 你这一个pd就超过2MB的RAM。还 s1=tc/9; 你知道硬件里一个除法意味着什么吗?
就算是新学,也一步一步的先简单的来啊。你这一口一个胖子的架势,不合适
非常感谢您的建议和帮助。由于最近项目的需要,我也是刚刚学这个语言,可以说不知道怎么看,很多地方都不是太懂,身边有没有什么人可以讨论的,只有自己一个人,学起来很吃力。可不可以帮我解决一下这几个问题,大概的写点意见,谢谢!(1)我这程序里的四重for循环应该怎么改才好?
(2)reg[63:0] pd [1:510][1:510];可以怎样改使他不超出范围?
(3) s1=tc/9,是不是调用软件除法器中的ip核,应该怎样调用?
能不能推荐一本比较好的学习书本。非常感谢!
在问一个问题,像C语言中pdse=(short int*)malloc(jl*sizeof(short int));这种分配内存空间的,在硬件语言中该怎么表示或者有什么样的方法?谢谢!
推荐 夏宇闻 verilog数字系统设计教程 读前几章你就会明白了
猜测你这是要强行将一个处理图像的c++程序转化为verilog程序,是不是?
(1) 循环怎么改我也不好说,还是那句话,先从简单的一点点来,告诉老板你需要时间,老板不同意你可以说办不到。如果要可综合的话,极少用情况下用到循环;
(2) 这个跟你c++程序一样索引不出界就不超出范围,我吃惊的是2M RAM在硬件里实现,是一个很恐怖的数据;
(3) 你连最基础的都没看,就想使用IP核,那一堆参数会让你想死的。
说到底,一个是软件,一个是硬件,是两个截然不同的领域,不可能说帖子上解了你几个疑惑就能把问题解决了。
是像这样吗? (x>>3)+(x>>4)+(x>>6)+(x>>8)
不知道对不对?
