关于verilog for循环的展开

dragon8899 2014-04-29 09:56:13
verilog语言把一个简单的for循环展开。for 循环为:
module forloop(in,out,clk);
output reg[7:0] out;
input [7:0] in, clk;
integer i ;
always @ (clk)
begin
for( i=0; i<3; i=i+1 )
out = in + 1;
end
endmodule

展开写成:
module forloop(in,out,clk);
output reg[7:0] out;
input [7:0] in, clk;
integer i ;
always @ (clk)
begin
i = 0;
if (i<3)
begin
out = in + i;
i = i + 1;
end
if (i<3)
begin
out = in + 1;
i = i + 1;
end
if (i < 3)
begin
out = in + 1;
i = i + 1;
end
end
endmodule

以上2程序均可在ModelSim中运行,请问展开后的verilog程序可以这样写吗?感觉有点怪。请高手指点。谢谢!
...全文
897 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mekel 2014-09-29
  • 打赏
  • 举报
回复
展开后没那么复杂 always @ (posedge clk or negedge rst) begin if(~rst) out<=1'b0; i<=1'b0; else if (in<2'h3) out <= in + 1'b1; i<=i+1'b1; end
Snail_Walker 2014-08-30
  • 打赏
  • 举报
回复
不要搞这么复杂的东西,综合出来乱七八糟的!
Binzo 2014-04-30
  • 打赏
  • 举报
回复
从程序逻辑上来说,上面两个的确等价。正如楼上所说,这样的程序不符合硬件语言的思路,有可能综合出来是有问题的。 硬件中的循环一般以计数器的形式进行。
falloutmx 2014-04-29
  • 打赏
  • 举报
回复
可以运行就表示可以写,编译器能识别,对不对就两说了。但你这个写法有很大很大问题,完全不是硬件语言的正确写法

6,127

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧