您的位置:首页 > 其它

FPGA学习中的小知识2

2010-10-23 21:35 232 查看
11、综合工具不支持的Verilog结构

initial语句

循环结构:repeat、forever、while、非结构化的for语句

数据类型:event、real、time

UDP(用户定义基本单元)

for……join块

wait语句

过程持续赋值:assign、deassign、force、release

操作符:===、!==

12、编写时序元件的Verilog代码时应该注意:避免不必要的latch(锁存器);触发器的初始赋值(reset/set)不应在initial描述块内定义,而应该在其功能描述中

加以定义;组合电路避免出现反馈回路。

13、要避免在综合的过程中产生不必要的latch,在组合逻辑描述中必须保证:

(1)所有的if……else及其嵌套结构、case、casex、casez结构是满的。

(2)变量、信号的赋值在每一个分支中都应有明确的指定。

(3)if……else及其嵌套结构本身是满的。

(4)case、casex、casez必须包含default分支。

14、一个模块的基本语法:

module module_name(port1,port2,……);

//Declaration

input,output,inout,

reg,wire,parameter,

function,mask,……

//Statement

Initial statement

Always statement

Module instantiation

Gate instantiation

Continuous assignment

endmodule

15、设计模块时可尽量考虑使用参数化,提高设计的重用。

16、调用模块时,采用的端口映射有

(1)位置对应

(2)端口对应(名字关联)

如,调用全加器模块module full_adder(a,b,ci,s,co);

full_adder full1(.a(本模块要传递的a),.b(本模块要传递的b),.ci(本模块要传递的ci),.s(本模块要传递的s),.co(本模块要传递的co))

(3)允许出现不连接的端口

尽量在端口映射时使用名字关联

17、只有寄存器类型的信号才可以在always和initial语句中进行赋值。

18、always语句从0时刻开始执行。

19、全加器的三种描述方式:

(1)结构化描述方式:

module full_adder(a,b,ci,s,co);

input a,b,ci;

output s,co;

wire s1,t1,t2,t3;

xor x1(s1,a,b);

xor x2(s,s1,ci);

and a1(t3,a,b);

and a1(t2,b,ci);

and a1(t1,a,ci);

or o1(co,t1,t2,t3);

endmodule

(2)数据流描述方式:

module full_adder(a,b,ci,s,co);

input a,b,ci;

output s,co;

wire s1,t1,t2,t3;

assign #2 s1=a^b;

assign #2 s=s1^ci;

assign #2 t3=a&b;

assign #2 t2=a&ci;

assign #2 t1=b&ci;

assign #2 co=t1|t2|t3;

endmodule

(3)行为描述方式:

[1]module full_adder(a,b,ci,s,co);

input a,b,ci;

output s,co;

reg s,co;

reg t1,t2,t3;

always @(a or b or ci)

begin

s=(a^b)^ci;

t1=a&b;

t1=a&ci;

t1=b&ci;

co=(t1|t2)|t3;

end

endmodule

[2]module full_adder(a,b,ci,s,co);

input a,b,ci;

output s,co;

reg s,co;

reg t1,t2,t3;

always @(a or b or ci)

begin

{co,s}=a+b+ci;

end

endmodule

20、一般的,对顶层设计,采用结构描述方式,对底层模块,可采用数据流、行为级或两者的结合。

两位的全加器:

module adder2(at,bt,cit,st,cot);

parameter SIZE=2;

input[SIZE:1] at;

input[SIZE:1] bt;

input cit;

output[SIZE:1] st;

output cot;

wire temp;

full_adder full1

(

.a(at[1]),

.b(bt[1]),

.ci(cit),

.s(st[1]),

.co(temp)

);

full_adder full2

(

.a(at[2]),

.b(bt[2]),

.ci(temp),

.s(st[2]),

.co(cot)

);

endmodule
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐