【FPGA/verilog | 您所在的位置:网站首页 › for语句使用实例怎么写 › 【FPGA/verilog |
本文参考: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 < 8; i = i + 1) begin vector[i] = i; end end endmodule generate for的用法generate for循环: generate for循环用于结构描述(structural description),用于实例化模块或生成多个类似的结构。 generate for循环在编译时执行,生成的实例在编译后的网表中可见。 generate for循环可用于综合和实现。示例: 实现批量例化的generate for 代码 module test; genvar i; generate for (i = 0; i < 8; i = i + 1) begin : gen_block my_module instance (.input(input[i]), .output(output[i])); end endgenerate endmodule在这个例子中,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 |
CopyRight 2018-2019 实验室设备网 版权所有 |