概述
VerilogHDL程序设计与仿真作业6:
——实现74HC85的功能以及16位数值比较器
文章目录
- VerilogHDL程序设计与仿真作业6:
- ——实现74HC85的功能以及16位数值比较器
- 一、实验目的
- 二、实现74HC85的功能
- 1、设计思路
- 2、实现代码
- 3、测试代码
- 4、仿真
- 三、用74HC85组成16位数值比较器
- 1、设计思路
- 2、实现代码
- 3、测试代码
- 4、仿真
一、实验目的
- 实现74HC85的功能
- 用74HC85组成16位数值比较器
二、实现74HC85的功能
1、设计思路
-
74HC85的功能表
-
74HC85的逻辑符号
2、实现代码
//文件名称:_74HC85.v
//fuchaoxinHUST12052020
module _74HC85(I_geq,I_leq,I_eq,A,B,F_geq,F_leq,F_eq);
input [3:0] A,B;
input I_geq,I_leq,I_eq;
output reg F_geq, F_leq, F_eq;
/*说明:
输入端:I是用于级联的输入信号,[3:0] A,B是输入的待比较数字;
输出端:F是大小比较后输出的信号,也可当作级联下一级的输入信号。
*/
always @(*) begin
// 默认比较时A在前B在后
if (A[3]>B[3]) begin
F_geq=1; F_leq=0; F_eq=0;
end
else if (A[3]<B[3]) begin
F_geq=0; F_leq=1; F_eq=0;
end
else begin
if (A[2]>B[2]) begin
F_geq=1; F_leq=0; F_eq=0;
end
else if (A[2]<B[2]) begin
F_geq=0; F_leq=1; F_eq=0;
end
else begin
if (A[1]>B[1]) begin
F_geq=1;
F_leq=0;
F_eq=0;
end
else if (A[1]<B[1]) begin
F_geq=0; F_leq=1; F_eq=0;
end
else begin
if (A[1]>B[1]) begin
F_geq=1; F_leq=0; F_eq=0;
end
else if (A[1]<B[1]) begin
F_geq=0; F_leq=1; F_eq=0;
end
else begin
if (I_geq==1&&I_leq==0&&I_eq==0) begin
F_geq=1; F_leq=0; F_eq=0;
end
else if (I_geq==0&&I_leq==1&&I_eq==0) begin
F_geq=0; F_leq=1; F_eq=0;
end
else if (I_eq==1) begin
F_geq=0; F_leq=0; F_eq=1;
end
else if (I_geq==1&&I_leq==1&&I_eq==0) begin
F_geq=0; F_leq=0; F_eq=0;
end
else if (I_geq==0&&I_leq==0&&I_eq==0) begin
F_geq=1; F_leq=1; F_eq=0;
end
end
end
end
end
// 四位不全相等时I无效,四位都相等时I有效
// 该方法比较繁琐,可以写一位比较器再进行四个级联
end
endmodule
3、测试代码
//文件名称:Test_74HC85.v
//fuchaoxinHUST12052020
`timescale 10ns/1ns
module Test_74HC85;
reg [3:0] A,B;
reg I_geq,I_leq,I_eq;
wire F_geq, F_leq, F_eq;
_74HC85 U0(I_geq,I_leq,I_eq,A,B,F_geq,F_leq,F_eq);//实例化元件
initial
$monitor($time,":t I_geq=%b, I_leq=%b, I_eq=%b, A=%b, B=%b F_geq=%b, F_leq=%b, F_eq=%b n",I_geq,I_leq,I_eq,A,B,F_geq,F_leq,F_eq);
//监视器的显示内容
initial begin
// I无效 即四位不全相等
A=4'b1000; B=4'b0100;
#5
A=4'b0100;B=4'b1000;
#5
A=4'b0110;B=4'b0111;
#5
// I有效 即四位都相等
I_geq=0; I_leq=0; I_eq=1; A=4'b0110; B=4'b0110;
#5
I_geq=1; I_leq=0; I_eq=0; A=4'b0001; B=4'b0001;
#5
I_geq=0; I_leq=0; I_eq=0; A=4'b0010; B=4'b0010;
#5
$stop;//停止模拟仿真
end
endmodule
4、仿真
- 波形
- 监控器
三、用74HC85组成16位数值比较器
1、设计思路
- 将四个四位数值比较器通过级联的方式组成16位数值比较器;
- 16位数值比较器(串联拓展方式)
2、实现代码
以串联拓展为例:
//文件名称:_74HC85.v
//文件名称:Compare_16.v
//fuchaoxinHUST12052020
module _74HC85(I_geq,I_leq,I_eq,A,B,F_geq,F_leq,F_eq);
input [3:0] A,B;
input I_geq,I_leq,I_eq;
output reg F_geq, F_leq, F_eq;
/*说明:
输入端:I是用于级联的输入信号,[3:0] A,B是输入的待比较数字;
输出端:F是大小比较后输出的信号,也可当作级联下一级的输入信号。
*/
always @(*) begin
// 默认比较时A在前B在后
if (A[3]>B[3]) begin
F_geq=1; F_leq=0; F_eq=0;
end
else if (A[3]<B[3]) begin
F_geq=0; F_leq=1; F_eq=0;
end
else begin
if (A[2]>B[2]) begin
F_geq=1; F_leq=0; F_eq=0;
end
else if (A[2]<B[2]) begin
F_geq=0; F_leq=1; F_eq=0;
end
else begin
if (A[1]>B[1]) begin
F_geq=1;
F_leq=0;
F_eq=0;
end
else if (A[1]<B[1]) begin
F_geq=0; F_leq=1; F_eq=0;
end
else begin
if (A[1]>B[1]) begin
F_geq=1; F_leq=0; F_eq=0;
end
else if (A[1]<B[1]) begin
F_geq=0; F_leq=1; F_eq=0;
end
else begin
if (I_geq==1&&I_leq==0&&I_eq==0) begin
F_geq=1; F_leq=0; F_eq=0;
end
else if (I_geq==0&&I_leq==1&&I_eq==0) begin
F_geq=0; F_leq=1; F_eq=0;
end
else if (I_eq==1) begin
F_geq=0; F_leq=0; F_eq=1;
end
else if (I_geq==1&&I_leq==1&&I_eq==0) begin
F_geq=0; F_leq=0; F_eq=0;
end
else if (I_geq==0&&I_leq==0&&I_eq==0) begin
F_geq=1; F_leq=1; F_eq=0;
end
end
end
end
end
// 四位不全相等时I无效,四位都相等时I有效
// 该方法比较繁琐,可以写一位比较器再进行四个级联
end
endmodule
//四位比较器
module Compare_16(I_geq,I_leq,I_eq,A,B,F_geqq,F_leqq,F_eqq);
input I_geq,I_leq,I_eq;
input [15:0] A,B;
output F_geqq,F_leqq,F_eqq;
/*说明:
输入端:
输出端:
*/
//中间变量定义
wire [3:0] A_0,B_0,A_1,B_1,A_2,B_2,A_3,B_3;
wire [3:0] F_geq,F_leq,F_eq;
//循环赋值
genvar i;
for(i=3;i>=0;i=i-1) assign A_0[i]=A[i], B_0[i]=B[i];
for(i=7;i>=4;i=i-1) assign A_1[i-4]=A[i], B_1[i-4]=B[i];
for(i=11;i>=8;i=i-1) assign A_2[i-8]=A[i], B_2[i-8]=B[i];
for(i=15;i>=12;i=i-1) assign A_3[i-12]=A[i], B_3[i-12]=B[i];
//先后执行四位数值比较
_74HC85 U0(I_geq,I_leq,I_eq,A_0,B_0,F_geq[0],F_leq[0],F_eq[0]);
_74HC85 U1(F_geq[0],F_leq[0],F_eq[0],A_1,B_1,F_geq[1],F_leq[1],F_eq[1]);
_74HC85 U2(F_geq[1],F_leq[1],F_eq[1],A_2,B_2,F_geq[2],F_leq[2],F_eq[2]);
_74HC85 U3(F_geq[2],F_leq[2],F_eq[2],A_3,B_3,F_geq[3],F_leq[3],F_eq[3]);
//输出
assign F_geqq=F_geq[3];
assign F_leqq=F_leq[3];
assign F_eqq =F_eq [3];
endmodule
3、测试代码
//文件名称:Test_Compare_16.v
//fuchaoxinHUST12052020
`timescale 10ns/1ns
module Test_CD4532;
reg I_geq,I_leq,I_eq;
reg [15:0] A,B;
wire F_geqq,F_leqq,F_eqq;
Compare_16 U0(I_geq,I_leq,I_eq,A,B,F_geqq,F_leqq,F_eqq);//实例化元件
initial
$monitor($time,":t I_geq=%b, I_leq=%b, I_eq=%b, A=%b, B=%b, F_geqq=%b, F_leqq=%b, F_eqq=%b n", I_geq,I_leq,I_eq,A,B,F_geqq,F_leqq,F_eqq);
//监视器的显示内容
initial begin
//使能信号为0时
I_geq=0; I_leq=0; I_eq=1; A=16'b0010_0000_0000_0000; B=16'b0010_0000_0000_0100;
#5
I_geq=0; I_leq=0; I_eq=1; A=16'b1000_0000_0000_0000; B=16'b0100_0000_0000_0000;
#5
I_geq=0; I_leq=0; I_eq=1; A=16'b0100_0000_0000_0000;B=16'b0100_0000_0000_0000;
#5
//使能信号为1时
I_geq=0; I_leq=0; I_eq=1; A=16'b0001_0000_0000_0000; B=16'b1000_0000_0000_0000;
#5
I_geq=0; I_leq=0; I_eq=1; A=16'b0000_0000_0100_0000; B=16'b0100_0000_0000_0000;
#5
I_geq=0; I_leq=0; I_eq=1; A=16'b0000_0000_0000_0001; B=16'b1000_0000_0000_0000;
#5
$stop;//停止模拟仿真
end
endmodule
4、仿真
- 波形
- 监视器
最后
以上就是激情菠萝为你收集整理的实现74HC85的功能以及16位数值比较器VerilogHDL程序设计与仿真作业6:的全部内容,希望文章能够帮你解决实现74HC85的功能以及16位数值比较器VerilogHDL程序设计与仿真作业6:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复