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