原创 [博客大赛]Verilog之for语句

2014-4-23 16:00 8836 12 13 分类: FPGA/CPLD 文集: FPGA编码

以前很少用for语句,以为是不可综合的。在印象中好像只用循环生成(for...generate)语句综合过多个模块。最近在仔细研读《轻松成为设计高手——Verilog HDL使用精解》这本书,才知道for语句在组合逻辑中大有用处。

 
(1)for用在纯组合逻辑中
举例:4位左移器(将低4位输入的数移到高4位)
//Leftshift for 4 bits
module For_Leftshift(
input wire [3:0]inp,
input wire L_EN,
output reg [7:0]result
);
 
integer i;
always@(inp or L_EN)
begin
 result[7:4] = 0;
 result[3:0] = inp;
 if(L_EN == 1)
 begin
  for(i=4;i<=7;i=i+1)
  begin
   result = result[i-4];
  end
  result[3:0] = 0;
 end
end
 
endmodule
 
综合结果(RTL视图,实际是一个4位选择器)
1.jpg
(2)for不仅可以用在组合逻辑中,而且还可以用在时序逻辑中,用于在1个周期类完成整个for循环。
举例:在一个周期类完成对输入总线中高电平位的计数,则利用for循环实现加法器
module For_Counter(
input wire clk,
input wire rst_n,
input wire [12:0] data,
output wire [3:0] numout
);
integer i;
reg[3:0] num;
 
always @(posedge clk)
 begin
 if(!rst_n)
  num = 0;
 else
  begin
  for(i=0;i<13;i=i+1)
   if(data) num = num + 1;
  end
 end
 
assign numout = num;
 
endmodule
 
综合结果(RTL视图,加法器+触发器)
 
2.jpg
 
综上,可以看出for循环是可以综合的,而且效率很高。但所消耗的逻辑资源较大。在对速度(时钟周期数)要求不是很高的情况下,可以多用几个时钟周期完成任务,而没有必要用for循环来做。
 

文章评论1条评论)

登录后参与讨论

用户377235 2014-4-7 22:02

相关推荐阅读
用户468654 2014-04-27 19:30
MinGW编译cpp文件
1.下载MinGW:http://ishare.iask.sina.com.cn/f/23746562.html?retcode=0 2.安装MinGW; 3.添加环境变量中的Path值等...
用户468654 2014-04-26 23:21
“mspdb80.dll无法找到”之解决之道
我在电脑是安装了VS2010。在用命令行调用cl.exe来编译cpp文件时遇到如题的问题。最后查了网络资料。解决方法如下: 1>直接从C:\Program Files\Microsoft...
用户468654 2014-04-25 10:31
[博客大赛]按键消抖之终极解决方案
1.按键消抖的原理                  图1.按键抖动示意图 我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有...
用户468654 2014-04-25 10:31
[博客大赛]74HC595-串行并出驱动器
1.芯片原理图 2.时序图(Timing diagram) 3.根据时序图编写74hc595的verilog驱动程序 功能:根据输入的8bits数据d...
用户468654 2014-04-23 16:25
【转】FPGA学习的一些误区
作者:某人(摘自网络,不知道作者) 我常年担任多个有关FPGA学习研讨的QQ群管理员,长期以来很多新入群的菜鸟们总是在重复的问一些非常简单但是又让新手困惑不解的问题。作为管理员经常要给这些菜鸟们...
用户468654 2014-04-23 16:13
何為"阻抗匹配"?
  阻抗匹配(Impedance matching)是微波电子学里的一部分,主要用于传输线上,来达至所有高频的微波信号皆能传至负载点的目的,不会有信号反射回来源点,从而提升能源效益。   大体...
我要评论
1
12
关闭 站长推荐上一条 /2 下一条