Verilog基本语法- for循环使用注意事项

注意点

1. 时序逻辑中尽量避免for循环,如使用一定注意避免掩盖问题;

2. verilog文件中for循环不能外露,需要有generate块或always块,system verilog中for可以外露,会默认处理为generate for;

3. for循环必须加begin-end,哪怕只有一行执行代码;

4. for begin后面必须有块名,建议大写,避免和信号名重复;

5. 单纯的for循环不支持data[3i+8 : 3i]的取值方式,只支持data[3i +: 8]写法;

尝试如下:

对于非generate来说,只能支持236行的写法,不支持237行写法,会报语法错,

part select

中,的右侧不能有变量

对于generate来说,248行和249行都支持;

对于上述不支持的语法报的错误:Verilog报 illegal operand for constant expression,百度搜索原因:

这个错误的直接原因是 Verilog 不支持 Data_i [i*8-1:i*8-8] 这种语法。 如果把向量的位选取写成 vect [msb:lsb] 这种形式,下标 msb 和 lsb 中是不能出现变量的。 如果想在下标中使用变量,Verilog 2001标准支持把题主的代码写成 Data_i [ (i*8-8)+:8],表示从 i*8-8 这位开始,向高数8位,选择这些位。

常规的for循环(非generate):
在Verilog-2001中,可以用变量作为index,进行部分数据选择。具体操作为:
[base_expr +: width_expr] //positive offset
[base_expr -: width_expr] //negative offset

其中base_expr可以是变量,而width_expr必须是常量。+:表示由base_expr向上增长width_expr位,-:表示由base_expr向下递减width_expr位。
而在Verilog-1995中,选择部分位进行输出时,前后index位必须是常量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

love混世_魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值