基于SparkRoad的《Verilog数字系统设计教程·第三版(夏宇闻)》学习(10)——第9章
学习:
- Verilog 模型有不同层级的抽象化:
只从行为和功能的角度描述某一电路块,称为行为模块
只从电路结构的角度描述某一电路块,称为结构模块
并且可以分为以下 5 种:- 系统级
- 算法级
- RTL 级(Register-Transfer-Level) 前三种都是行为级别的
- 门级(gate-level)
- 开关级(switch-level) 后两种是结构级别的
- Xnor——异或非门
Buf——缓冲器
多输出门只有单个输入,有单个或多个输出端,又可称之为 buffer,起缓冲、延时作用。
[buffer 的作用]((33条消息) 数字电路中的buffer一般作用_buffer电路_摆渡沧桑的博客-CSDN博客) - 门级结构描述中的定义手段注意逗号与分号的使用——P 131
另外定义顶部模块名与定义模块的区别
[各种门级结构实现]((33条消息) 数字电路设计之D触发器的门级实现_d触发器的门级电路_Snail_Walker的博客-CSDN博客)
思考题:
- Verilog HDL 的模型共有哪几种类型?
系统级、算法级、RTL 级、门级、开关级 - 每种类型的 Verilog HDL 各有什么特点?主要用于什么场合?
系统级,算法级和 RTL 级是属于行为级,门级是属于结构级的。
系统级:用高级语言结构实现设计模块的外部性能的模型。
算法级:用高级语言结构实现设计算法的模型。
RTL 级:描述数据在寄存器之向流动和如何处理这些数据的模型。
门级:描述逻辑门以及逻辑门之间的连接的模型。
开关级:描述器件中三极管和存储节点以及它们之间连接的模型。 - 不可综合成为电路的 Verilog 模块有什么用处?
描述比较直观。 - 为什么说 Verilog HDL 的语言结构可以支持构成任意复杂的数字逻辑系统?
通过 Verilog 语言中的模块实例引用,可以构成任何复杂结构的电路,这种以结构方式所建成的 Verilog 模型不仅是可以以仿真的,而且也是可以综合的,其本质是表示电路的具体结构,也可以说这种 Verilog 文件也是一种结构网表。 - 什么是综合?是否任何符合语法的 Verilog HDL 程序都可以综合?
综合是通过综合器把 HDL 程序转化成标准的门级结构网表。不是任何复合语法的 VerilogHDL 程序都可以综合。 - 综合后生成的是不是真实的电路?若不是,还需要哪些步骤才能真正变为具体的电路?
不是,真实的电路还需要利用ASIC和 FPGA制造厂商的布局布线工具,根据综合生成的标准的门级结构网来产生。 - 为什么综合以后还可以用 Verilog 进行仿真?
通过综合以后产生的是门级结构,而门级结构再经过Verilog仿真测试验证其正确性。 - 同一物理电路的行为模块仿真验证与结构模块的仿真验证在意义上有什么不同?
行为模块的仿真首先要转换为结构模块再进行仿真验证,结构模块是直接进行仿真的。 - 为什么说前端逻辑设计必须包括结构仿真验证,只有行为验证是远远不够的?
只有行为仿真远远不够的,因为 Verilog HDL 各种建模的方法,发挥各自在不同类型电路描述中的长处,而且要在层次管理工具的协调下把各个既独立又相互联系的模块组和,才能有效的设计出高质量的数字电路来。 - 什么是 Top-Down 设计方法?通过什么手段来验证系统分块的合理性。
通过行为建模把一个复杂的系统分解成可操作的若干个模块,每个模块之间的逻辑关系通过行为建模的仿真加以验证。 - 编写两路每路为一位信号的二选一多路器的行为模块,再编写它的结构模块。然后编写测试模块分别对这两个模块进行测试,观测仿真运行的结果,编写实验报告。
行为模块:
结构模块:module sel(in1,in2,f,out); input in1,in2,f; output out; always@(in1,in2,f) begin if(f==1) out=in1; elae out=in2; end endmodule
测试模块(行为模块):module sel(a,b,s,f); input a,b,s; output f; wire s_not,and1,and2; not U1(s_not,s); and U2(and1,b,s); U3(f,and1,and2); or U4(f,and1,and2); endmodule
`include "sel.v" module sel_tb; reg in1,in2,f; wire out; initial begin in1=1'b0; in2=1'b1; end always #50 f=~f; sel_tb(.a(in1),.b(in2),.s(s),.f(out)); //编写的感觉有问题
- 如果让你编写两路每路为8位信号的二选一多路器的结构模块是不是感觉麻烦?编写行为模块是不是很方便?
是,编写行为模块会很方便,只需要将输入输出的一位改为八位。 - &14. 此两题就不在软件上跑了