verilog 生成块_verilog中的循环生成语句

verilog生成语句可以动态地生成verilog代码。这一声明语句方便了参数化模块的生成。

生成语句能够控制变量的声明,任务或函数的调用,还能对实例引用进行全面的控制。

编写生成块语句代码时必须在模块中说明生成的实例范围,关键字generate - endgenerate

用来指定范围。生成语句生成的实例具有唯一的标识名,因此可以用层次命名规则引用。

此外,究竟是使用按照次序或者参数名赋值的参数重新定义,还是使用defparam

声明的参数重新定义,都可以在生成范围中定义。注意:生成范围中定

义的defparam语句所能够重新定义的参数必须是在同一个生成范围内,

或者是在生成范围的层次化实例中。

任务或函数的声明也允许出现在生成范围之中,但是不能出现在循环

生成当中。生成任务和函数同样具有唯一的标识符名称,可以被

层次引用。

不允许出现在生成范围之中的模块项声明包括:

参数、局部参数;输入、输出和输入/输出声明;指定块

生成模块实例的连接方法与常规模块实例相同。

在verilog中有三种创建生成语句的方法:

循环生成;条件生成;case生成。

循环生成语句允许使用者对下面的模块或模块项进行多次实例引用:

变量声明;

模块;

用户定义原语、门级原语;

连续赋值语句;

initial和always块;

针对这5种可使用循环生成语句的情况要分别实验。

module bitwise_sor(out,i0,i1);

parameter N=32;

output [N-1:0] out;

input [N-1:0],i0,i1;

//声明一个临时循环变量 当然,如果不需要这个临时变量也可以不声明。

//该变量只用于生成块的循环计算

//verilog仿真时该变量在设计中并不存在

genvar j;

//用一个单循环生成按位异或的xor门

generate

for(j=0;j

begin:xor_loop //块命名为xor_loop

xor xorgate(out[j],i0[j],i1[j]);

end //在生成块内部结束循环

endgenerate //结束生成块

//用always块来替代生成异或门

reg [N-1:0] out;

generate

for(j=0;j

begin

always @(i0[j] or i1[j]) //循环生成语句中使用always

out[j] = i0[j] ^ i1[j];

end

endgenerate

循环生成语句可以嵌套使用。xor_loop是赋予循环生成语句的名字,目的在于通过它

对循环生成语句之中的变量进行层次化引用。因此,循环生成语句中各个异或门的

相对层次名为xor_loop[0].xorgate,xor_loop[1].xorgate....

生成范围内可以声明下列数据类型:

1)net,reg

2)integer,real,time(时间型),realtime(实数时间类型)

时间类型用于仿真,时间变量通过使用关键字time来声明,其宽度与具体实现无关,最小为64位,通过调用系统函灵敏$time可以取得当前仿真时间

real说明的变量的缺省值为0,不允许对real声明值域,位界限或字节界限,当前x或z

赋予real类型寄存器时,这些值作为0处理。realtime与real类型完全相同。

3)event(事件)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值