一、关于Quartus和ModelSim的安装
请自行搜索方法,比较简单,本文使用quartus ii 13.1和Modelsim SE-10.4进行练习。
二、关于3-8译码器的实验仿真
(一)对比分析Verilog生成的电路原理图和原始设计电路
使用Logsim绘制一个3-8译码器的电路图:
利用Verilog代码生成RTL电路图:在Modelsim中仿真分析生成波形图和transcript结果:
通过对比,可以看出两者的电路图思路是一样的,不过verilog生成的电路图把中间复杂的接线部分改成了一个模块,看起来更简洁。
同时,仿真测试的结果与真值表是一致的。
这里有一个问题,Verilog代码设计的3-8译码器模块的输出信号为何要定义为reg类型而不用默认wire(导线)类型?改成wire型是否可以?(即是否可以把outputreg[7:0]out改为output[7:0]out)修改后会出现什么错误?为什么会出错?
分析:在Verilog中,reg类型表示寄存器类型,用于always模块内被赋值的信号。而wire类型表示导线类型,用于always模块内未被赋值的信号。因为3-8译码器模块的输出信号out是在always块中被赋值的,所以必须定义为reg类型。如果将output reg [7:0] out改为output [7:0] out,会出现“Multiple drivers”错误,因为wire类型的信号可以有多个驱动器,而reg类型的信号只能有一个驱动器。因此,如果将out定义为wire类型,会出现多个驱动器的情况,从而导致错误。
三、关于全加器的实验仿真
(一)Verilog的1位全加器和4位全加器(门级描述方式)
1.一位全加器:
Verilog代码1位全加器RTL电路图:对比1位全加器logisim电路:
2.四位全加器
Verilog代码:4位全加器RTL电路图:对比4位全加器logisim电路:
(二)Verilog的1位全加器和4位全加器(行为级描述方式)
1.一位全加器
Verilog代码:1位全加器RTL电路图:对比1位全加器logisim电路:
2.四位全加器
Verilog代码:4位全加器RTL电路图:对比4位全加器logisim电路:
(三)Verilog的8位全加器模块设计
Verilog代码:生成的RTL电路图: