题解 | #4位数值比较器电路#

4位数值比较器电路

http://www.nowcoder.com/practice/e02fde10f1914527b6b6871b97aef86d

题意整理

本题给出的是比较器的真值表。需要根据真值表写出输出端的逻辑表达式

注意,根据真值表,可得出输入端是:A[3:0]  B[3:0],输出端是Y2  Y1  Y0,均是单bit输出。

题解主体

根据题目所给比较器真值表,求出Y2  Y1  Y0的逻辑表达式如下:

Y2=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];

Y0=~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];

Y1=(A[3]⊙B[3]) ·(A[2]⊙B[2]) · (A[1]⊙B[1]) · (A[0]⊙B[0])

根据上述逻辑表达式,可画出电路图如下:



根据电路图和逻辑表达式,将电路转换成Verilog代码描述如下:


not iv0(iv0_o, B[0]),

    iv1(iv1_o, B[1]),

    iv2(iv2_o, B[2]),

    iv3(iv3_o, B[3]),

    iv4(iv4_o, A[0]),

    iv5(iv5_o, A[1]),

    iv6(iv6_o, A[2]),

    iv7(iv7_o, A[3]);

   

and ad0(ad0_o, iv0_o, A[0]),

    ad1(ad1_o, iv1_o, A[1]),

    ad2(ad2_o, iv2_o, A[2]),

    ad3(ad3_o, iv3_o, A[3]),

   

    ad4(ad4_o, ad0_o, xnr0_o, xnr1_o, xnr2_o),

    ad5(ad5_o, ad1_o, xnr1_o, xnr2_o),

    ad6(ad6_o, ad2_o, xnr2_o),

   

    ad7(ad7_o, iv4_o, B[0]),

    ad8(ad8_o, iv5_o, B[1]),

    ad9(ad9_o, iv6_o, B[2]),

    ad10(ad10_o, iv7_o, B[3]),

   

    ad11(ad11_o, ad7_o, xnr0_o, xnr1_o, xnr2_o),

    ad12(ad12_o, ad8_o, xnr1_o, xnr2_o),

    ad13(ad13_o, ad9_o, xnr2_o),

    ad14(Y1, xnr2_o, xnr1_o, xnr0_o, xnr3_o);

   

xnor xnr0(xnr0_o, A[1], B[1]), 

     xnr1(xnr1_o, A[2], B[2]),  

     xnr2(xnr2_o, A[3], B[3]),  

     xnr3(xnr3_o, A[0], B[0]); 


or or0(Y2, ad3_o, ad6_o, ad5_o, ad4_o),

   or1(Y0, ad10_o, ad13_o, ad12_o, ad11_o) ;   


关于门级描述方式,需要注意的是


上图实例代码中,1位置表示的是门类型,2位置表示的是门实例名,3位置表示的是门实例输出,4及以后位置表示的是门输入 ,1和2中间还可添加驱动能力和延时参数。

参考答案

`timescale 1ns/1ns

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



not iv0(iv0_o, B[0]),
    iv1(iv1_o, B[1]),
    iv2(iv2_o, B[2]),
    iv3(iv3_o, B[3]),
    iv4(iv4_o, A[0]),
    iv5(iv5_o, A[1]),
    iv6(iv6_o, A[2]),
    iv7(iv7_o, A[3]);
    
and ad0(ad0_o, iv0_o, A[0]),
    ad1(ad1_o, iv1_o, A[1]),
    ad2(ad2_o, iv2_o, A[2]),
    ad3(ad3_o, iv3_o, A[3]),
    
    ad4(ad4_o, ad0_o, xnr0_o, xnr1_o, xnr2_o),
    ad5(ad5_o, ad1_o, xnr1_o, xnr2_o),
    ad6(ad6_o, ad2_o, xnr2_o),
    
    ad7(ad7_o, iv4_o, B[0]),
    ad8(ad8_o, iv5_o, B[1]),
    ad9(ad9_o, iv6_o, B[2]),
    ad10(ad10_o, iv7_o, B[3]),
    
    ad11(ad11_o, ad7_o, xnr0_o, xnr1_o, xnr2_o),
    ad12(ad12_o, ad8_o, xnr1_o, xnr2_o),
    ad13(ad13_o, ad9_o, xnr2_o),
    ad14(Y1, xnr2_o, xnr1_o, xnr0_o, xnr3_o);
    
xnor xnr0(xnr0_o, A[1], B[1]),  
     xnr1(xnr1_o, A[2], B[2]),   
     xnr2(xnr2_o, A[3], B[3]),   
     xnr3(xnr3_o, A[0], B[0]);  

or or0(Y2, ad3_o, ad6_o, ad5_o, ad4_o),
   or1(Y0, ad10_o, ad13_o, ad12_o, ad11_o) ;    
    
        
  
endmodule


全部评论
与门可以少用几个吧
点赞 回复 分享
发布于 2022-06-09 14:23
为什么我复制参考答案运行不通过呢?
点赞 回复 分享
发布于 2022-03-16 21:17

相关推荐

2025-12-31 19:23
已编辑
门头沟学院 Java
ssob是已读不回的,字节是压根不敢投的,简历是反反复复改了N遍的,八股是永远背不完的😅😅😅扯远了,道心破碎了,把简历发出来让大伙先看看笑话。再说正事。寒假日常实习还是很难找,连个面试都难约,我不是个例,这是网上普遍反映。不报希望了,趁着2、3月前赶紧做些什么才是。扔几个碎碎念:1.这破简历还能怎么改?写到什么程度才能过实习岗筛选?广大牛友来锐评一下2.火速辅修go,是否可行目前看来是学习成本最小的。首先,很多go实习岗位已经明确要求掌握gin等技术栈,拿java简历投go的时代已经过去了。其次,很多后端的东西,MySQL、Redis这些都是通用的,不用重新学。所以这个问题就具体为:2.1&nbsp;java&amp;go混血简历怎么写第一个项目,仿大麦的微服务,不太好改。因为有用到Redisson、AOP、SpringAI这些java强相关的东西,包装成go需要替换这些方案。第二个,点评魔改。应该可以包装成go,github上也有人用go重写过。2.2&nbsp;java&amp;go通用的轮子RPC直接pass了,太烂大街了。不知道动态线程池能不能做。反正项目上新有风险,不一定来得及,非必要就不开新的项目。补充:别跟我扯RAG了,这玩意已经成新的烂大街了,详见我上一篇的吐槽。3.认真学微调prompt什么的这个半步踩进算法了已经。八股和场景题完全就是另一套,没两三个月搞不定的。约等于换方向
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
52
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务