注意generate的用法 go generate 用法

一:generate

Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,function,continousassignment,initial和always。在generate语句中可以引入if-else和case语句,根据条件不同产生不同的实例化。

用法:

1. generate语法有generate for, genreateif和generate case三种

2. generatefor语句必须有genvar关键字定义for的变量

3. for 的内容必须加begin和end

4. 必须给for语段起个名字

例子:

1. generate for例子:

generatefor1generate
2
3genvari;//定义变量
4
5for(i=0;i<NUM_QUEUES;i=i+1)begin:in_arb_queues//定义模块名字
6
7small_fifo
8
9#(.WIDTH(DATA_WIDTH+CTRL_WIDTH),
10
11.MAX_DEPTH_BITS(2))
12
13in_arb_fifo
14
15(//Outputs
16
17.dout({fifo_out_ctrl[i],fifo_out_data[i]}),
18
19.full(),
20
21.nearly_full(nearly_full[i]),
22
23.prog_full(),
24
25.empty(empty[i]),
26
27//Inputs
28
29.din({in_ctrl[i],in_data[i]}),
30
31.wr_en(in_wr[i]),
32
33.rd_en(rd_en[i]),
34
35.reset(reset),
36
37.clk(clk));
38
39end//block:in_arb_queues
40
41endgenerate

2.generate if例子:

generateif1generate
2
3if(REG_WIDTH==WRITE_WIDTH)begin:new_data_a_generation
4
5assignnew_data_a=merge_update?merge_wr_data:held_wr_data_a;
6
7end
8
9elsebegin
10
11assignnew_data_a=merge_update?
12
13{{(REG_WIDTH-WRITE_WIDTH-1){merge_wr_data_sign}},merge_wr_data}:
14
15{{(REG_WIDTH-WRITE_WIDTH){held_wr_data_sign_a}},held_wr_data_a};
16
17end
18
19endgenerate

3.generate还可以进行多个assign赋值!

generateassign1moduleanytest_v(
2inputclk,
3input[7:0]datain,
4output[7:0]dataout,
5outputfinish
6);
7
8wire[7:0]mem[31:0];
9wire[32*8-1:0]xxx;
10//reg[7:0]i;
11generate
12genvari;
13for(i=0;i<=31;i=i+1)
14begin:wiertech
15assignmem[i]=8'b0;
16end
17endgenerate
18endmodule

ps:对于a[8*i+:8]this is the so-called"Indexed vector part selects"


在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行partselect。

[base_expr+:width_expr]//positiveoffset
[base_expr-:width_expr]//negativeoffsetreg[63:0]word;

reg[3:0]byte_num;//avaluefrom0to7

注意generate的用法 go generate 用法
wire[7:0]byteN=word[byte_num*8+:8];

二、参数传递

类似VHDL的Generic语句,Verilog也可以在例化时传递参数

传递的参数是子模块中定义的parameter。

传递的方法:

1、

module_name#(parameter1,parameter2)inst_name(port_map);

2、

module_name#(.parameter_name(para_value),.parameter_name(para_value))inst_name(portmap);

用#方法和port map的写法差不多

modulemultiplier(a,b,product);
parametera_width=8,b_width=8;
localparamproduct_width=a_width+b_width;
input[a_width-1:0]a;
input[b_width-1:0]b;
output[product_width-1:0]product;
generate
if((a_width<8)||(b_width<8))
CLA_multiplier#(a_width,b_width)u1(a,b,product);
else
WALLACE_multiplier#(a_width,b_width)u1(a,b,product);
endgenerate
endmodule

  

爱华网本文地址 » http://www.413yy.cn/a/25101016/320948.html

更多阅读

的地得的用法 的和地的区别及用法

的地得的用法——简介日常工作中,常会有人提到“的”“地”“得”用法的问题,不少学生对“的、地、得”用法也是含糊不清,乱用一气,作业自然会在“的”“地”“得”用法上出错,并且屡改屡犯。大家都知道,“的”、“地”、“得”这三个字的

眼线膏的用法画出迷人眼线 美宝莲眼线膏

眼线膏的用法画出迷人眼线——简介美眉们一般都习惯用眼线笔来画眼线,今天小编要在这里教大家如何用眼线膏来描画眼线,步骤很简单,想要画好眼妆的美眉们,赶紧准备好工具,跟小编一起来学习吧!眼线膏的用法画出迷人眼线——工具/原料

护发素的用法 护发素发膜的正确用法

护发素的用法——简介护发素可以为头发提供一层保护,或许就因此得名了吧。比起洗发用品,护发素能够令头发看起来更自然和健康。 下面来介绍一下护发素的用法供参考。 护发素的用法——工具/原料护发素护发素的用法——方法/步骤护发

卫生棉条的用法 短导管卫生棉条的用法

卫生棉条的用法——简介卫生棉棉条,有称卫生栓,简称棉条,是一种棉质的圆柱体,在女性月经来潮时,可置入阴道中吸收经血。一个卫生棉条使用用者,一生中使用的卫生棉条可能超过10,000个。卫生棉条为众多女性提供了极大的便利,但是你知道卫生棉

声明:《注意generate的用法 go generate 用法》为网友撩妹首席指导师分享!如侵犯到您的合法权益请联系我们删除