讲义-VerilogCodingStyle

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

讲义-VerilogCodingStyle
Verilog Coding Styles For RTL Synthesis
本培训课程的目标是让新员工了解在作设计中编写Verilog代码时应该使用规范的、能综合的、高效率的代码风格,并且通过上机练习实践。

本培训课程采用Synopsys公司出的针对Design Complier的培训教材,分为三个部分
第一部分它介绍了RTL综合的含义,并分别讲述了组合电路设计和时序电路设计的常见编码风格;
第二部分介绍了资源块和资源块的共享、一些综合工具不支持的代码及其解决方法、仿真和综合电路的不匹配情况、高效的编码风格等内容;
第三部分讲述在数字电路设计中的一些经验、设计重用的编码风格和一些常会犯的编码错误(部分内容为前两部分的总结)。

第一部分
1、RTL综合的概述
综合(synthesis):根据约束条件,从抽象层次高的领域(级)到抽象层次低的领域(级)的等价变换,变换的同时对描述进行优化。

综合分翻译、优化、映射3个过程
2、组合电路
本单元的目标是让设计人员了解从所给
的代码会综合出怎样的组合电路以及
为得到想要的组合电路应如何较快地
编写正确的verilog描述。

连续性赋值语句、程序块(包括其事件列表规则);
if、case(full_case、parallel_case)、for循环和function、task以及三态驱动器等编码风格。

2.1 连续性赋值语句
module Cont_Assignment(A, B ,C, D);
input A, B, C;
output D;
assign D = (A & B) | C;
endmodule
ps: 有可能选用与非门或者附加buffer
2.2 程序块语句
module Always_Statement(A, B ,C, D);
input A, B, C;
output D;
reg D;
always @(A or B or C)
D = (A & B) | C;
endmodule
2.3 事件表规则
用always描述一个组合电路时,那么在always块中用到的每一个变量必须出现的
always描述的事件表里,否则会出现综合
前后仿真结果不一致。

always @(A or B)
D = (A & B) | C;
沿触发的事件用于建模时序电路;
既包含沿触发又包含非沿触发(电平触发)的事件表是综合工具不支持的。

2.4 if描述语句
always @(A or B or Use_B) if (Use_B)
D_Out= B;
else
D_Out= A;
2.5 case描述语句
always @(Sel or A or B or C or D) case (Sel)
2'b00 : D_Out= A;
2'b01 : D_Out= B;
2'b10 : D_Out= C;
2'b11 : D_Out= D;
endcase
2.6 for循环描述语句
always @(Data_In)
begin
Parity_Out= 1'b0; // Algorithm "kick-off" value for (K = 0; k <= 3; K = K + 1)
Parity_Out= Parity_Out^ Data_In[K];
end
2.7 双向端口的建模
module Bidi_Module(Bidi_Port, Direction_In, Direction_Out, Data_Received, Data_To_Send);
inout Bidi_Port;
input Direction_In, Direction_Out, Data_To_Send;
output Data_Received;
assign Bidi_Port= Direction_Out? Data_To_Send: 1'bz;
assign Data_Received= Direction_In? Bidi_Port: 1'bz;
endmodule
3、时序电路
了解从所给的代码会综合出怎样的时序电路以及为得到想要的时序电路应如何较快地编写正确的Verilog
描述。

相关文档
最新文档