目录
一、3-8译码器的实验与仿真
1.3-8译码器的logsim电路仿真实现
2.3-8译码器的逻辑真值表
3.3-8译码器的Verilog实现
(1)代码实现
(2)RTL的电路生成
(3)QUartus的波形图实现
(4)ModelSim的波形图实现
4.问题分析
二、全加器电路的实验与仿真
1.1-bit全加器电路的仿真实现
(1)logsim电路仿真实现
(2)Verilog的仿真实现
2.4-bit全加器电路的仿真实现
(1)logsim电路仿真实现
(2)Verilog的仿真实现
3.Verilog的行为级形式实现1-bit和4-bit全加器电路
(1)1-bit全加器电路实现
(2)4-bit全加器电路实现
4.8-bit全加器电路的Verilog仿真实现
(1)代码实现
(2)RTL电路实现
一、3-8译码器的实验与仿真
1.3-8译码器的logsim电路仿真实现
2.3-8译码器的逻辑真值表
3.3-8译码器的Verilog实现
(1)代码实现
module decoder3_8
(
input wire in1,
input wire in2,
input wire in3,
output reg [7:0] out
);
always@(*)
if({in1,in2,in3}==3'b000)
out = 8'b0000_0001;
else if({in1,in2,in3}==3'b001)
out =8'b0000_0010;
else if({in1,in2,in3}==3'b010)
out =8'b0000_0100;
else if({in1,in2,in3}==3'b011)
out =8'b0000_1000;
else if({in1,in2,in3}==3'b100)
out =8'b0001_0000;
else if({in1,in2,in3}==3'b101)
out =8'b0010_0000;
else if({in1,in2,in3}==3'b110)
out =8'b0100_0000;
else if({in1,in2,in3}==3'b111)
out =8'b1000_0000;
else
out =8'b0000_0001;
endmodule
测试代码:
`timescale 1ns/1ns
module tb_decoder3_8();
reg in1;
reg in2;
reg in3;
wire [7:0] out;
initial begin
in1<=1'b0;
in2<=1'b0;
in3<=1'b0;
end
always #10 in1 <= {$random} % 2;
always #10 in2<=($random) % 2;
always #10 in3<=($random) % 2;
initial begin
$timeformat(-9,0,"ns",6);
$monitor("@time %t:in1=%b in2=%b in3=%b out=%b",$time,in1,in2,in3,out);
end
decoder3_8 tb_decoder3_8
(
.in1(in1),
.in2(in2),
.in3(in3),
.out(out)
);
endmodule
(2)RTL的电路生成
(3)QUartus的波形图实现
(4)ModelSim的波形图实现
4.问题分析
(1)Verilog 综合生成的3-8译码器电路原理图与原始设计电路存在什么差异? 仿真测试生成的结果是否与真值表一致?
所用到的电路元器件不同,并且Verilog生成的电路原理图对输出端口进行了封装,使线路更加简洁。
(2) Verilog代码设计的3-8译码器模块的输出信号 为何要定义为 reg类型而不用默认wire(导线)类型?改成wire型是否可以? (即是否可以把 output reg [7:0] out 改为 output [7:0] out) 修改后会出现什么错误?为什么会出错?
reg表示寄存器类型,用于always模块中被赋值的信号。wire类型表示导线类型,用于always模块中未被赋值的信号。而3-8译码器的输出信号是在always模块中被赋值的信号。撒野必须定义为reg类型。
不可以改成wire类型,如果把 output reg [7:0] out 改为 output [7:0] out),会出现报错。
二、全加器电路的实验与仿真
1.1-bit全加器电路的仿真实现
(1)logsim电路仿真实现
(2)Verilog的仿真实现
代码实现:
module Adder_structural(A,B,Cin,Sum,Cout);
input A,B,Cin;
output Sum,Cout;
wire t1,t2,t3,t4;
and U1(t1,A,B);
and U2(t2,A,Cin);
and U3(t3,B,Cin);
or U4(Cout,t1,t2,t3);
xor U5(t4,A,B);
xor U6(Sum,t4,Cin);
endmodule
RTL电路实现
2.4-bit全加器电路的仿真实现
(1)logsim电路仿真实现
(2)Verilog的仿真实现
代码实现:
module four (
num1,
num2,
cin,
cout,
sum
);
input [3:0] num1;
input [3:0] num2;
input cin;
output cout;
output [3:0] sum;
reg cout;
reg [3:0] sum;
reg add;
reg [1:0] cnt;
always @(num1 or num2 or cin)
begin
sum[0] = (num1[0] ^ num2[0]) ^ cin;
cout = (num1[0] & num2[0]) | (num2[0] & cin) | (num1[0] & cin);
add = cout;
sum[1] = (num1[1] ^ num2[1]) ^ add;
cout = (num1[1] & num2[1]) | (num2[1] & add) | (num1[1] & add);
add = cout;
sum[2] = (num1[2] ^ num2[2]) ^ add;
cout = (num1[2] & num2[2]) | (num2[2] & add) | (num1[2] & add);
add = cout;
sum[3] = (num1[3] ^ num2[3]) ^ add;
cout = (num1[3] & num2[3]) | (num2[3] & add) | (num1[3] & add);
add = cout;
end
endmodule
RTL电路实现
3.Verilog的行为级形式实现1-bit和4-bit全加器电路
(1)1-bit全加器电路实现
代码实现:
module Adder_dataflow(
input A,B,Cin,
output Sum,Cout
);
assign{Cout,Sum}=A+B+Cin;
endmodule
RTL电路实现:
(2)4-bit全加器电路实现
代码实现:
首先进行
1-bit全加器实现:
module add_1(a,b,ci,co,s);
input a,b,ci;
output co,s;
assign{co,s}=a+b+ci;
endmodule
4-bit就是将4个1-bit全加器关联起来运用:
module fuadder4(a,b,ci,co,s);
input [3:0] a,b;
input ci;
output co;
output [3:0] s;
wire [2:0] count;
add_1 U1(a[0],b[0],ci,count[0],s[0]);
add_1 U2(a[1],b[1],count[0],count[1],s[1]);
add_1 U3(a[2],b[2],count[1],count[2],s[2]);
add_1 U4(a[3],b[3],count[2],co,s[3]);
endmodule
RTL电路实现:
4.8-bit全加器电路的Verilog仿真实现
(1)代码实现
1-bit全加器:
module fulladder(Sum,Co,A,B,Ci);
input A,B,Ci;
output Sum,Co;
wire S1,S2,S3;
xor (Sum,A,B,Ci);//构建sum
and (S1,A,B);
xor (S2,A,B);
and (S3,Ci,S2);
or (Co,S1,S3);//构建co
endmodule
8-bit全加器Verilog实现:将8个1-bit全加器关联起来文章来源:https://www.toymoban.com/news/detail-761611.html
module bitfulladder(Sum,Co,A,B,Ci);
input [7:0] A,B;
input Ci;
output [7:0]Sum,Co;
fulladder UO(Sum[0],Co[0],A[0],B[0],Ci);
fulladder U1(Sum[1],Co[1],A[1],B[1],Co[0]);
fulladder U2(Sum[2],Co[2],A[2],B[2],Co[1]);
fulladder U3(Sum[3],Co[3],A[3],B[3],Co[2]);
fulladder U4(Sum[4],Co[4],A[4],B[4],Co[3]);
fulladder U5(Sum[5],Co[5],A[5],B[5],Co[4]);
fulladder U6(Sum[6],Co[6],A[6],B[6],Co[5]);
fulladder U7(Sum[7],Co[7],A[7],B[7],Co[6]);
endmodule
(2)RTL电路实现
文章来源地址https://www.toymoban.com/news/detail-761611.html
到了这里,关于Verilog编程基础练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!