新手求助这个verilog程序哪一段代码最消耗电路资源
时间:10-02
整理:3721RD
点击:
这个程序主要功能是输入一个16MHz的信号,输出不同频率的波形:先是5个周期为A占空比为437/512的波形,然后是个周期为A占空比为38/512的波形,最后是20个周期为B占空比为75/1024的波形。
module test4(clkin,clkout);
parameter M=512;
parameter L=1024;
parameter N=2**16;
input clkin;
output clkout;
reg clkout;
integer count;
integer hcount;
integer i=0,j=0,k;
//***********************************//
always @(posedge clkin)begin
begin
if (i==N-1)
i=0;
else
i=i + 1;
end
begin
for (j=0;j<5;j=j+1)
begin
count=i-M*j;
if (i<=2560)
begin
if (count==(M-1))
count=0;
else
count=count + 1;
if (count==437)
clkout<=1;
else if (count==511)
clkout<=0;
end
else if(i<=5120)
begin
if (count==2560+(M-1))
count=2560;
else
count=count + 1;
if (count==2598)
clkout<=1;
else if (count==3071)
clkout<=0;
end
end
end
begin
for (k=0;k<20;k=k+1)
begin
hcount=i-L*k;
if(i>5120)
begin
if (hcount==5120+(L-1))
hcount=5120;
else
hcount=hcount + 1;
if (hcount==5195)
clkout<=1;
else if (hcount==6143)
clkout<=0;
end
end
end
end
endmodule
module test4(clkin,clkout);
parameter M=512;
parameter L=1024;
parameter N=2**16;
input clkin;
output clkout;
reg clkout;
integer count;
integer hcount;
integer i=0,j=0,k;
//***********************************//
always @(posedge clkin)begin
begin
if (i==N-1)
i=0;
else
i=i + 1;
end
begin
for (j=0;j<5;j=j+1)
begin
count=i-M*j;
if (i<=2560)
begin
if (count==(M-1))
count=0;
else
count=count + 1;
if (count==437)
clkout<=1;
else if (count==511)
clkout<=0;
end
else if(i<=5120)
begin
if (count==2560+(M-1))
count=2560;
else
count=count + 1;
if (count==2598)
clkout<=1;
else if (count==3071)
clkout<=0;
end
end
end
begin
for (k=0;k<20;k=k+1)
begin
hcount=i-L*k;
if(i>5120)
begin
if (hcount==5120+(L-1))
hcount=5120;
else
hcount=hcount + 1;
if (hcount==5195)
clkout<=1;
else if (hcount==6143)
clkout<=0;
end
end
end
end
endmodule
上面的程序能跑吗?好像有问题呢,不能用for语句吧。
可以跑得
但是超级的慢
都快看晕了,怎么不用case语句呢,应该好点吧
可以作一下Power Analysis。