一、用Logisim绘制一个3-8译码器电路图并列出3-8译码器的逻辑真值表
3-8译码器电路图如下所示:
3-8译码器真值表如图所示:
二、用Verilog编程(if-else或者case语句)设计一个3-8译码器,并生成一个RTL原理电路图
Verilog编程源代码如图所示:
生成RTL原理图如图所示:
三、用Verilog编写一个仿真测试文件,对3-8译码器进行仿真测试并输出测试波形图
仿真测试原代码如图所示:
用ModelSm输出波形图如图所示:
四、问题分析
1、Verilog 综合生成的3-8译码器电路原理图与原始设计电路存在什么差异? 仿真测试生成的结果是否与真值表一致?
原始设计的3-8译码器电路图是基本的门电路未进行封装;而Verilog综合生成的3-8译码器电路是在基本门电路的基础上进行了封装;两者仿真测试生成的结果鱼真值表一致。
2、Verilog代码设计的3-8译码器模块的输出信号为何要定义为reg类型而不用默认wire(导线)类型?改成wire型是否可以?(即是否可以把 output reg [7:0] out 改为 output [7:0] out) 修改后会出现什么错误?为什么会出错?
wire类型用以表示以assign关键字指定的组合逻辑,其模块的输入和输出端口类型都默认为wire类型,wire类型相当于物理连线,默认初始值是高组态;reg类型表示的寄存器类型,always模块内被赋值的信号,必须定义为reg型,代表触发器,常用于时序逻辑电路,reg类型相当于存储单元,默认初始值是未知状态;3-8译码器中使用always语句,应该使用reg类型的输出模块,若替换成wir类型,那么综合器会报错。
五、Verilog编程与Logisim绘制电路的对比
1、用Verilog的门级描述方式写一个“1位全加器”, 生成RTL电路,与Logisim的“1位全加器”进行对比
Logisim的”1位全加器“电路如图所示:
Verilog门级描述方式的”1位全加器“电路代码和电路图如图所示:
2、用Verilog模块调用子模块的方式,用4个上面的“1位全加器”级联方式,构成一个“4位全加器”(即串行全加器),生成RTL电路,与Logisim的“4位全加器”电路进行对比
Logisim的“4位全加器”电路如图所示:
Verilog模块调用子模块方式的”4位全加器“电路代码和电路图如图所示:
3、用Verilog的行为级描述方式写一个“1位全加器”, 生成RTL电路,与Logisim的“1位全加器”进行对比
Verilog行为级描述方式的”1位全加器“电路代码和电路图如图所示:
4、用Verilog模块调用子模块的方式,用4个上面行为级描述的“1位全加器”级联方式,构成一个“4位全加器”(即串行全加器),生成RTL电路,与Logisim的“4位全加器”电路进行对比
Verilog模块调用子模块方式行为级的”4位全加器“电路代码和电路图如图所示:
六、用Verilog编程设计一个8位全加器
Verilog行为级描述的”8位全加器“电路代码和电路图如图所示: