Presentation is loading. Please wait.

Presentation is loading. Please wait.

Verilog硬件描述语言基础.

Similar presentations


Presentation on theme: "Verilog硬件描述语言基础."— Presentation transcript:

1 Verilog硬件描述语言基础

2 简介 HDL——Hardware Description Language

3 简介 发展概况 Verilog: 1983年Gateway Design Automation为其模拟器开发的硬件建模语言;
专用、用于模拟、仿真 1990 OVI(Open Verilog International) 1995 成为IEEE标准Std 可用于模拟、仿真、综合的硬件建模

4 简介 Verilog 的特征 支持多级建模方式 算法、行为级建模 寄存器传输(RTL)级建模 门级建模 开关级建模

5 简介 支持多种建模方式 行为功能建模方式 结构建模方式 数据流建模方式

6 简介 层次描述,在描述中显式进行时序建模 提供了强大的硬件建模能力,内嵌的任务和函数 类C语言,易学 已成为业界标准 可通过PLI与C接口
提供原语描述能力

7 简介 EDA工具对Verilog的支持良好 Simulation Tools Verilog-XL: 业界的黄金模拟器
VCS(ViewLogic) NC-Verilog NC_Sim(兼容Verilog、VHDL混合结构的描述形式) Synthesis Tools Synopsys DesignCompiler VeriBest、 Ambit 、 RTL-Compiler Magma Emulation Tools QuickTurn、 Palladium ModelSource、 Vstation Arms、 Motorola

8 简介 混合建模能力

9 二、 Verilog的总体结构 1 总体描述方式

10 二、 Verilog的总体结构 模块的基本描述形式: module module_name(input/output_port list);
Declarations: input/output_port declarations; reg,wire,parameter,function,task,UDP…. Statements: initial statements always statements Gate/Module instantiation UDP instantiation assign statements endmodule

11 二、 Verilog的总体结构 描述方式说明

12 二、 Verilog的总体结构 行为功能描述

13 二、 Verilog的总体结构 数据流描述方式

14 一、Verilog HDL描述的层次 1、结构化、层次式描述 2、行为、功能描述 3、电路级描述

15 Verilog类C语言的特征 行为描述时可采用类C的语言结构 赋值语句结构与C的语言结构相似 算术、逻辑操作与C的语言相似 if…else
case for while 赋值语句结构与C的语言结构相似 算术、逻辑操作与C的语言相似

16 三、Verilog语言要素 模块的基本描述形式: module module_name(input/output_port list);
Declarations: input/output_port declarations; reg,wire,parameter,function,task,UDP…. Statements: initial statements always statements Gate/Module instantiation UDP instantiation assign statements endmodule

17 三、Verilog语言要素 1、标识符 不能使用保留字作标识符

18 三、Verilog语言要素 2、数据类型 2.1 verilog 的允许基本逻辑值 0: 逻辑0/真 1: 逻辑1/假 x: 未知()
0: 逻辑0/真 1: 逻辑1/假 x: 未知() z: 高阻

19 三、Verilog语言要素 2.2 常量类型 整型 b、o、d、h分别表示二进制数、八进制数、十进制数、十六进制数 实型 字符串型
2.2 常量类型 整型 b、o、d、h分别表示二进制数、八进制数、十进制数、十六进制数 用数字表示数据宽度 3´b101表示3位二进制数101 8´hdf表示8位16进制数df 实型 字符串型

20 三、Verilog语言要素 2.3 信号类型 线网类型 寄存器类型

21 三、Verilog语言要素 线网类型 wire tri wor wand trior triand trireg tri1 tri0
supply0 supply1

22 三、Verilog语言要素 wand: 线与

23 三、Verilog语言要素 寄存器类型 reg 并不一定代表设计中实际的寄存器 reg数据类型说明时要注意数据长度问题
integer数据类型说明时要注意数据长度问题 integer数据默认长度为64位

24 三、Verilog语言要素 存储器说明及操作 说明方式: reg [msb:lsb] memory_name[upper:lower];
reg [15:0] mem1[255:0]; mem1定义为深度为256的16位存储器

25 三、Verilog语言要素 存储器说明及操作 存储器赋值方式: 单个存储单元的赋值 reg [15:0] mem1[255:0];
mem1[I] = 16’h8c; mem1[8] = 16’ha9; 使用系统任务对存储器赋值 $readmemb(“filename”, memory_name); $readmemh(“filename”, memory_name);

26 存储器说明及操作 reg [7:0] mem1[4:0]; $readmemb(“memory1”,mem1); memory1内容如下:

27 三、Verilog语言要素 2.4 参数说明 parameter 参数名 = 值; parameter BUS_SIZE = 16;
2.4 参数说明 parameter 参数名 = 值; parameter BUS_SIZE = 16; parameter filename = “/export/home/joe/my_file” 使用参数的优点: 增加可读性; 可修改性好; 设计的可重用性好

28 四、表达式 4.1 操作数 寄存器类型数据 线网类型数据

29 四、表达式 4.2 操作符 算术操作 + - * / % << >> 逻辑操作 && || ! ~ ^
4.2 操作符 算术操作 * / % << >> 逻辑操作 && || ! ~ ^ & | ~ ^ ^~ ~^ < = = >= <= != 条件操作 ?:

30 五、 行为建模 5.1 建模机制 initial 语句 always 语句

31 五、 行为建模 5.2 always语句 always @(敏感信号表) 描述体 always #timing 描述体 always 描述体
敏感信号表的完整性问题: 敏感信号不完整会导致逻辑模拟结果错误; 信号过多会导致逻辑模拟速度慢、逻辑模拟结果错误。

32 五、 行为建模 5.3 时序控制 延时控制 事件控制

33 五、 行为建模 事件控制 边沿触发事件控制 电平触发事件控制 @(event) Procedure_statements
@(posedge clk) Current_State = Next_State; @(negedge clk) Current_State = Next_State; 电平触发事件控制 @(信号表) Procedure_statements @(a or b) Sum = a ^ b ; wait (表达式) Procedure_statements wait (DataReady) Data = Bus ; wait ( Sum >= 22) Sum = 0 ;

34 五、 行为建模 描述语句块 顺序语句块:语句块内的语句按书写的次序执行; begin 描述语句1; 描述语句2; 。。。 描述语句n;
end

35 五、 行为建模 描述语句块 并行语句块:语句块内的语句并行执行; fork 描述语句1; 描述语句2; 。。。 描述语句n; join

36 五、 行为建模 描述语句块 顺序语句块内可嵌套并发语句块; 并发语句块内可嵌套顺序语句块。

37 五、 行为建模 分支、条件语句 if …else及其嵌套语句 case语句 case 、casex、casez 基本语法结构与C语言类似

38 五、 行为建模 循环语句 forever 循环 forever procedural_statement repeat 循环
repeat (loop_number)

39 五、 行为建模 循环结构 while循环语句 while (condition) for循环语句
procedural_statement for循环语句 for (initial_assignment;condition;step_assignment)

40 五、 行为建模 function定义 function [range] function_id; input_declarations
other declarations procedural_statements endfunction function适合描述组合逻辑块

41 五、 行为建模 function [BUS_SIZE-1:0] function_example; 函数调用
input [BUS_SIZE-1:0] Din; integer k; begin for (k=0;k<BUS_SIZE-1; k=k+1) function_example[BUS_SIZE-k] = Din[k]; end endfunction 函数调用 func_id(exp1,…expn); reg [BUS_SIZE-1:0] din,dout; dout=function_example(din);

42 五、 行为建模 Task定义 task task_id; input_declaration other declaration
procedural statements endtask task适合于描述时序任务

43 五、 行为建模 一个建模实例

44 五、 行为建模

45 六、UDP定义 6.1 UDP定义 primitive UDP_name(Output_Name,List_of_inputs);
output_declaration declaration of List_of_inputs [other declarations | initial 语句] table List of table entries endtable endprimitive

46 六、UDP定义 6.2 组合逻辑UDP 表中规定了不同的输入组合和相对应的输出值。 6.3 时序电路UDP
电平触发的触发器的描述 沿触发的触发器的描述

47 六、UDP定义

48 六、UDP定义

49 六、UDP定义

50 六、UDP定义 ?: 0、1、x b : 0, 1 - : 输出保持 (AB): 由A变到B r: 上跳变沿, 与(01)相同
- : 输出保持 (AB): 由A变到B r: 上跳变沿, 与(01)相同 f: 下跳变沿, 与(10)相同 p: (01)、(0x)、(x1)的任一种 n : (10)、(1x)、(x0)的任一种

51 七、系统任务和系统函数 7.1 显示和写入任务 $display $displayb $displayo $displayh
$write $writeb $writeo $writeh 7.2 探测任务 $strobe $strobeb $strobeo $strobeh

52 七、系统任务和系统函数 7.3 监测任务 $monitor $monitorb $monitoro $monitorh
7.3 监测任务 $monitor $monitorb $monitoro $monitorh 7.4 文件输入、输出任务 文件的打开、关闭 $fopen $fclose 从文件中读取数据 $readmemb $readmemh

53 七、系统任务和系统函数 7.4 模拟控制任务 $finish; 退出模拟器,返回操作系统
7.4 模拟控制任务 $finish; 退出模拟器,返回操作系统 $stop; 模拟器挂起。 任何TestBench中的激励码须包含下述形式语句: initial begin …… $stop; $finish; end

54 七、系统任务和系统函数 7.5 值转储(VCD)任务 $dumpfile(file_name):指定VCD文件名
$dumpvars(level, module_name); $dumpall; $dumplimit(number); $dumpon; $dumpoff;

55 八、与模拟有关的论题 8.1 信号驱动强度

56 八、与模拟有关的论题 8.2 竞争问题 出现竞争的原因: Nonblocking assignment with nonedelay;
8.2 竞争问题 出现竞争的原因: Nonblocking assignment with nonedelay; Concurrent always statements; Signals are assigned in multiple always statements or in multiple nonblocking assignments.

57 八、与模拟有关的论题 8.3 如何避免竞争

58 How to write a good verilog code
HDL Coding Style How to write a good verilog code

59 HDL Coding Style Objective Readable Modifiable Reuseable
Optimal Result in Synthesis Fast Simulation 保证综合前后逻辑模拟结果的一致性

60 HDL Coding Style Basic Coding Practices Coding for Portability
Guidelines for Clocks and Reset/Set Coding for Synthesis How to Partition a Design Designing with Memories Coding Profiling

61 Overview of the Coding Guidelines
Simple structure Basic type (VHDL only) Simple Clocking Scheme Consistent coding style,consistent naming conventions, consistent structure for process and state machines Regular partitioning schema, all module outputs registered and each module roughly the same size Easy to read, modify,reuseable Usage of parameters

62 Basic Coding Practices
尽可能多使用function描述、少用Task描述 尽量少用循环结构 注意变量、信号、模块、块命名的协调 注意端口描述按一定次序、端口连接的方式

63 Basic Coding Practices
命名规则 常数名字大写且有确定意义 信号名、变量名、端口名小写 参数名大写 时钟名以clk、clock开头 低电平有效信号名为:信号名_n rst、reset/set为复/置为信号名 模块名应有意义 提高可读性 不使用保留字

64 Basic Coding Practices
模块端口描述及其引用时的连接 建议模块端口描述按次序进行: 输入信号 输出信号 clocks clocks resets resets enables enables other control signals other control signals data/address signals data 描述大的模块连接结构时,采用端口名、信号名相对应的连接方式,提高可读性和可修改性 .端口名(信号名)

65 Coding for Portability
Objective Technology-independent Compatible with various simulation tools Compatible with various synthesis tools Easily translated from Verilog to VHDL Easily combined with C

66 Coding for Portability
Don’t use hard-coded numeric valus a poor coding style: wire [7:0] my_in_bus; wire [7:0] my_out_bus; 建议采用: parameter BUS_SIZE = 8 wire [BUS_SIZE-1:0] my_in_bus; wire [BUS_SIZE-1:0] my_out_bus; Use technology-independent libraries 描述尽量避免与综合、模拟工具相关

67 Guidelines for Clocks and Resets
最简单的设计 单个的全局时钟 上/下跳变沿触发器 优点 简单、易懂、易分析

68 Guidelines for Clocks and Resets
Avoid Mixed Clock Edges Difficulty in timing analysis (the duty cycle is a critical issue in timing analysis, in addition to the clock frequency itself); Difficulty in scan_based test; Difficulty to maintain a design.

69 Guidelines for Clocks and Resets
Avoid Use Gated Clock 使用内部产生时钟要特别注意: 设计的可测性受到严重影响(扫描测试难度大); 应将内部产生时钟模块描述放在设计描述的领层; 绝对禁止将内部产生时钟模块描述作为宏单元的子模块。

70 Guidelines for Clocks and Resets

71 Guidelines for Clocks and Resets
Make sure your design are controlled only by a simple reset/set signals; 避免条件置复/位; 时序逻辑器件的置复/位不应放在initial描述块中(可综合性、保证综合前和综合后的模拟结果相同)

72 Coding for Synthesis Objective Performance  Testability  Synthesis
 Simplification and Timing Analysis 保证综合前、后的逻辑模拟结果的一致

73 Coding for Synthesis 时序元件问题; always @(敏感信号/变量表)完整性问题; 组合电路的反馈问题;
Blocking/Nonblocking赋值语句的使用问题; if…else/ case描述的选择; FSM的描述

74 Coding for Synthesis 1 时序元件问题: 避免不必要的Latch;
1 时序元件问题: 避免不必要的Latch; 触发器的初始赋值(reset/set)不应在initial描述块内定义,而应该在其功能描述中加以定义。 组合电路避免出现反馈回路

75 Coding for Synthesis 避免不必要的Latch: 在组合逻辑描述中,保证:
所有的if…else及其嵌套结构、case、casex、casez结构是满的描述 变量、信号的赋值在每一个分支中都应有明确的指定; if…else及其嵌套结构本身是满的; case、casex、casez必须包含default分支;

76 Coding for Synthesis

77 Coding for Synthesis 2 @(敏感信号/变量表)问题
2 @(敏感信号/变量表)问题 敏感信号/变量表必须完整,以保证综合前、后的模拟结果一致,但不相关的信号的加入则会降低模拟速度。 对组合块,每一个出现在赋值语句右边且没有在块内被预先赋值的信号应列入表中; 对时序块,1)时钟控制信号必须出现在敏感表中; 2)若为异步置/复位,则相应的置/复位信号必须列入敏感表。

78 Coding for Synthesis 3 Blocking and NonBlocking Assignments
对于组合逻辑块描述,建议采用阻塞赋值语句; 对于时序块描述,建议采用非阻塞赋值语句。

79 Coding for Synthesis

80 Coding for Synthesis

81 Coding for Synthesis 4 if…else 及其嵌套结构与case语句 尽量少用嵌套的if…else结构;
级联的二选一开关 采用case、casex、casez结构 多路选择开关

82

83 Coding for Synthesis

84 Coding for Synthesis 4 FSM描述 Mealy机 NS = f( PS, INPUT);
 OUTPUT = h(PS, INPUT);  posedge Clk : PS <= NS;

85 Coding for Synthesis 描述方式: 组合块: always @(INPUT or PS ) 时序块: begin
NS = f (PS, INPUT); OUTPUT = h(PS, INPUT); end 时序块:

86 Partitioning for Synthesis
Objective Better Synthesis Results  Faster Compile Runtimes  Ability to Use Simple Strategy to meet Timing Constraints  Optimal Design

87 Partitioning for Synthesis
Guidelines Register all output signals of the module  Separate modules that have different design goals  Complete combinational logic paths in a single module, and specially avoid glue logic  Considering resource sharing  Separate asychronous logic from synchronous logic  Separate blocks controlled by different clocks Separate memory from random logic

88 Partitioning for Synthesis
Register all output signals of the module

89 Partitioning for Synthesis
Separate modules that have different design goals

90 Partitioning for Synthesis
combinational logic paths in a single module

91 Partitioning for Synthesis

92 Partitioning for Synthesis

93 Partitioning for Synthesis
FSM Partition Objective: High performance Method: Cascade partition Master-Slave Partition

94 Partitioning for Synthesis

95 Partitioning for Synthesis

96 Partitioning for Synthesis


Download ppt "Verilog硬件描述语言基础."

Similar presentations


Ads by Google