🔈声明:
😃博主主页:王_嘻嘻的CSDN博客
🧨未经作者允许,禁止转载
🔑系列专栏:牛客Verilog习题集
🚩推荐一个IC、FPGA新手入门的好网站:👉快 点 击 进 入 学 习 吧
继续整理牛客网经典Verilog习题讲解,牛客网里除了最新的Verilog题库还有其它领域的经典笔试、面试题,大家快和我一起刷起来吧 点 击 跳 转
在某个module中包含了很多相似的连续赋值语句,请使用generata…for语句编写代码,替代该语句,要求不能改变原module的功能。
module template_module( input [7:0] data_in,output [7:0] data_out
);assign data_out [0] = data_in [7];assign data_out [1] = data_in [6];assign data_out [2] = data_in [5];assign data_out [3] = data_in [4];assign data_out [4] = data_in [3];assign data_out [5] = data_in [2];assign data_out [6] = data_in [1];assign data_out [7] = data_in [0];endmodule
本题主要是考察Verilog中如何使用循环来简化代码。在Verilog中循环的使用会比软件语言稍稍麻烦一些,需要额外有一个generate——endgenerate的语句块,所有的for循环需要写在块内,generate内的循环变量需要用genvar额外声明。
generate的功能其实就是复制,将同样的电路复制多份,不论是always块或者assign组合逻辑,都可以在generate中。
此外,在每个for循环后最好使用begin:loop_name(自定义),给循环取一个名字,避免后期lint报错的问题。
`timescale 1ns/1ns
module gen_for_module( input [7:0] data_in,output [7:0] data_out
);generategenvar i;for(i=0;i<8;i=i+1)begin: loopassign data_out[i] = data_in[7-i];end
endgenerateendmodule