自学内容网 自学内容网

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL11

4位数值比较器电路

描述

某4位数值比较器的功能表如下。

请用Verilog语言采用门级描述方式,实现此4位数值比较器

input

output

A[3]B[3]

A[2]B[2]

A[1]B[1]

A[0]B[0]

Y2(A>B)

Y1(A=B)

Y0(A<B)

A[3]>B[3]

x

x

x

1

0

0

A[3]<B[3]

x

x

x

0

0

1

A[3]=B[3]

A[2]>B[2]

x

x

1

0

0

A[3]=B[3]

A[2]<B[2]

x

x

0

0

1

A[3]=B[3]

A[2]=B[2]

A[1]>B[1]

x

1

0

0

A[3]=B[3]

A[2]=B[2]

A[1]<B[1]

x

0

0

1

A[3]=B[3]

A[2]=B[2]

A[1]=B[1]

A[0]>B[0]

1

0

0

A[3]=B[3]

A[2]=B[2]

A[1]=B[1]

A[0]<B[0]

0

0

1

A[3]=B[3]

A[2]=B[2]

A[1]=B[1]

A[0]=B[0]

0

1

0

输入描述:

    input       [3:0]       A       ,
    input       [3:0]       B       

输出描述:

    output   wire        Y2    , //A>B
    output   wire        Y1    , //A=B
    output   wire        Y0      //A<B

解题思路:

方法一:使用always控制语句加上逻辑判断(if条件分支语句)

使用文本语言描述上述功能表:

如果输入A[3]>B[3]

              A[3]=B[3]且A[2]>B[2] 

             A[3]=B[3]且A[2]=B[2]且A[1]>B[1]

              A[3]=B[3]且A[2]=B[2]且A[1]=B[1]且A[0]>B[0]则输出Y2Y1Y0 = 100

如果输入A[3]<B[3]

               A[3]=B[3]且A[2]<B[2]或        

               A[3]=B[3]且A[2]=B[2]且A[1]<B[1]

              A[3]=B[3]且A[2]=B[2]且A[1]=B[1]且A[0]<B[0],则输出Y2Y1Y0 =001

如果输入A[3]=B[3]且A[2]=B[2]且A[1]=B[1]且A[0]=B[0],则输出Y2Y1Y0 =010

`timescale 1ns/1ns

module comparator_4(
input   [3:0]       A   ,
input   [3:0]   B   ,
 
 output wireY2    , //A>B
output   wire       Y1    , //A=B
    output   wire       Y0      //A<B
);
reg Y0_r, Y1_r, Y2_r;

always @(A or B) begin

Y0_r = 1'b0; //该处代码必添加
Y1_r = 1'b0;   
Y2_r = 1'b0;

if ((A[3]>B[3]) || (A[3]==B[3] && A[2]>B[2]) || 
(A[3:2]==B[3:2] && A[1]>B[1]) || (A[3:1]==B[3:1] && A[0]>B[0]))
//if(A > B)
   
    Y2_r = 1'b1;

else if ((A[3]<B[3]) || (A[3]==B[3] && A[2]<B[2]) || 
(A[3:2]==B[3:2] && A[1]<B[1]) || (A[3:1]==B[3:1] && A[0]<B[0]))

//else if (A < B)
   Y0_r = 1'b1;

else 

   Y1_r = 1'b1;

end

assign Y2 = Y2_r;
assign Y1 = Y1_r;
assign Y0 = Y0_r;


endmodule
方法二:使用门级建模的方式

门级语言的设计需要用到卡诺图,与用编程语言相比更为复杂。但在某些实际问题中(条件的判断关系不明确),不方便用常用的流程控制语句书写代码,这个时候门级设计的优势便得以体现。

①根据上述功能表,分别写出Y2,Y1,Y0的逻辑函数式;

Y_2 = A[3]\overset{-}{B[3]} + \\ (\overset{-}A[3]\overset{-}B[3] + A[3]B[3])A[2]\overset{-}{B[2]}+ \\ (\overset{-}A[3]\overset{-}B[3] + A[3]B[3]) (\overset{-}A[2]\overset{-}B[2] + A[2]B[2]) A[1]\overset{-}{B[1]} + \\ (\overset{-}A[3]\overset{-}B[3] + A[3]B[3]) (\overset{-}A[2]\overset{-}B[2] + A[2]B[2]) (\overset{-}A[1]\overset{-}B[1] + A[1]B[1]) A[0]\overset{-}{B[0]}

Y_1 =( \overset{-}{A[3]]}\overset{-}{B[3]} + A[3]B[3])( \overset{-}{A[2]]}\overset{-}{B[2]} + A[2]B[2])( \overset{-}{A[1]]}\overset{-}{B[1]} + A[1]B[1])( \overset{-}{A[0]]}\overset{-}{B[0]} + A[0]B[0])

Y_0 = \overset{-}{A[3]}B[3] + \\ (\overset{-}A[3]\overset{-}B[3] + A[3]B[3])\overset{-}{A[2]}B[2] + \\ (\overset{-}A[3]\overset{-}B[3] + A[3]B[3]) (\overset{-}A[2]\overset{-}B[2] + A[2]B[2])\overset{-}{A[1]}B[1] + \\ (\overset{-}A[3]\overset{-}B[3] + A[3]B[3]) (\overset{-}A[2]\overset{-}B[2] + A[2]B[2]) (\overset{-}A[1]\overset{-}B[1] + A[1]B[1])\overset{-}{A[0]}B[0]

例:当A[3]>B[3]时,如果逻辑函数表示为A[3]·(~B[3]),即只有A[3] = 1, B[3] = 0一种情况;

当A[2] = B[2]时,使用逻辑函数表示为(~A[2])·(~B[2])+A2B2,即表示两种情况:A[2],B[2]同时为0A[2],B[2]同时为1; 可使用同或门  ——xnor

代码如下:

`timescale 1ns/1ns

module comparator_4(
input   [3:0]       A   ,
input   [3:0]   B   ,
 
 output wireY2    , //A>B
output   wire       Y1    , //A=B
    output   wire       Y0      //A<B
);

//代码二 使用门级建模
wire w1, w2, w3, w4, w5,w6,w7,w8,w9,w10;
wire x1, x2, x3, x4, x5,x6,x7,x8;
anda1 (w1, A[3], ~B[3]); //判定A[3]>B[3], Y2的第1项
anda2 (w2, A[2], ~B[2]); 
anda3 (w3, A[1], ~B[1]); 
anda4 (w4, A[0], ~B[0]); 

xnor xn1 (w5, A[3], B[3]); //A[3]=B[3]
and a5 (w6, w5, w2); //Y2的第2项
xnor xn2 (w7, A[2], B[2]);
and a6 (w8, w5,w7,w3); //Y2的第3项
xnor xn3 (w9, A[1], B[1]);
and a7 (w10, w5, w7, w9, w4); //Y2的第4项

or o1 (Y2, w1,w6,w8,w10); //Y2
//
andaa1 (x1, ~A[3], B[3]); 
andaa2 (x2, ~A[2], B[2]); 
andaa3 (x3, ~A[1], B[1]); 
andaa4 (x4, ~A[0], B[0]); 

and aa5 (x5, w5, x2); //Y0的第2项
and aa6 (x6, w5, w7, x3); //Y0的第3项
and aa7 (x7, w5, w7, w9, x4); //Y0的第4项

or o2 (Y0, x1, x5, x6, x7); //Y0
//
xnor xn4 (x8, A[0], B[0]);

and aa8 (Y1, w5, w7, w9, x8);



endmodule


原文地址:https://blog.csdn.net/qq_44629558/article/details/142150886

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!