【FPGA/verilog -入门学习5】verilog中的genrate for 和for 以及数组的用法
本文参考:verilog generate语法总结-CSDN博客
Verilog数组赋值_笔记大全_设计学院
for 的用法
在Verilog中,generate for和for都是用于循环的结构,但是它们具有不同的应用场合和语义。
for循环:
for循环主要用于行为描述(behavioral description),通常用于描述算法或数学运算。
for循环在仿真时执行,因此,任何在for循环中使用的变量都必须是仿真时间可访问的。
for循环通常在初始化代码或在行为模型中使用,不适用于综合。示例:
在testbanch中测试使用的for代码
module test;
reg [7:0] vector[0:7];
integer i;
initial begin
for (i = 0; i
generate for的用法
generate for循环:
generate for循环用于结构描述(structural description),用于实例化模块或生成多个类似的结构。
generate for循环在编译时执行,生成的实例在编译后的网表中可见。
generate for循环可用于综合和实现。示例:
实现批量例化的generate for 代码
module test;
genvar i;
generate
for (i = 0; i
在这个例子中,my_module被实例化了8次,每次实例化都与不同的输入和输出相连接。genvar关键字用于声明在generate for循环中使用的变量。
总结区别
主要区别在于for循环用于行为描述,在仿真时执行;
而generate for循环用于结构描述,在编译时执行。此外,它们的变量类型也不同,for循环使用integer类型,而generate for循环使用genvar类型。
使用genrate for后面跟的 begin必须要有名称,也就是必须要有标签,因为标签会作为generate循环的实例名称。
补充
正常情况下,我们的for循环、if以及case语句都要写在always块中,
然而在always块里是不能例化模块的,
所以我们就没有办法使用这几种语句去例化模块。
可是使用了generate之后,我们就可以不在always块中使用for循环、if以及case语句,
从而可以使用这几种语句来例化模块,这样我们就可以方便的给不同的例化对象不同的参数以及实现在不同情况下例化不同模块的需求。
数组的用法
一、数组基础
reg [7:0] my_array [0:3];
表示数组元素个数有4个,每一个元素是8位
注意my_array 前后的写法 前面的位数是7:0 ,后面的个数是0:3
二、数组赋值
1. 声明时初始化
reg [7:0] my_array [0:3] = '{8'h11, 8'h22, 8'h33, 8'h44};
2. 按索引赋值
my_array[1] = 8'hAA;
3. 循环赋值
integer i;
always @(*) begin
for (i=0; i