Verilog generate 语句是用于编写可配置、可综合RTL的强大构造。它可用于创建模块和代码的多个实例化。
generate-for语句:
1.必须有genvar关键字定义for语句的变量。
2.for语句的内容必须加begin和end。
3.for语句必须有一个名字begin:(name)
在buffer_8中例化buffer-1 8次
module buffer_8(
input wire[7:0] din,
input wire[7:0] dout);
genvar i;
generate
for(i=0;i<8;i++)begin:Block1
buffer_1 buffer1(.in(din[i]), .out(dout[i]));
end
endgenerate
endmodule
module buffer_1(
input wire in,
output wire out);
assign out = ~in;
endmodule
HDLBits网站使用generate语法的题
https://hdlbits.01xz.net/wiki/Exams/2014_q4b
module top_module (
input [3:0] SW,
input [3:0] KEY,
output [3:0] LEDR
); //
wire [3:0] w_input = {KEY[3],LEDR[3],LEDR[2],LEDR[1]};
generate
genvar i;
for(i=0;i<4;i++)begin:muxdff
MUXDFF(.clk(KEY[0]), .w(w_input[i]), .R(SW[i]), .E(KEY[1]), .L(KEY[2]), .Q(LEDR[i]));
end
endgenerate
endmodule
module MUXDFF (
input clk,
input w,R,E,L,
output Q);
wire temp1,temp2;
assign temp1=E? w:Q;
assign temp2=L? R:temp1;
always@(posedge clk)begin
Q <= temp2;
end
endmodule