类似C的环路结构如for-loop可能对学过C语言的人存在陷阱。其原因是在硬件语言中并没有隐含的寄存器这个条件,所以一般这些环路不可以在可综合代码中用来做算法迭代。在Verilog中,for循环一般用作输入多次有一定规律的赋值语句,以提高设计效率。

软件设计者可能利用for循环获得X的N次幂,代码可能是这样写的:

PowerX = 1  ;

for( i=0; i<N; i++ ) PowerX = PowerX * X ;

这个算法环路利用迭代执行N次乘法操作,每次通过这个环路,更新运行的变量。在软件中,它工作很好,因为每次迭代都将更新一个内部寄存器。

而硬件语言并没有任何隐含的寄存器出现,相反,所有的寄存器操作都被清楚地定义。如果设计者仿造上面的方式用verilog写出来,那么有可能写成下面这样的代码:

module forloop(

output reg [7:0] powerx ,

input          [7:0] x,n

);

interger i ;

always @ (*)

begin

powerx = 1 ;

for( i=0; i<n; i++ )

powerx =powerx * x ;

end

endmodule

程序可以在行为仿真中工作,并可能可以综合到门电路(这与综合工具有关)。Xilinx的XST不可以综合没有固定n值的代码,但是synplify则会基于最坏条件的n值综合这个环路,但是最后结果也往往是综合处运行极其慢的大量逻辑块的环路。

而在使用for循环时,往往设计人员是为了减少并行代码段的重复长度。例如,以下的代码:

out[0]  <=  y[0]   ^ x[0] ;

out[1]  <=  y[2]   ^ x[1] ;

out[2]  <=  y[4]   ^ x[2] ;

......

out[31] <= y[62] ^ x[31] ;

这些代码需要输入32行,为了压缩代码,提高效率,我们往往会使用for语句:

always @ (posedge clk)

for ( i=0; i<32; i=i+1 ) out[i] = y[i*2] ^ x[i] ;

值得注意的是,在环路中并没有出现反馈。

Verilog中for 语句怎么用相关推荐

  1. Verilog中for语句的使用

    在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...

  2. verilog中assign语句

    /************************************** * Module: assign * Date:2014-08-10 * Author: hemmingway@163. ...

  3. verilog中for语句使用

     在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在T ...

  4. Verilog中生成语句(generate)的用法

    一:generate Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,function, ...

  5. verilog中generate语句的使用

    原文地址:https://blog.csdn.net/qq_38428056/article/details/84821982 至芯科技的书上看到的,觉得还行吧,给大家分享一下. 一.为什么学习gen ...

  6. Verilog中generate语句的用法

    在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计提供了方便,generate语句一般在循环和 ...

  7. Verilog中Case语句

    实际问题中常常需要用到多分支选择,使用if语句导致内容繁琐:更明智的做法是使用case语句,case语句是一种多分支选择语句,可以方便的处理多分支选择.本文通过实际例子,讲解case语句的使用,以及c ...

  8. verilog中initial语句的基本使用

    一.知识点 所有的initial语句内的语句构成了一个initial块. initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次. 如果一个模块中包括了若干个initial块,则这些init ...

  9. 在Verilog里边 always@(*)语句是什么意思

    在Verilog中always@(*)语句的意思是always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行. 1.always语句有两种触发方式.第一种是电平触发,例如alway ...

最新文章

  1. python自动化接口测试中的cookies怎么实现_Python接口自动化之cookie、session应用
  2. Linux执行命令时遇到的些问题
  3. 转发一个深度、实用的技术帖——实现ADM3251E与3.3V系统的RS-232接口隔离
  4. 安徽省计算机二级大题教程,安徽省计算机二级例题
  5. centos6.5 设置ssh无密码登录
  6. 统计1000个10以内随机数随机数出现的个数
  7. 信息学奥赛一本通 1066:满足条件的数累加 | OpenJudge NOI 1.5 10
  8. 重磅!CVPR 2020 论文今起全面开放下载,含主会和workshop
  9. SVN报错:can't open file db/txn-current-lock:permission denied
  10. 电路——I/O口定时翻转电平驱动蜂鸣器注意事项
  11. Asp.Net中的正则表达式问题可以在此提问,今后大家一起研究!贴出基本语法参考...
  12. Linx下静默方式安装weblogic
  13. 诺顿误杀事件造成“疑似病毒大爆发”恐慌
  14. 通过谷歌身份验证器实现双保险认证(1)
  15. 【DB笔试面试591】在Oracle中,什么是星型连接(Star Join)?
  16. 夏季哪些蔬菜不适合生吃凉拌,食用会发生危险
  17. Android SO逆向-C++虚函数表解析
  18. ArcGIS模型工具中迭代器使用及自动命名设置(ArcGIS栅格批量按图幅裁剪)
  19. 【学习笔记】微体系结构-单周期、多周期、流水线
  20. 闭环频率特性与时域性能指标之间的关系

热门文章

  1. oracle加undo+resize,How To resize undo tablespace in Oracle
  2. matlab中tab键怎么用来缩进,MATLAB中的一些小技巧
  3. 王者争雄服务器维护,王者争雄_王者争雄官网_攻略-第一手游网
  4. “输入字符不是 MATLAB 语句或表达式中的有效字符”的解决办法
  5. 模6计数器以及模10计数器(Verilog HDL语言设计)(Modelsim仿真与ISE综合)
  6. 【Ubuntu日常技巧】【解决】Ubuntu 16 右上角的音量调节通知框不停地闪烁问题
  7. 如何在 CentOS 7 上安装 Nginx
  8. Flutter 21: 图解 ListView 下拉刷新与上拉加载 (三)【RefreshIndicator】
  9. kubernetes学习笔记之七: Ingress-nginx 部署使用
  10. 在eclipse中开发servlet流程