题解 | #用3-8译码器实现全减器#(需要真值表思维)

用3-8译码器实现全减器

https://www.nowcoder.com/practice/4a8f2e5058554cea9c1cb2ac8bdea0a7

`timescale 1ns/1ns

module decoder_38(
   input             E      ,
   input             A0     ,
   input             A1     ,
   input             A2     ,
   
   output reg       Y0n    ,  
   output reg       Y1n    , 
   output reg       Y2n    , 
   output reg       Y3n    , 
   output reg       Y4n    , 
   output reg       Y5n    , 
   output reg       Y6n    , 
   output reg       Y7n    
);

always @(*)begin
   if(!E)begin
      Y0n = 1'b1;
      Y1n = 1'b1;
      Y2n = 1'b1;
      Y3n = 1'b1;
      Y4n = 1'b1;
      Y5n = 1'b1;
      Y6n = 1'b1;
      Y7n = 1'b1;
   end  
   else begin
      case({A2,A1,A0})
         3'b000 : begin
                     Y0n = 1'b0; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1; 
                     Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
                  end 
         3'b001 : begin
                     Y0n = 1'b1; Y1n = 1'b0; Y2n = 1'b1; Y3n = 1'b1; 
                     Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
                  end 
         3'b010 : begin
                     Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b0; Y3n = 1'b1; 
                     Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
                  end 
         3'b011 : begin
                     Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b0; 
                     Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
                  end 
         3'b100 : begin
                     Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1; 
                     Y4n = 1'b0; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
                  end 
         3'b101 : begin
                     Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1; 
                     Y4n = 1'b1; Y5n = 1'b0; Y6n = 1'b1; Y7n = 1'b1;
                  end 
         3'b110 : begin
                     Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1; 
                     Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b0; Y7n = 1'b1;
                  end 
         3'b111 : begin
                     Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1; 
                     Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b0;
                  end 
         default: begin
                     Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1; 
                     Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
                  end
      endcase  
   end 
end    
     
endmodule

module decoder1(
   input             A     ,
   input             B     ,
   input             Ci    ,
   
   output wire       D     ,
   output wire       Co         
);

wire Y0n,Y1n,Y2n,Y3n,Y4n,Y5n,Y6n,Y7n;

assign D  = ~Y1n | ~Y2n | ~Y4n | ~Y7n;
assign Co = ~Y1n | ~Y4n | ~Y5n | ~Y7n;
decoder_38 decoder_38(
   .E (1'b1)  ,
   .A0(B)  ,
   .A1(A)  ,
   .A2(Ci)  ,
   
   .Y0n(Y0n)  ,  
   .Y1n(Y1n)  , 
   .Y2n(Y2n)  , 
   .Y3n(Y3n)  , 
   .Y4n(Y4n)  , 
   .Y5n(Y5n)  , 
   .Y6n(Y6n)  , 
   .Y7n(Y7n)  
);
endmodule

首先需要知道全减器的原理

真值表如下图。输入值是 低位向本位的借位borrow_in(简称in),被减数a,减数b

输出值为差值diffrent(简称d)和本位向高位的借位borrow_out(简称out)(只有被减数才需要借位,所以in,out都是相对于a来说的)输入值in,a,b的状态组合有八种。

详细分析如下:

in=0,b=0,a=0时,d=a-b=0,此时a的值足够减b,因此不需要向高位借位,所以out=0.

in=0,b=0,a=1时,d=a-b=1,同样的a的值足够减b,因此不向高位借位,所以out=0.

in=0,b=1,a=0时,此时a<b,a的值不足以减b,因此a必须向高位借位,所以out=1,二进制的借位规则是借1当2(就像十进制运算中向上一位是借1当10运算),借完之后a=2,则d=a-b=1.

in=0,b=1,a=1时,d=a-b=0,同样的a的值足够减b,因此a不向高位借位,所以out=0.

in=1,b=0,a=0时,原本a是够减b的,但是这里in=1,表示a的低位向a借位了,可是a=0没有办法借给它,因此a需要向自己的高位借位,所以out=1,a向高位借位之后为2,借给a的低位要减1,所以a=1,d=a-b=1.

in=1,b=0,a=1时,in=1表示a的低位向a借位了,a被借走1,a=0,足够减b,不需要向高位借位,所以out=0,d=a-b=0.

in=1,b=1,a=0时,in=1表示a的低位向a借位了,a=0没有办法借给它,因此a需要向自己的高位借位,所以out=1,a向高位借位之后为2,再借给a的低位要减1,所以a=1,d=a-b=0.

in=1,b=1,a=1时,in=1表示a的低位向a借位了,a=1可以借给低位,借完之后a=0,不足以减b,a要向自己的高位借位out=1,借完之后a=2,d=a-b=1.

原文链接:https://blog.csdn.net/weixin_43400722/article/details/100714046

然后需要知道译码器真值表

然后根据全减器真值表可以得到表达式:

全部评论

相关推荐

03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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