Verilog中for 语句怎么用
类似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 语句怎么用相关推荐
- Verilog中for语句的使用
在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...
- verilog中assign语句
/************************************** * Module: assign * Date:2014-08-10 * Author: hemmingway@163. ...
- verilog中for语句使用
在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在T ...
- Verilog中生成语句(generate)的用法
一:generate Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,function, ...
- verilog中generate语句的使用
原文地址:https://blog.csdn.net/qq_38428056/article/details/84821982 至芯科技的书上看到的,觉得还行吧,给大家分享一下. 一.为什么学习gen ...
- Verilog中generate语句的用法
在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计提供了方便,generate语句一般在循环和 ...
- Verilog中Case语句
实际问题中常常需要用到多分支选择,使用if语句导致内容繁琐:更明智的做法是使用case语句,case语句是一种多分支选择语句,可以方便的处理多分支选择.本文通过实际例子,讲解case语句的使用,以及c ...
- verilog中initial语句的基本使用
一.知识点 所有的initial语句内的语句构成了一个initial块. initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次. 如果一个模块中包括了若干个initial块,则这些init ...
- 在Verilog里边 always@(*)语句是什么意思
在Verilog中always@(*)语句的意思是always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行. 1.always语句有两种触发方式.第一种是电平触发,例如alway ...
最新文章
- python自动化接口测试中的cookies怎么实现_Python接口自动化之cookie、session应用
- Linux执行命令时遇到的些问题
- 转发一个深度、实用的技术帖——实现ADM3251E与3.3V系统的RS-232接口隔离
- 安徽省计算机二级大题教程,安徽省计算机二级例题
- centos6.5 设置ssh无密码登录
- 统计1000个10以内随机数随机数出现的个数
- 信息学奥赛一本通 1066:满足条件的数累加 | OpenJudge NOI 1.5 10
- 重磅!CVPR 2020 论文今起全面开放下载,含主会和workshop
- SVN报错:can't open file db/txn-current-lock:permission denied
- 电路——I/O口定时翻转电平驱动蜂鸣器注意事项
- Asp.Net中的正则表达式问题可以在此提问,今后大家一起研究!贴出基本语法参考...
- Linx下静默方式安装weblogic
- 诺顿误杀事件造成“疑似病毒大爆发”恐慌
- 通过谷歌身份验证器实现双保险认证(1)
- 【DB笔试面试591】在Oracle中,什么是星型连接(Star Join)?
- 夏季哪些蔬菜不适合生吃凉拌,食用会发生危险
- Android SO逆向-C++虚函数表解析
- ArcGIS模型工具中迭代器使用及自动命名设置(ArcGIS栅格批量按图幅裁剪)
- 【学习笔记】微体系结构-单周期、多周期、流水线
- 闭环频率特性与时域性能指标之间的关系
热门文章
- oracle加undo+resize,How To resize undo tablespace in Oracle
- matlab中tab键怎么用来缩进,MATLAB中的一些小技巧
- 王者争雄服务器维护,王者争雄_王者争雄官网_攻略-第一手游网
- “输入字符不是 MATLAB 语句或表达式中的有效字符”的解决办法
- 模6计数器以及模10计数器(Verilog HDL语言设计)(Modelsim仿真与ISE综合)
- 【Ubuntu日常技巧】【解决】Ubuntu 16 右上角的音量调节通知框不停地闪烁问题
- 如何在 CentOS 7 上安装 Nginx
- Flutter 21: 图解 ListView 下拉刷新与上拉加载 (三)【RefreshIndicator】
- kubernetes学习笔记之七: Ingress-nginx 部署使用
- 在eclipse中开发servlet流程