工程设计与分析系列:Verilog HDL数字系统设计及仿真 [平装]

配送至
$ $ USD

Verilog HDL 是一种使用广泛的硬件描述语言,目前在国内无论是集成电路还是嵌入式设计的相关专业都会使用到这种硬件描述语言。 市面上介绍Verilog HDL 的教材非常广泛,各有不同的偏重。本书着重从设计角度入手,每章都力求让读者掌握一种设计方法,能够利用本章知识进行完整的设计,从模块的角度逐步完成对Verilog HDL 语法的学习,从而在整体上掌握Verilog HDL 语法。 为了达到这个目的,每章中都会给出使用本章知识完成的实例,按照门级、数据流级、行为级、任务和函数、测试模块、可综合设计和完整实例的顺序向读者介绍Verilog HDL 的语法和使用方式。书中出现的所有代码均经过仿真,力求准确,配书光盘中有书中所有实例源文件和实例操作的视频讲解。
编辑推荐
(1)本书贴合工程实际,详细介绍电子系统分析。 (2)本书作者在哈尔滨理工大学任教,有长期的项目应用和教学经验。 (3)Verilog在业界广泛应用,可与本丛书中的Modelsim一书配套使用。 (4)实例将全部配有操作视频讲解,此为一大优点。
作者简介
于斌,本硕就读于哈尔滨工业大学电子信息科学与技术专业和微电子与固体电子学专业,任教于哈尔滨理工大学软件学院集成电路设计与集成系统专业多年,主讲数字电路、Verilog HDL语言及计算机组成原理等课程,研究方向为集成电路数字前端设计及FPGA相关方向。
目录
第1章Verilog HDL入门简介1 1.1从数字电路讲开来1 1.2设计一个七进制计数器2 1.3Verilog HDL建模4 1.4集成电路设计流程简介6 1.5编写测试代码并仿真7 1.6两种硬件描述语言9 第2章Verilog HDL门级建模10 2.1门级建模范例10 2.2门级建模基本语法12 2.2.1模块定义12 2.2.2端口声明13 2.2.3门级调用15 2.2.4模块实例化19 2.2.5内部连线声明21 2.3MOS开关22 2.4用户自定义原语UDP25 2.4.1UDP基本规则25 2.4.2组合电路UDP26 2.4.3时序电路UDP29 2.5层次化设计31 2.6应用实例32 实例2—1——4位全加器的门级建模32 实例2—2——2—4译码器的门级建模35 实例2—3——主从D触发器的门级建模36 实例2—4——1位比较器的门级建模38 2.7习题39 第3章VerilogHDL数据流级建模41 3.1数据流级建模范例41 3.2数据流级建模基本语法42 3.3操作数43 3.3.1数字43 3.3.2参数45 3.3.3线网47 3.3.4寄存器48 3.3.5时间49 3.4操作符49 3.4.1算术操作符49 3.4.2按位操作符49 3.4.3逻辑操作符50 3.4.4关系操作符51 3.4.5等式操作符52 3.4.6移位操作符52 3.4.7拼接操作符53 3.4.8缩减操作符53 3.4.9条件操作符53 3.4.10操作符优先级54 3.5应用实例56 实例3—1——四位全加器的数据流建模56 实例3—2——主从D触发器的数据流建模58 实例3—3——4位比较器的数据流建模59 3.6习题60 第4章Verilog HDL行为级建模61 4.1行为级建模范例61 4.2initial结构和always结构64 4.2.1initial结构64 4.2.2always结构66 4.3顺序块和并行块69 4.3.1顺序块69 4.3.2并行块70 4.3.3块的嵌套72 4.3.4块的命名与禁用72 4.4if语句73 4.5case语句76 4.6循环语句78 4.6.1while循环78 4.6.2for循环79 4.6.3repeat循环80 4.6.4forever循环80 4.7过程性赋值语句81 4.7.1阻塞性赋值语句81 4.7.2非阻塞性赋值语句81 4.8应用实例83 实例4—1——4位全加器的行为级建模83 实例4—2——简易ALU电路的行为级建模84 实例4—3——下降沿触发D触发器的行为级建模86 4.9习题87 第5章任务、函数与编译指令88 5.1任务88 5.1.1任务的声明和调用89 5.1.2自动任务91 5.2函数93 5.2.1函数的声明和调用94 5.2.2自动函数96 5.2.3常量函数97 5.2.4任务与函数的比较98 5.3系统任务和系统函数98 5.3.1显示任务$display和$write98 5.3.2探测任务$strobe101 5.3.3监视任务$monitor101 5.3.4仿真控制任务$stop和$finish103 5.3.5仿真时间函数$time103 5.3.6随机函数$random104 5.3.7文件控制任务105 5.3.8时间检验任务109 5.3.9值变转储任务109 5.4编译指令112 5.4.1`define112 5.4.2`include113 5.4.3`timescale115 5.4.4`ifdef、`else和`endif117 5.5完整的module参考模型118 5.6应用实例119 实例5—1——信号同步任务119 实例5—2——阶乘任务120 实例5—3——可控移位函数121 实例5—4——偶校验任务123 实例5—5——算术逻辑函数124 5.7习题125 第6章Verilog HDL测试模块127 6.1测试模块范例127 6.2时钟信号129 6.3复位信号131 6.4测试向量133 6.5响应监控135 6.6仿真中对信号的控制138 6.7代码覆盖140 6.8应用实例141 实例6—1——组合逻辑的测试模块141 实例6—2——时序逻辑的测试模块143 实例6—3——除法器的测试模块146 6.9习题149 第7章可综合模型设计150 7.1逻辑综合过程150 7.2延迟153 7.3再谈阻塞赋值与非阻塞赋值162 7.4可综合语法169 7.5代码风格170 7.5.1多重驱动问题170 7.5.2敏感列表不完整171 7.5.3if与else不成对出现171 7.5.4case语句缺少default172 7.5.5组合和时序混合设计172 7.5.6逻辑简化173 7.5.7流水线思想174 7.6应用实例177 实例7—1——SR锁存器延迟模型177 实例7—2——超前进位加法器179 实例7—3——移位除法器模型182 7.7习题187 第8章有限状态机的设计188 8.1有限状态机简介188 8.2两种红绿灯电路的状态机模型189 8.2.1moore型红绿灯189 8.2.2mealy型红绿灯194 8.3深入理解状态机196 8.3.1一段式状态机197 8.3.2两段式状态机201 8.3.3三段式状态机203 8.3.4状态编码的选择211 8.4应用实例212 实例8—1——独热码状态机212 实例8—2——格雷码状态机216 8.5习题220 第9章常见功能电路的HDL模型221 9.1锁存器与触发器221 9.2编码器与译码器229 9.3寄存器232 9.4计数器237 9.5分频器241 9.6乘法器247 9.7存储单元255 9.8习题259 第10章完整的设计实例260 10.1异步FIFO260 10.1.1异步FIFO的介绍与整体结构260 10.1.2亚稳态的处理262 10.1.3空满状态的判断263 10.1.4子模块设计266 10.1.5整体仿真结果274 10.2三角函数计算器277 10.2.1设计要求的提出277 10.2.2数据格式277 10.2.3算法的选择与原理结构278 10.2.4确定总体模块281 10.2.5内部结构的划分281 10.2.6分频器模块283 10.2.7控制模块283 10.2.8迭代设计模块288 10.2.9功能仿真与时序仿真302 10.3简易CPU模型305 10.3.1教学模型的要求305 10.3.2指令格式的确定306 10.3.3整体结构划分307 10.3.4控制模块设计308 10.3.5其余子模块设计313 10.3.6功能仿真与时序仿真317 第11章实验321 实验一简单组合逻辑电路设计321 实验二行为级模型设计328 实验三任务与函数的设计335 实验四流水线的使用339 实验五信号发生器设计344 实验六有限状态机的设计350 第12章课程设计356 选题一——出租车计费器356 选题二——智力抢答器362 选题三——点阵显示369 选题四——自动售货机373 选题五——篮球24秒计时379 选题六——乒乓球游戏电路384 选题七——CRC检测398 选题八——堆栈设计404 选题九——数字闹钟410 附录A课程测试样卷419 附录B习题及样卷答案424
序言
目录 第1章Verilog HDL入门简介 1 1.1从数字电路讲开来 1 1.2设计一个七进制计数器 2 1.3Verilog HDL建模 4 1.4集成电路设计流程简介 6 1.5编写测试代码并仿真 7 1.6两种硬件描述语言 9 第2章Verilog HDL门级建模 10 2.1门级建模范例 10 2.2门级建模基本语法 12 2.2.1模块定义 12 2.2.2端口声明 13 2.2.3门级调用 15 2.2.4模块实例化 19 2.2.5内部连线声明 21 2.3MOS开关 22 2.4用户自定义原语UDP 25 2.4.1UDP基本规则 25 2.4.2组合电路UDP 26 2.4.3时序电路UDP 29 2.5层次化设计 31 2.6应用实例 32 实例2-1——4位全加器的门级建模 32 实例2-2——2-4译码器的门级建模 35 实例2-3——主从D触发器的门级建模 36 实例2-4——1位比较器的门级建模 38 2.7习题 39 第3章Verilog HDL数据流级建模 41 3.1数据流级建模范例 41 3.2数据流级建模基本语法 42 3.3操作数 43 3.3.1数字 43 3.3.2参数 45 3.3.3线网 47 3.3.4寄存器 48 3.3.5时间 49 3.4操作符 49 3.4.1算术操作符 49 3.4.2按位操作符 49 3.4.3逻辑操作符 50 3.4.4关系操作符 51 3.4.5等式操作符 52 3.4.6移位操作符 52 3.4.7拼接操作符 53 3.4.8缩减操作符 53 3.4.9条件操作符 53 3.4.10操作符优先级 54 3.5应用实例 56 实例3-1——四位全加器的数据流建模 56 实例3-2——主从D触发器的数据流建模 58 实例3-3——4位比较器的数据流建模 59 3.6习题 60 第4章Verilog HDL行为级建模 61 4.1行为级建模范例 61 4.2initial结构和always结构 64 4.2.1initial结构 64 4.2.2always结构 66 4.3顺序块和并行块 69 4.3.1顺序块 69 4.3.2并行块 70 4.3.3块的嵌套 72 4.3.4块的命名与禁用 72 4.4if语句 73 4.5case语句 76 4.6循环语句 78 4.6.1while循环 78 4.6.2for循环 79 4.6.3repeat循环 80 4.6.4forever循环 80 4.7过程性赋值语句 81 4.7.1阻塞性赋值语句 81 4.7.2非阻塞性赋值语句 81 4.8应用实例 83 实例4-1——4位全加器的行为级建模 83 实例4-2——简易ALU电路的行为级建模 84 实例4-3——下降沿触发D触发器的行为级建模 86 4.9习题 87 第5章任务、函数与编译指令 88 5.1任务 88 5.1.1任务的声明和调用 89 5.1.2自动任务 91 5.2函数 93 5.2.1函数的声明和调用 94 5.2.2自动函数 96 5.2.3常量函数 97 5.2.4任务与函数的比较 98 5.3系统任务和系统函数 98 5.3.1显示任务$display和$write 98 5.3.2探测任务$strobe 101 5.3.3监视任务$monitor 101 5.3.4仿真控制任务$stop和$finish 103 5.3.5仿真时间函数$time 103 5.3.6随机函数$random 104 5.3.7文件控制任务 105 5.3.8时间检验任务 109 5.3.9值变转储任务 109 5.4编译指令 112 5.4.1`define 112 5.4.2`include 113 5.4.3`timescale 115 5.4.4`ifdef、`else和`endif 117 5.5完整的module参考模型 118 5.6应用实例 119 实例5-1——信号同步任务 119 实例5-2——阶乘任务 120 实例5-3——可控移位函数 121 实例5-4——偶校验任务 123 实例5-5——算术逻辑函数 124 5.7习题 125 第6章Verilog HDL测试模块 127 6.1测试模块范例 127 6.2时钟信号 129 6.3复位信号 131 6.4测试向量 133 6.5响应监控 135 6.6仿真中对信号的控制 138 6.7代码覆盖 140 6.8应用实例 141 实例6-1——组合逻辑的测试模块 141 实例6-2——时序逻辑的测试模块 143 实例6-3——除法器的测试模块 146 6.9习题 149 第7章可综合模型设计 150 7.1逻辑综合过程 150 7.2延迟 153 7.3再谈阻塞赋值与非阻塞赋值 162 7.4可综合语法 169 7.5代码风格 170 7.5.1多重驱动问题 170 7.5.2敏感列表不完整 171 7.5.3if与else不成对出现 171 7.5.4case语句缺少default 172 7.5.5组合和时序混合设计 172 7.5.6逻辑简化 173 7.5.7流水线思想 174 7.6应用实例 177 实例7-1——SR锁存器延迟模型 177 实例7-2——超前进位加法器 179 实例7-3——移位除法器模型 182 7.7习题 187 第8章有限状态机的设计 188 8.1有限状态机简介 188 8.2两种红绿灯电路的状态机模型 189 8.2.1moore型红绿灯 189 8.2.2mealy型红绿灯 194 8.3深入理解状态机 196 8.3.1一段式状态机 197 8.3.2两段式状态机 201 8.3.3三段式状态机 203 8.3.4状态编码的选择 211 8.4应用实例 212 实例8-1——独热码状态机 212 实例8-2——格雷码状态机 216 8.5习题 220 第9章常见功能电路的HDL模型 221 9.1锁存器与触发器 221 9.2编码器与译码器 229 9.3寄存器 232 9.4计数器 237 9.5分频器 241 9.6乘法器 247 9.7存储单元 255 9.8习题 259 第10章完整的设计实例 260 10.1异步FIFO 260 10.1.1异步FIFO的介绍与整体结构 260 10.1.2亚稳态的处理 262 10.1.3空满状态的判断 263 10.1.4子模块设计 266 10.1.5整体仿真结果 274 10.2三角函数计算器 277 10.2.1设计要求的提出 277 10.2.2数据格式 277 10.2.3算法的选择与原理结构 278 10.2.4确定总体模块 281 10.2.5内部结构的划分 281 10.2.6分频器模块 283 10.2.7控制模块 283 10.2.8迭代设计模块 288 10.2.9功能仿真与时序仿真 302 10.3简易CPU模型 305 10.3.1教学模型的要求 305 10.3.2指令格式的确定 306 10.3.3整体结构划分 307 10.3.4控制模块设计 308 10.3.5其余子模块设计 313 10.3.6功能仿真与时序仿真 317 第11章实验 321 实验一简单组合逻辑电路设计 321 实验二行为级模型设计 328 实验三任务与函数的设计 335 实验四流水线的使用 339 实验五信号发生器设计 344 实验六有限状态机的设计 350 第12章课程设计 356 选题一——出租车计费器 356 选题二——智力抢答器 362 选题三——点阵显示 369 选题四——自动售货机 373 选题五——篮球24秒计时 379 选题六——乒乓球游戏电路 384 选题七——CRC检测 398 选题八——堆栈设计 404 选题九——数字闹钟 410 附录A课程测试样卷 419 附录B习题及样卷答案 424
文摘
版权页: 仿真过程中对于非阻塞赋值的处理方式是:先把赋值式右侧的计算值存在一个临时变量中,这个变量是由仿真器来维护的,设计者并不知道,即对于设计者是透明的。在仿真某个时间点结束的时候统一把这些临时变量的值赋给左侧。 这里还需要介绍一下时间步的概念。所谓时间步,可以理解成所有待执行的语句在时间轴上的执行步骤。以例4.9中的四句代码为例,这四句代码没有时间延迟,都会在仿真的零时刻开始执行,执行的过程中由于是顺序块,语句也是按从前到后的顺序执行的,就可以得到图4—10所示的仿真时间步图形。作为对照,将例4.8中的四句代码也画成仿真时间步的形式,得到图4—11所示的图形。这两个图形中把仿真器视作的事件用箭头来表示。 ①仿真零时刻,按照顺序块的语法要求,看到a<=0这句代码。仿真器会把右侧的值赋值到某个临时寄存器中,而不会直接赋值。由于赋值语句的右侧仅有一个数值,不涉及计算,没有运算的过程,仅消耗把1赋值到中间寄存器的时间,然后第一个事件结束了。注意此时a并未得到赋值。 ②依然在仿真的零时刻,仿真器看到了b<=1这句代码。和①类似,仿真器会把l值赋给某个临时寄存器,赋值结束后,第二个事件结束,b也未得到赋值。 ③依然在仿真的零时刻,仿真器看到了c<=(a,b)这句代码,类似地,会把(a,b)赋值给某个临时寄存器,但注意,此时a、b在前面都没有得到赋值,即没有得到新的值,所以C得到的是a、b的旧值,这就是在非阻塞赋值中,前面语句的赋值不能立刻被后面的语句使用的原因。第三个事件结束时C也没有得到新的值。 ④本步骤也在零时刻,仿真器看到d<=(b,a),和③做类似的操作,赋值给某个临时寄存器,这些寄存器由仿真器维持,不在设计者的思考范围之内。 ⑤仿真器发现在仿真零时刻所有需要做的事情都处理了(即已经看到了所有要在仿真零时刻执行的语句),此时仿真器要结束此仿真时间点,于是把前面所有临时寄存器中的值赋到赋值式的左侧,此时a、b、C、d得到了赋值。 ⑥仿真零时刻结束,仿真器沿时间轴继续运行,进入下一个仿真时间点。
ISBN
出版社电子工业出版社
作者于斌
尺寸16