(完整版)华为fpga设计规范(VerilogHdl)
- 格式:doc
- 大小:47.62 KB
- 文档页数:12
文档中心文档编号资源类别:HDL语言版本1.0密级内部公开共41页Verilog HDL入门教程(仅供内部使用)拟制:批准:批准:中研基础中研基础日期:日期:日期:2004.8.3yyyy/mm/dd版权所有不得复制日期2004.8.3 修订版本1.00描述初稿完成修订记录作者目录1 前言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 HDL设计方法学简介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1 数字电路设计方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52.2 硬件描述语言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 设计方法学. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62.4 Verilog HDL简介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4.1 历史. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72.4.2 能力. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73 Verilog HDL 建模概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.1 模块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.1.1 简单事例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.1.2 模块的结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103.1.3 模块语法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 时延. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3 三种建模方式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3.1 结构化描述方式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3.2 数据流描述方式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3.3 行为描述方式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153.3.4 混合设计描述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164 Verilog HDL 基本语法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1 标识符. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.1 定义. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174.1.2 关键词. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.3 书写规范建议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174.2 注释. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.3 格式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4 数字值集合. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184.4.1 值集合. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4.2 常量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184.5 数据类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205.1 模块定义结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285.2 模块端口. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285.3 实例化语句. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295.4 结构化建模具体实例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316 数据流建模. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.1 连续赋值语句. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.2 阻塞赋值语句. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.3 数据流建模具体实例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347 行为建模. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357.1 简介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357.2 顺序语句块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Verilog HDL 入门教程关键词:摘要:本文主要介绍了Verilog HDL 语言的一些基本知识,目的是使初学者能够迅速掌握HDL 设计方法,初步了解并掌握Verilog HDL语言的基本要素,能够读懂简单的设计代码并能够进行一些简单设计的Verilog HDL建模。
目录•Verilog概述•Verilog基础语法•组合逻辑电路设计•时序逻辑电路设计•数字系统设计方法学•华为Verilog编程规范与技巧Verilog概述1 2 3Verilog语言诞生,最初用于模拟电子系统的行为。
1980年代初期Verilog逐渐发展成为硬件描述语言(HDL),用于描述数字电路和系统的结构和行为。
1980年代中期Verilog不断完善和发展,成为电子设计自动化(EDA)领域的重要标准之一,广泛应用于集成电路设计、FPGA开发等领域。
1990年代至今Verilog历史与发展集成电路设计Verilog可用于描述数字集成电路的逻辑功能、时序关系和电路结构,是IC设计领域的重要工具。
FPGA开发Verilog可用于FPGA的逻辑设计和编程,实现复杂的数字系统和算法。
ASIC设计Verilog可用于ASIC设计的各个阶段,包括逻辑设计、综合、布局布线等。
系统级建模与仿真Verilog可用于构建系统级模型,进行系统仿真和性能分析。
Verilog应用领域01Verilog 是一种硬件描述语言(HDL ),用于描述数字电路和系统的结构和行为。
02与其他硬件描述语言(如VHDL )相比,Verilog具有更接近C 语言的语法风格,易于学习和使用。
Verilog 支持多种抽象层次的描述,包括行为级、寄存器传输级(RTL )、门级和开关级,方便设计师在不同设计阶段使用。
Verilog 与硬件描述语言关系02Verilog基础语法标识符与关键字标识符用于标识变量、模块、函数等程序实体的名称,由字母、数字和下划线组成,首字符必须是字母或下划线。
关键字Verilog语言中的保留字,用于定义语言结构和控制语句,如`module`、`input`、`output`、`if`、`else`等。
数据类型与运算符数据类型包括整型(`integer`)、实型(`real`)、时间型(`time`)以及用户自定义类型等。
Verilog HDL!"#$%&' (!"#$ %& '( )* $ +( )* $ )* $ ,-. !")* $/0%&! " #1234 $ % 5 6 789: ;<=> >5 ? ;<=> > #5 6 ;<=> > 5 6 7? ;<=> >5 ? ;<=> > &5 6 ;<=> > & ;<=> >8 @ AB #CDAB EFAB # GH # I JKL M&KN#OP&' QRS %&TUV W X YZ[\]^_`abcdefghBijk)*+,-.1/012345lmnop qXr >stM&KNuv7(wv7 #$ x/0ym%& z{|}~ i | S %&z{| w/ %& | n1.1678678345345()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*+ ',- .. / -"! ' 0 - 123 1" '45 +1 , 6 " ,- .. / 2 ' &&&(& ( +1'0 -1*)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(+ .- % 7 -"8 $-+8 8 8 9: 1-" 8 8 : -"1-"$-+8 -":; $-+:; -":22 $-+ < = = :22-" < 7 > 9 ? 7 > 9 ? 7 > 9:1.29:;2:<=>3?2=@8()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*+ '+-5 /-"! ' 0 - 123 1" '45 +1 , +-5/ 2 ' &&&(& (+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))( + .- %@7 8 848 8$8 -50 -"9:1-" 8 848 :(( 1-"1-" A '&B $ :((2 3" 3 "-"1-" -50 -" :(( 2- "-50 -" :((+-5; 2C7 4 $963 2 7$9D6&& ' -50 -" < :D6& ' -50 -" < :D6 & ' -50 -" < 4 :. , - " ' -50 -" < :.3 2..+ .-AB8 ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + '. 3 . /-"! ' 0 - 123 1" '45 +1 , . 3 ./ 2 ' &&&(& (+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))( + .- 4 47 84 8E -"9:1-" 4 :(( 61-" A '&B :(( 1-" 3 .-"1-" A '&B E -" :A '&B E -" :; 2C74 96,7F4 9E -" < D6& :23 2 7 9D6&&& 'E -" < D6&&&&0&&& :D6&& ' E -" < D6&&&&0&& & :D6& & ' E -" < D6&&&&0& && :D6& ' E -" < D6&&&&0 &&& :D6 && ' E -" < D6&&& 0&&&& :D6 & ' E -" < D6&& &0&&&& :D6 & ' E -" < D6& &&0&&&& :D6 ' E -" < D6 &&&0&&&& :. , - " ' E -" < D6&&&&0&&&& :.3 2..+ .-CDEB8())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + 'G 3 . /-"! ' 0 - 123 1" '45 +1 , G " 4 3 ./ 2 ' &&&(& (+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))( module PRIO_ENCODER (Cin, Din,Ein, Fin, Sin, Pout);input Cin, Din, Ein, Fin;//input signalsinput[1:0] Sin;//input select control output Pout;//output select result reg Pout;//Pout assignmentalways @(Sin or Cin or Din or Ein or Fin)beginif (Sin == 2'b 00)Pout = Cin;else if (Sin == 2'b01)Pout = Din;else if (Sin == 2'b10 )Pout = Ein;elsePout = Fin;endendmodule // module prio_encode1.3598 ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + '3 - "0 /-"! ' 0 - 123 1" '45 +1 , 3 - " ; "! 6/ 2 ' &&&(& (+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))( + .- %HI04H74 8 3J8 2 "8 -"9:1 + " K ."!< :1 + " %0 E < :1-" 3J 8 2 " 8 4 :-"1-" AK ."! '&B -" :AK ."! '&B -" :; 2C71 2 . 3J . 2 "9, 7F 2 "9-" L< D6& :2 , 74 9-" L< M%0 E -" N :.+ .-1.4FGH ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + ' "!+ " 3 /-"! ' 0 - 123 1" '45 +1 , "!+ " 3 3 -. N8 8 )8 (/ 2 ' &&&(& (+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))( + .- I 4I 7 8 8 O 8 O 8O 8 O 9:1-" A '&B 8 :(( 1-" 1 "-"1-" A '&B O :(( -"1-" 2-+8 ; "! 3 6 "-"1-" A '&B O :(( -"1-" 2-" 3" 2- "-"1-"A '&B O :(( -"1-" P- "-"1-" A '&B O :((1 .-3"A '&B O :A '&B O 8 O :A '&B O :(( "!+ " 3 1 "; 2C7 96O < N :O < :O < ( :O < ) :..+ .-1.5IJH ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + ' " /-"! ' 0 - 123 1" '45 +1 , " 1 "/ 2 ' &&&(& (+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))( + .- 4 I H 7 8 8O 8O 8O 8O 9 :1-" A '&B 8 :(( 1 "-"1-" O 8 O 8 O 8 O :(( 2- "O 8 O 8 O 8 O :((3 +1; 2C7 96O < Q :O < L :O< Q< :, 7 L< 9O< : 2O< & : ..+ .-1.6KLH())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*+ '2! ," / -"! ' 0 - 1 23 1" '45 +1 , 2! ," / 2 ' &&&(& ( +1'0 -1*)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(+ .- $ I 7 " 8O 8 O 9 : 1-"A '&B" : -"1-" A '&B O 8O :1 + " < : A '&BO 8 O :; 2C7 " 96O < " LL :O< " QQ :. .+ .-1.78L 8> bst}L L tst }% t>}=> t> k tl p " ;<=b = 4 R p 0z¡¢1 2 . J9 ;<= 7 . J9 = £¤¥¦§¨ © >;<=> >()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*+ '.,, / -"! ' 0 - 123 1" '45 +1 , 2 4. 1 1 / 2 ' &&&(& ( & +1'0 -1*)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(+ .- 7 " 8 J8 O9: 1-" " 8 J: -"1-" O:O: ; 2 C 71 2 . J9OL< " :.+ .-5 6 ;<=> >()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*+ '.,,0 2 30 2" / -"! ' 0 - 123 1" '45 +1 , 2 4. 1 1 ; "! 2 3! -2 2 " / 2 ' &&&(& ( & +1'0 -1*)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(+ .- 0 $EH 0 $I 7 " 8 J8 2 "8 O9: 1-" " 8 J8 2 ": -"1-" O:1 + "%0 E < :O:; 2 C 71 2 . J . 2 "9, 7 S 2 "9O L< M%0 E D6& :2O L< M%0 E " :.+-.-5 ? ;<=> > ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + '.,,0 2 301 /-"! ' 0 - 123 1" '45 +1 , 2 4. 1 1 ; "! 2 3! -2 G 2 "/ 2 ' &&&(& ( &+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(+ .- 0 $EH 0G 4 7 " 8 J8 G 2 "8 O9:1-" " 8 J8 G 2 ":-"1-" O:1 + " %0 E < :O:; 2 C 71 2 . J . G 2 "9, 7 SG 2 "9O L< M%0 E D6 :2O L< M%0 E " :.+-.-5 6 7? ;<=> > ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + '.,,0 2 3 /-"! ' 0 - 123 1" '45 +1 , 2 4. 1 1; "! 2 3! -2 2 " . G 2 "/ 2 ' &&&(& ( &+1 ' 0 -1+ .- 0 $EH 7 " 8 J8 2 "8 G 2 "8 O9:1-" " 8 J8 2 "8 G 2 " :-"1-" O:1 + " %0 E < :O:; 2 C 71 2 . J . 2 " 1 2 . G 2 "9, 7 S 2 "9O L< D6& :2 , 71 2 " 9O L< D6 :2O L< M%0 E " :.+-.-5 6 ;<=> > ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + '.,,02 30 2" /-"! ' 0 - 123 1" '45 +1 , 2 4. 1 1 ; "! $ 3! -2 2 "/ 2 ' &&&(& ( &+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(+ .- 0$EH 0 $I 7 " 8 J8 2 "8 O9:1-" " 8 J8 2 ":-"1-" O:1 + " %0 E < :O:; 2 C 71 2 . J 9, 7 S 2 "9O L< M%0 E D6& :2O L< M%0 E " :.+-.-5 ? ;<=> >+ '.,,02 301 /-"! ' 0 - 123 1" '45 +1 , 2 4. 1 1 ; "! $ 3! -2 G 2 "/ 2 ' &&&(& ( &+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(+ .- 0$EH 0G 4 7 " 8 J8 G 2 "8 O9:1-" " 8 J8 G 2 ":-"1-" O:1 + " %0 E < :O:; 2 C 71 2 . J 9, 7 SG 2 "9O L< M%0 E D6 :2O L< M%0 E " :.+-.-5 6 789: ;<=> > ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + '.,,03J0 /-"! ' 0 - 123 1" '45 +1 , 2 4. 1 1 ; "! 2 3! -2 2 " . 3J 4 6/ 2 ' &&&(& ( &+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(+ .- 0 T04H 7 " 8 J8 2 "8 4 8 O9:1-" " 8 J8 2 "8 4 :-"1-" O:1 + " %0 E < :O:; 2 C 71 2 . J . 2 "9, 7 S 2 "9O L< D6& :2 , 74 9O L< M%0 E " :.+-.-1.8ALU ())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))*+ ' - /-"! ' 0 - 123 1" '45 +1 , 6 " J ! . %/ 2 ' &&&(& (+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(! " #! $ %&! ' # '! ( ) * & !+ # ' ,! & -# . #! !/! ( ) * " #! & ! , % , ' 0 , # 1%! $ & # !/ ! - 0 21 % - #! 0 21 % ! ! ( ) * & ' ! ,! ! !& -# . - 1. #!-# . #! 1 !' # #! 1 !'+ ( ) * 3 4&-# . 1 !'&( ) * &, -! , -# . #! ), -!! &! ( ) * " &1-#' " %21 ) 0 &21 ) 0 5 &21 ) 0 5 6 %&21 ) 0 21 &-#' &, -!, -! , -# . #! ), -!! &! ( ) * " &1-#' " %21 ) 0 &21 ) 0 7 6 %&21 ) 0 7 &21 ) 0 &-#' &, -!- -# . #! 1 !'&#'' 3( * 0 ( * ( * " ( ) *%&#'' 3( * 0 ( * ( * " ( ) *%&#'' 3( * 0 ( * ( * " ( ) *%&#'' 3( * 0 ( * ( * " ( ) *%&- -# . #! 1 !'&#'' 4( * 0 ( * ( * " ( ) *%&#'' 4( * 0 ( * ( * " ( ) *%&#'' 4( * 0 ( * ( * " ( ) *%&#'' 4( * 0 ( * ( * " ( ) *%&- -# . 1 !' + !/ -# .8 98#/ # &# +#.' : 3 4 $ %1, $ % 1( * 0 3( * 7 4( * 5 &( * 0 3( * 7 4( * 5 3( * 7 4( * 5 4( * 5 &( * 0 3( * 7 4( * 5 3( * 7 4( * 5 4( * 5 3( * 7 4( * 5 4( * 5 4( * 5 &! 0 3( * 7 4( * 5 3( * 7 4( * 5 4( * 5 3( * 7 4( * 5 4( * 5 4( * 5 3( * 7 4( * 5 4( * 5 4( * 5 4( * 5 &' 1( * 0 21 &( * 0 21 &( * 0 21 &! 0 21 &-# - #! !/ #! ' !'&#'' ( * 0 63( * 5 4( *% ; &#'' ( * 0 63( * 5 4( *% ; ( *&#'' ( * 0 63( * 5 4( *% ; ( *&#'' ( * 0 63( * 5 4( *% ; ( *&1.9 MNOP FSM345< Q%1234$}L§/ª %&«8 %&7¬%&¬®1234 L }¯° 0 34 ±} 03434 ²³¨´7µ¶341T·¸¹¦º»¼h1T34 ²³½7µ¶341T!"%& ¾r¿ÀL§ÁÂÃ!" ÄÅÆ º¥8 ¨ÇÃlKN:0ȧ34 8XÉOÊ ËÌ·°lÍÎÆ qXÏÐÑÒL34l89ÓÔ 12 ÕÖ8רº¥ÙÚÛ°º¥ÜlL ÝÞ 89ßgàáâÛ°ãä:lå89ົ¼h³æçº¥¼h ¨Ü³æº» º¥ èéXÚ L 89ßgê ë쥾κ»7º¥,í} 34 îXïð34 «ñº¥òóôº»èé·º»ÂÃl89ßg ¿L8õ³æö :÷º¥34ø 34 º¥34ù¶L ßgÚÙº»¼h úû ܥ"lº¥¼h;L%&:0 34 Â Üø:034 M¥Lü34ÉOÆ ïð7X %& Ê ËÌÂï°:0ȧ34 ¾!"Lý¯°34 ó ¾ Xþÿ34²"l± 1L ® æ34 þÿEÇÃñ!" LÂÃþÿ¥¨ 34²ÅL°Xþælþÿ%&34²8:0 Âà ^ p} ¥"ç}í34 oa Ç1 & } Loa ¿À bM & ¨ 88 } ¨l ^ 347 ØÂÃí 0/¾ %&ç34 %&CDl pXL £ ,- 03 2 21 3 °!ÝQ34ä:1 34 l%&p¨Ü¥"" }#$%¥¨&'"3!("3! Ü5¾ )* Ö86 I + +,; 2 C7 - 02"9 63 2 7 - 02"9$I& ' H 5"02" < $I : $I ' H 5"02" < $I : $I ' H 5"02" < $I&: .3 2 .DDQQCurr_stNext_st1 0,- 3 2; 2 C7 - 02"9 63 2 7 - 02"9 ((2 "! 2 2 ,- 03 2 $I& ' H 5"02" < $I : $I ' H 5"02" < $I : $I ' H 5"02" < $I&: . , - " ' H 5"02" < $I&: .3 2 .Curr_stDNext_stD0,- 3 21 032 21 3¯á¨ 8¥"M§343 2 7U4 8 4 8 4 V9 D6WW ' -" < : D6W W ' -" < : D6 WW ' -" < :.3 2En1In1En2In2En3In3Out01 3 23 2 7U4 8 4 8 4 V9 ((2 "! 2 2 1 03 2 D6WW ' -" < : D6W W ' -" < : D6 WW ' -" < : .3 2En1In1En2In2En3In3Out# 01 3 2-.:03 2 53 2 5l %8/ X @ " 3 2Ü01¶ 7Ø ¨L 1z{%&p¥"@L°X,-} Ü2345l 67,8Î34 , ¥¾8ñ:0%ÉO 34 Gæ# l ¡Ù9b :ã[;p X <=>?@A¶ 7Ø ¨L1I B *CDEF ¥+,Çl}L 34 34²lp ÂÃ0z å3434²< " 8/ ! EB ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + ' 0! "0,2+ /-"! ' 0 - 123 1" '45 +1 , ! " 3 . . 2" " + 3!/ 2 ' &&&(& (+1 ' 0 -1 *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))( + .- H40 I0 $ 7 3J8 2 "8 8 8 8 8 48$ 8 - " 8 " 9:1-" 3J:((2 2" + 3J1-" 2 ":(( 2 3 2 "8 3" / ! !1-" 8 8 8 8 4:(( $ 1-" 2 2-"1-"$ 8 - " 8 " :(( $ -"1-" 2 2((. , -"1-" 2 2 " 1$ :- " :" :(( 3 "! 2 +6 3 + 2 , 2" " 21 + " A '&B (( -+ $I I40IEG4 ! "$ < D6&&&&&& 8$ < D6&&&&& &8$ < D6&&&& &&8$ < D6&&& &&&8$# < D6&& &&&&8$ < D6& &&&&&8$ < D6 &&&&&&:1 + " %0 E < :(( 3 3- " 2" " . 5" 2" " / 6 2A '&B - 02":A '&B H 5"02":(( - 02" 22 + "8 2 P- " 3; 2 C 71 2 . 3J 1 2 . 2 "96, 7 2 "9- 02" L< $ :2- 02" L< M%0 E H 5"02": .((3 +6 " 3; 2 C 7 - 02" 49 63 2 7 - 02"9 ((,- 03 2$ '6- " < D6&:" < D6&:$ < D6&:, 7 > S > 9H 5"02" < $ :2 , 7 > > S 9H 5"02" < $ :2H 5"02" < $ :.$ '- " < D6 : " < D6&: $ < D6&: , 7F 9H 5"02" < $ :2H 5"02" < $ : .$ '6- " < D6&: " < D6 : $ < D6&: , 7 ? 9H 5"02" < $ :2H 5"02" < $ :.$ '6- " < D6 :" < D6 :$ < D6&:, 7 > > S 9H 5"02" < $#:2H 5"02" < $ :.$# '6- " < D6 :" < D6&:$ < D6&:H 5"02" < $ :.$ '- " < D6&:" < D6 :$ < D6 :, 7F49H 5"02" < $ :2H 5"02" < $ :.$ '6- " < D6&:" < D6 :$ < D6&:, 749H 5"02" < $ :2H 5"02" < $ :..3 2..+ .-< # . EB ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))* + '6 0,2+ /23 1" '45 +1 , 6 3 . . 2" " + 3!/ 2 ' &&&(& (+1 ' - ; ". *)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))( Y" + 23 2 ( &12+ .- 6 7 3J8 2 "8 8 8 8 8 48$ 8 - " 8 " 9:1-" 3J:((2 2" + 3J1-" 2 ":(( 2 3 2 "8 3" / ! !1-" 8 8 8 8 4:(( $ 1-" 2 2-"1-"$ 8 - " 8 " :(( $ -"1-" 2 2((. , -"1-" 2 2 " 1$ :- " :" :(( 3 "! 2 +6 3 + 2 , 2" " 21 + " A '&B (( -+ $I I40IEG4 6 $ < D6&& 8$ < D6& &8$ < D6& 8$ < D6 &&8$# < D6 & 8$ < D6 &8$ < D6 :1 + " %0 E < :(( 3 3- " 2" " . 5" 2" " / 6 2A '&B - 02":A '&B H 5"02":(( - 02" 22 + "8 2 P- " 3; 2 C 71 2 . 3J 1 2 . 2 "96, 7 2 "9- 02" L< $ :2- 02" L< M%0 E H 5"02":.((3 +6 " 3; 2 C 7 - 02" 4963 2 7 - 02"9 ((,- 03 2$ '6- " < D6&:" < D6&:$ < D6&: , 7 > S > 9H 5"02" < $ :2 , 7 > > S 9H 5"02" < $ :2H 5"02" < $ :.$ '6- " < D6 : " < D6&: $ < D6&: , 7F 9H 5"02" < $ :2H 5"02" < $ : .$ '6- " < D6&: " < D6 : $ < D6&: , 7 ? 9H 5"02" < $ :2H 5"02" < $ :.$ '6- " < D6 :" < D6 :$ < D6&:, 7 > > S 9H 5"02" < $#:2H 5"02" < $ :.$# '6- " < D6 :" < D6&:$ < D6&:H 5"02" < $ :.$ '6- " < D6&:" < D6 :$ < D6 :, 7F49H 5"02" < $ :2H 5"02" < $ :.$ '6- " < D6&:" < D6 :$ < D6&:, 749H 5"02" < $ :2H 5"02" < $ :..3 2..+ .-Ã;ÑÒ 0 ¾!" $ %&Â0 £ CD ¾¡"# $ CD G2R 12452.1CRC S TB TBU U V8345 Q%}l HIJ P¼ p/0 KL }P l #OØR )*¾K MM¥2ºNMOP3 3 .- . 3. 2Q k}L§/0)* ym R}«Lk ®M S9/#TU å#O V HIJ#ã·÷W #XY#B Z RÚ#OV[$\ #O VI (]ló^\ #O V L/#TU^ #} _z{ #_ / 2º`¯/ 2ºpK å#O Vî= STBUV83WXYZ[\]l$ )* 8a X0ÚU bEL cd¾w/O #eI (U 80#eCD!"8}øfgh(ÍÎHIJ ¼ij H² ®L°k9ö } M S9¡¢ HIJ #¡¢ ®M S9 #z lÇ¢8&&& 8&&&&8&& &8&&& < 5 N 5 N5 NlM S9¡¢p Ç1 HIJ #m ¡¢®L M S9M S9 # }HIJ pnã #O V MS9R ®MS9O W #MS9#MS9l ® )* 8#O V M S9 o Ã@öp ®M S9R qrs#}t?öAB}P uv @÷Ú ÂÃ0 ¾ w M S9q Ø&¬®\ #O V M S9«ñHIJ R 7x }x yÇÃ$ \ #O V M S9n ®M S9RUz 0à {9¡¢@OR&ló^ 2º¼i ¶L|, #O V ØL|,qØ # # Þ#O V M S9 L ®M S9R TU W# }Y #n &z{ #¨ &d~2º#O8 #O a Xî2¨ ®M S91¨ ç÷ÚGæ { ÉO a XKN@®M S9 ®M S9R759 < 5 N 5 N5 N)* $ , §'( )* $ 7+( )* $ m 0Ú}+( )* $ «ñ E+( 80Úç'( Lü ÇÃlÍHrL'( $P/ )* ãÂÃP @ t 7 bÕ ÷ @ t L s@LÝ®U bÕÝ®¨5I x z{W# Z Z U# r xTU# 8@ t @L U# f I(b E z{W# Z&Z @ tòó @L '( )* $ R z Ç¢'( )* $ Rl +( )* $ 8 Âà 0'( )* 0 @t $ +( )* .'( )* $ ¨ }+( )* $8º¥ÇÃX lL 89ßgà@ t L sa X@ ! ;@t ¨Â lL 89ßgà@ ÇÃö|,%&}0¬CD¾Ý®Þ )* $«¬CD7 º¥ t ¬®P 7% X^_ = 8 STBUV83 >? EB@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ A # ) - - # # B@ !/ )@ ? '- ! ) C/ ' ' ' ! -/ -9 = , D81 !' -@ #!# !/ #! . # ' E; FE; FE; F@ # 1. )@ = B ' > '! . ) 8 8 = B '@ G # ) H/# 1:'H / #+ - -@ # . ) > #+ C -/ . I -@ . /! -% <<< > #+ C -/ . I - /! ' B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 8888888888888888888888888888C"4 $"? G= 4 == ' ! = ' ! ' #3- 9 -9 ' #- !# ! , -?#!# ! #!# , - - ! ! ! = ' # % &8888888888888888888888888888I3J ?G = CI"J8888888888888888888888888888! = ' ! &! 3- 9 &! - &! ( ) * ?#!# &! ! ( ) * - ! &8888888888888888888888888888I3J ?G = CI"J8888888888888888888888888888+ = ' ! &+ 3- 9 &+ - &+ ( ) * ?#!# &( ) * - ! &( ) * - ! &C &! K 9 &88888888888888888888888888884 = $GCG=8888888888888888888888888888# # ! ? L0 &8888888888888888888888888888- ! ' #8888888888888888888888888888# +#.' : ' = ' ! ' 3- 9% 1, = ' !%- ! M0 N ? L 21 &' , - 00 21 %- ! M0 N ? L 21 &'- ! M0 N ? L - ! &- ! ' #8888888888888888888888888888# +#.' : - ! ?#!# %1- ! 0 - ! &, 0 & O0 & 0 8 %1C 0 ?#!# ( * ; - ! ( * &, K0 &KO &K0K8 %- ! (K* 0 - ! (K8 * &- ! ( * 0 C ; - ! ( * &, 90 &9O &9098 %- ! (9* 0 - ! (98 * &- ! ( * 0 C ; - ! ( * &, 0 & O & 0 8 %- ! ( * 0 - ! ( 8 * &- ! ( * 0 C &`_ = 8 STBUV83 >? EB@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ A # ) - - ' B@ !/ )@ ? '- ! ) C/ ' ' ' ! -/ -9 = , ' # #!#@ !/ #! . # ' E; FE; FE; F@ # 1. )@ = B ' > '! . ) 8 8 = B '@ G # ) H/# 1:'H / #+ - -@ # . ) > #+ C -/ . I -@ . /! -% <<< > #+ C -/ . I - /! ' B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 8888888888888888888888888888C"4 $"? G8888888888888888888888888888= G== ' ! = ' ! ' #3- 9 -9 ' #- !# ! , -?#!# ! #!# , -- ! ! ! = ' #% &8888888888888888888888888888I3J ?G = CI"J8888888888888888888888888888! = ' ! &! 3- 9 &! - &! ?#!# &! ! ( ) * - ! &8888888888888888888888888888I3J ?G = CI"J8888888888888888888888888888+ = ' ! &+ 3- 9 &+ - &+ ?#!# &( ) * - ! &C &! K 9 &88888888888888888888888888884 = $GCG=8888888888888888888888888888# # ! ? L0 &8888888888888888888888888888- ! ' #8888888888888888888888888888# +#.' : ' = ' ! ' 3- 9%1, = ' !%- ! M0 N ? L 21 &' , - 00 21 %- ! M0 N ? L 21 &'1C 0 ?#!# ; - !( * &, K0 &KO &K0K8 %- !(K* M0 N ? L - !(K8 * &- !( * M0 N ? L C ; - !( * &, 90 &9O &9098 %- !(9* M0 N ? L - !(98 * &- !( * M0 N ? L C ; - !( * & , 0 & O & 0 8 %- !( * M0 N ? L - !( 8 * & - !( * M0 N ? L C &2.1 #$ %& Q%abPcdefgabPBh> ijV#3k cdl m bPcd3>no5pqrstuv 3wx3yz{p|}~m 3EBe UVr} ;abPcd3UV ?;RUV3abPcd312g> KL8le Wg q KL 8r q KL 8q KL8UV 3k ¡¢3£¤ 9¥cdfg¡¦¢§ q KL 8cd ¨f cdKL 83¢§gcd3k g 8© 6NOª«abP9¬V83 NO ® 8;¯ GG?8°abPcd¬V83Z[\]abPcd¬V83 NOh ® 8« GG?8± 3} GG?83L9g D L²³´45> DL3abPcd¬V8l3(µ? gA E% 0 E F E F E F E FabPcd¬V8¶·¸¹ºþG¹« »¼(µ? A E%«½ 3¾9 D LabPcd¬V83 >? EB@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ A # ) # B @ !/ )@ ? '- ! ) C/ ' ' ' ! #! D81 !' # 1@ !/ . # ' E;DFE; FE; FE; F@ # 1. )@ = B ' > '! . ) 8 8@ = B '@ G # ) H/# 1:'H / #+ - -@ # . ) > #+ C -/ . I -@ . /! -% <<< > #+ C -/ . I - /! ' B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8888888888888888888888888888C"4 $"? G8888888888888888888888888888= J3GJ= ' ! = ' ! ' #3- 9 -9 ' ## # ' ! =#! # H =#=# ! ! # 1% &8888888888888888888888888888I3J ?G = CI"J8888888888888888888888888888! = ' ! &! 3- 9 &! # &! ( ) * &! ! ( ) * =# &8888888888888888888888888888I3J ?G = CI"J8888888888888888888888888888+ = ' ! &+ 3- 9 &+ # &+ ( ) * &( ) * =# &! &88888888888888888888888888884 = $GCG=8888888888888888888888888888# # ! ? L0 &8888888888888888888888888888=# ' #8888888888888888888888888888。
VerilogHDL培训教程——华为第一章:引言随着电子设计自动化(EDA)技术的不断发展,硬件描述语言(HDL)在数字电路设计领域扮演着越来越重要的角色。
VerilogHDL 作为一种主流的硬件描述语言,因其强大的功能、灵活的语法和广泛的应用范围,已成为数字集成电路设计工程师必备的技能之一。
本教程旨在帮助读者掌握VerilogHDL的基本概念、语法和设计方法,为华为等企业培养合格的数字电路设计人才。
第二章:VerilogHDL基础2.1VerilogHDL简介VerilogHDL是一种用于数字电路设计的硬件描述语言,它可以在多个层次上对数字系统进行描述,包括算法级、寄存器传输级(RTL)、门级和开关级。
VerilogHDL的设计初衷是为了提高数字电路设计的可重用性、可移植性和可维护性。
2.2VerilogHDL编程环境(1)文本编辑器:Notepad++、SublimeText等;(2)仿真工具:ModelSim、IcarusVerilog等;(3)综合工具:XilinxISE、AlteraQuartus等。
2.3VerilogHDL语法基础(1)关键字:VerilogHDL中的关键字具有特定含义,如module、endmodule、input、output等;(2)数据类型:包括线网类型(wire)、寄存器类型(reg)、整数类型(integer)等;(3)运算符:包括算术运算符、关系运算符、逻辑运算符等;(4)模块与端口:模块是VerilogHDL设计的基本单元,端口用于模块之间的信号传递;(5)行为描述与结构描述:行为描述用于描述电路的功能,结构描述用于描述电路的结构。
第三章:VerilogHDL设计流程3.1设计流程概述(1)需求分析:明确设计任务和功能要求;(2)模块划分:根据需求分析,将设计任务划分为若干个模块;(3)编写代码:使用VerilogHDL编写各个模块的代码;(4)仿真验证:对设计进行功能仿真和时序仿真,确保设计正确;(5)综合与布局布线:将VerilogHDL代码转换为实际电路,并进行布局布线;(6)硬件测试:在FPGA或ASIC上进行实际硬件测试。
VerilogHDL编码规范1 目的为了FPGA、芯片IP核开发设计和验证人员之间更好地进行交流,提高代码的可读性,可维护性,特制定本规范,作为程序编写的指导文件。
本规范包括强制性规范和推荐性规范。
2 适用范围FPGA、芯片IP核逻辑设计和仿真验证。
编程语言采用Verilog语言。
3 相关规定1.本规范内容为逻辑设计岗位、仿真验证岗位员工必备基础知识,新员工入职时必须通过参加相关培训掌握本规范。
2.本规范的掌握、执行情况是新员工转正考核的重要内容。
在新员工见习阶段,其内部导师每月须抽查代码并将审核结果填入代码审查表。
3.项目经理应不定期抽查项目成员的代码,并将编程规范执行情况填入代码审查表作为项目成员考核依据。
4.本规范为内部职称晋升考试内容。
1目录1. 严格级别定义 (4)2. 工程规则 (5)2.1. 工程规则表 (5)2.2. 工程规则详细说明 (5)3. 命名规则 (6)3.1. 命名规则表 (6)3.2. 命名规则详细说明 (6)4. 文件头规则 (10)4.1. 文件头规则表 (10)4.2. 文件头示例 (10)4.3. 结构头示例 (12)5. 注释规则 (14)5.1. 注释规则表 (14)5.2. 注释规则详细说明 (14)6. 编码规则 (16)6.1. 编码规则表 (16)6.2. 编码规则详细说明 (16)7. 综合规则 (23)7.1. 综合规则表 (23)7.2. 综合规则详细说明 (23)8. 静态时序分析规则 (27)8.1. 静态时序分析规则表 (27)8.2. 静态时序分析规则详细说明 (27)9. 仿真规则 (31)9.1. 仿真规则表 (31)9.2. 仿真规则详细说明 (31)10. 设计风格规则 (34)210.1. 设计风格规则表 (34)10.2. 设计风格规则详细说明 (34)11. 重用化设计 (38)11.1. 层次设计和模块划分 (38)11.2. 参数化 (40)12. 常用缩写表 (42)31.严格级别定义⏹Mandatory 1(M1)——必须遵守。
关于V erilogHDL编写规则的说明摘自“Comprehensive SRS V3 Standards—Semiconductor Reuse Standard”7 V erilog HDL 编码7.1 前言V erilog HDL编码标准属于虚拟部件生成一部分,用于对编码中的命名习惯、代码文档和代码格式风格的说明。
对相应规则的遵从能够简化重用,并从代码中抽象出其精华,使得代码可读性增强且兼容大多数工具。
除特别声明,任何与标准不一致的地方必须纠正而且以文档说明。
该标准确保在各种应用中代码的高度适应性,以此提升了重用性。
本文档的目的就是确保门级实现与标准的V erilog仿真器一致。
分割会影响针对应用的适应性。
建模实践小节处理在综合环境中很难描述清楚而又必须确保前后综合的一致性结构。
该标准可应用于行为和综合代码。
而且,还可以应用于其它的V erilog代码中如测试台、监视器等。
某些标准明确说明其应用代码的类型,如有例外会标出。
所描述的规则肯定是在快速Soc设计、集成、生产及维护过程中必须的要求项。
注意到在许多情况下,简单的介绍也能适应要求,但是,介绍会带来大量的例外、工具限制或一些深度的使用习惯,而这些与规则相悖。
7.1.1可交付的列表在第2部分VC块可交付列表已经定义了IP库形式。
包括:可综合的RTL源代码(L1)测试台(V1)驱动(V2)监视器(V3)详细行为建模(V4)短小模型(V6)形式模型验证(V12)7.2参考信息7.2.1参考文档略7.2.2术语基地址:偏移量相对的地址HDL:硬件描述语言屏蔽拴:物理上,屏蔽拴指一条连接到VDD或VSS,或者二个输入的选择输出线,用于对模块的配置而不会影响模块内部。
该设置能够在更改配置时避免重综合。
PLL:锁相环RTL:文本宏顶层模块:在VC设计层次中最高模块。
UDP:用户定义原语7.3命名规则7.3.1文件命名R7.3.1 一个文件一个模块一个文件最多可以有一个模块。
FPGA的设计基础之Verilog语言1FPGA的设计基础之Verilog语言硬件描述语言(HDL)是一种用形式化方法来描述数字电路和系统的语言。
数字电路系统的设计者利用这种语言可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。
然后利用电子设计自动化(以下简称为EDA)工具逐层进行仿真验证,再把其中需要变为具体物理电路的模块组合经由自动综合工具转换到门级电路网表。
接下去再用专用集成电路(ASIC)或现场可编程门阵列(FPGA)自动布局布线工具把网表转换为具体电路布线结构的实现。
硬件描述语言的发展至今已有近三十年的历史,并成功地应用于设计的各个阶段:建模、仿真、验证和综合等。
最近十多年来,用综合工具把可综合风格的HDL模块自动转换为具体电路发展非常迅速,大大地提高了复杂数字系统的设计生产率。
在美国和日本等先进电子工业国,Verilog语言已成为设计数字系统的基础。
Verilog HDL是硬件描述语言的一种,用于数字电子系统设计。
它允许设计者用它来进行各种级别的逻辑设计,可以用它进行数字逻辑系统的仿真验证、时序分析、逻辑综合。
它是目前应用最广泛的一种硬件描述语言。
据有关文献报道,目前在美国使用Verilog HDL进行设计的工程师大约有10多万人,全美国有200多所大学教授用Verilog 硬件描述语言的设计方法。
在我国台湾地区几乎所有著名大学的电子和计算机工程系都讲授Verilog有关的课程。
Verilog HDL是在1983年,由GDA(GateWay Design AutomaTIon)公司的Phil Moorby首创的。
Phil Moorby后来成为Verilog-XL的主要设计者和Cadence公司(Cadence Design System)的第一个合伙人。
在1984-1985年,Moorby设计出了第一个名为Verilog-XL的仿真器,1986年,他对Verilog HDL的发展又作出了另一个巨大贡献:即提出了用于快速门级仿真的XL算法。
FPGA设计流程指南前言本部门所承担的FPGA设计任务主要是两方面的作用:系统的原型实现和ASIC的原型验证。
编写本流程的目的是:●在于规范整个设计流程,实现开发的合理性、一致性、高效性。
●形成风格良好和完整的文档。
●实现在FPGA不同厂家之间以及从FPGA到ASIC的顺利移植。
●便于新员工快速掌握本部门FPGA的设计流程。
由于目前所用到的FPGA器件以Altera的为主,所以下面的例子也以Altera为例,工具组合为modelsim + LeonardoSpectrum/FPGACompilerII + Quartus,但原则和方法对于其他厂家和工具也是基本适用的。
目录1. 基于HDL的FPGA设计流程概述 (1)1.1 设计流程图 (1)1.2 关键步骤的实现 (2)1.2.1 功能仿真 (2)1.2.2 逻辑综合 (2)1.2.3 前仿真 (3)1.2.4 布局布线 (3)1.2.5 后仿真(时序仿真) (4)2. Verilog HDL设计 (4)2.1 编程风格(Coding Style)要求 (4)2.1.1 文件 (4)2.1.2 大小写 (5)2.1.3 标识符 (5)2.1.4 参数化设计 (5)2.1.5 空行和空格 (5)2.1.6 对齐和缩进 (5)2.1.7 注释 (5)2.1.8 参考C语言的资料 (5)2.1.9 可视化设计方法 (6)2.2 可综合设计 (6)2.3 设计目录 (6)3. 逻辑仿真 (6)3.1 测试程序(test bench) (7)3.2 使用预编译库 (7)4. 逻辑综合 (8)4.1 逻辑综合的一些原则 (8)4.1.1 关于LeonardoSpectrum (8)4.1.1 大规模设计的综合 (8)4.1.3 必须重视工具产生的警告信息 (8)4.2 调用模块的黑盒子(Black box)方法 (8)参考 (10)修订纪录 (10)1. 基于HDL的FPGA设计流程概述1.1 设计流程图说明:●逻辑仿真器主要指modelsim,Verilog-XL等。
●逻辑综合器主要指LeonardoSpectrum、Synplify、FPGA Express/FPGA Compiler等。
●FPGA厂家工具指的是如Altera的Max+PlusII、QuartusII,Xilinx的Foundation、Alliance、ISE4.1等。
1.2 关键步骤的实现1.2.1 功能仿真说明:“调用模块的行为仿真模型”指的是RTL代码中引用的由厂家提供的宏模块/IP,如Altera 提供的LPM库中的乘法器、存储器等部件的行为模型。
1.2.2 逻辑综合说明:“调用模块的黑盒子接口”的导入,是由于RTL代码调用了一些外部模块,而这些外部模块不能被综合或无需综合,但逻辑综合器需要其接口的定义来检查逻辑并保留这些模块的接口。
1.2.3 前仿真说明:一般来说,对FPGA设计这一步可以跳过不做,但可用于debug综合有无问题。
1.2.4 布局布线1.2.5 后仿真(时序仿真)2. Verilog HDL设计基于将来设计转向ASIC的方便,本部门的设计统一采用Verilog HDL,但针对混合设计和混合仿真的趋势,所有开发人员也应能读懂VHDL。
Verilog HDL的学习可参考[1][2]。
2.1 编程风格(Coding Style)要求2.1.1 文件(1)每个模块(module)一般应存在于单独的源文件中,通常源文件名与所包含模块名相同。
(2)每个设计文件开头应包含如下注释内容:●年份及公司名称。
●作者。
●文件名。
●所属项目。
●顶层模块。
●模块名称及其描述。
●修改纪录。
请参考标准示例程序[3]。
2.1.2 大小写(1)如无特别需要,模块名和信号名一律采用小写字母。
(2)为醒目起见,常数(`define定义)/参数(parameter定义)采用大写字母。
2.1.3 标识符(1)标识符采用传统C语言的命名方法,即在单词之间以“_”分开,如:max_delay、data_size等等。
(2)采用有意义的、能反映对象特征、作用和性质的单词命名标识符,以增强程序的可读性。
(3)为避免标识符过于冗长,对较长单词的应当采用适当的缩写形式,如用‘buff’代替‘buffer’,‘ena’代替‘enable’,‘addr’代替‘address’等。
2.1.4 参数化设计为了源代码的可读性和可移植性起见,不要在程序中直接写特定数值,尽可能采用`define语句或paramater语句定义常数或参数。
2.1.5 空行和空格(1)适当地在代码的不同部分中插入空行,避免因程序拥挤不利阅读。
(2)在表达式中插入空格,避免代码拥挤,包括:赋值符号两边要有空格;双目运算符两边要有空格;单目运算符和操作数之间可没有空格,示例如下:a <= b;c <= a + b;if (a == b) then ...a <= ~a & c;2.1.6 对齐和缩进(1)不要使用连续的空格来进行语句的对齐。
(2)采用制表符Tab对语句对齐和缩进,Tab键采用4个字符宽度,可在编辑器中设置。
(3)各种嵌套语句尤其是if...else语句,必须严格的逐层缩进对齐。
2.1.7 注释必须加入详细、清晰的注释行以增强代码的可读性和可移植性,注释内容占代码篇幅不应少于30%。
2.1.8 参考C语言的资料要形成良好的编程风格,有许多细节需要注意,可以参考资料[4],虽然它是针对C语言的讨论,但由于V erilog HDL和C语言的形式非常近似,所以里面提到的很多原则都是可以借鉴的。
2.1.9 可视化设计方法为提高设计效率和适应协同设计的方式,可采用可视化的设计方法,Mentor Grahpics 的Renoir 软件提供了非常好的设计模式。
2.2 可综合设计用HDL 实现电路,设计人员对可综合风格的RTL 描述的掌握不仅会影响到仿真和综合的一致性,也是逻辑综合后电路可靠性和质量好坏最主要的因素,对此应当予以充分的重视。
学习可综合的HDL 请参考 [5][6] [7]。
学习设计的模块划分请参考[8]。
2.3 设计目录采用合理、条理清晰的设计目录结构有助于提高设计的效率、可维护性。
建议采用类似下面的目录结构: (1)(2)3. 逻辑仿真考虑到性能和易用性,首选的逻辑仿真器是Mentor Graphics 的modelsim 。
designsrc (源代码)syn (综合) sim (仿真) par (布局布线) design ver1 ver2 src (源代码) syn (综合) sim (仿真) (布局布线) src (源代码) syn (综合) sim (仿真) par (布局布线)3.1 测试程序(test bench)测试程序对于设计功能和时序的验证有着举足轻重的影响,测试激励的完备性和真实性是关键所在,有以下原则须遵循:(1)测试激励输入和响应输出采集的时序应当兼顾功能仿真(无延时)和时序仿真(有延时)的情况。
(2)对于周期较多的测试,为提高效率,尽可能采用程序语句来判断响应与标准结果是否一致,给出成功或出错标志,而不是通过观察波形来判断。
(3)采用基于文件的测试是很好的办法,即由matlab或spw等系统工具产生测试数据,测试程序将其读入产生激励,再把响应结果写入到文件,再交给上述工具进行处理或分析。
(4)仿真器支持几乎所有的Verilog HDL语法,而不仅仅是常用的RTL的描述,应当利用这一点使测试程序尽可能简洁、清楚,篇幅长的要尽量采用task来描述。
3.2 使用预编译库在进行功能仿真和后仿真时都需要某些模块的行为仿真模型和门级仿真模型,如Altera Quartus里的220model.v(LPM模块行为仿真模型)和apex20ke_atoms.v(20KE系列门级仿真模型),为避免在不同的设计目录中多次编译这些模型,应当采用一次编译,多次使用的方法。
具体做法如下(以20KE门级库为例):1:在某个工作目录下新建一库名apex20ke,将apex20ke_atoms.v编译到其中。
2:在图形界面中的Load Design对话框中装入仿真设计时,在Verilog 标签下指定预编译库的完整路径。
(见下图)4. 逻辑综合目前可用的FPGA综合工具有Mentor Graphics 的LeonardoSpectrum,Synplicity的Synplify和Synopsys 的FPGA CompilerII/FPGA Express,LeonardoSpectrum由于性能和速度最好,成为我们首选的综合器,FPGA CompilerII/FPGA Express由于可以和Design Compiler 代码兼容也可用。
见参考[9]4.1 逻辑综合的一些原则HDL代码综合后电路质量的好坏主要取决于三个方面:RTL实现是否合理、对厂家器件特点的理解和对综合器掌握的程度。
参考[10]中有比较全面的讨论。
4.1.1 关于LeonardoSpectrumLeonardoSpectrum对综合的控制能力比较强,但使用也略为复杂,故需要在使用前尽量熟悉其功能,才能取得较好的综合结果。
当出现综合结果不能满足约束条件时,不要急于修改设计源文件,应当通过综合器提供的时序和面积分析命令找出关键所在,然后更改综合控制或修改代码。
在LeonardoSpectrum 2000.1b以前的版本输出的.v 网表都不能用于仿真。
4.1.1 大规模设计的综合●分块综合当设计规模很大时,综合也会耗费很多时间。
如果设计只更改某个模块时,可以分块综合。
如有设计top.v 包含a.v和b.v两个模块,当只修改a.v的话,可以先单独综合b.v,输出其网表b.edf,编写一个b模块的黑盒子接口b_syn.v,每次修改a.v后只综合top.v、a.v、b_syn.v,将综合后的网表和b.edf送去布线,可以节约综合b模块的时间。
●采用脚本命令当设计规模比较大时,综合控制也许会比较复杂,可以考虑采用脚本控制文件的方式进行综合控制,modelsim、LeonardoSpectrum和Quartus都支持TCL(Tool Command Language)语言,采用脚本控制可以提供比图形界面更灵活和更方便的控制手段。
4.1.3 必须重视工具产生的警告信息综合工具对设计进行处理可能会产生各种警告信息,有些是可以忽略的,但设计者应该尽量去除,不去除必须确认每条警告的含义,避免因此使设计的实现产生隐患。
这个原则对仿真和布局布线同样适用。
4.2 调用模块的黑盒子(Black box)方法使用黑盒子方法的原因主要有两点:一是HDL代码中调用了一些FPGA厂家提供的模块(如Altera的LPM模块)或第三方提供的IP,这些模块不需要综合,而且有些综合器也不能综合(如FPGA CompilerII/FPGA Express可以综合包含LPM的代码而LeonardoSpectrum不能)。