当前位置:   article > 正文

Verilog中三八译码器与全加器的使用

三八译码器

一、三八译码器

1、三八译码器简介

38译码器是一种数字逻辑电路,用于将3位二进制输入编码为8位输出。它的作用是将特定的输入模式映射到相应的输出。在数字电路设计和信息处理中,38译码器是一个常见且有用的组件,可以帮助实现数据的解码和选择性输出。

2、三八译码器结构及其真值表

真值表:

3-8译码器由三个输入引脚和八个输出引脚组成。输入引脚是A0、A1和A2,它们可以是0或1。输出引脚是YO到Y7,它们中的一个会被激活,其它的则处于非激活状态。当输入引脚的二进制值为000时,输出引脚YO会被激活。当输入引脚的二进制值为001时,输出引脚Y1会被激活,以此类推,直到输入引脚的二进制值为111时,输出引脚Y7会被激活。

3、Verilog代码

if-else版本:

  1. module decoder3_8(
  2. input wire a,b,c,
  3. output reg [7:0] out
  4. );
  5. always@(*)
  6. if({a, b, c}==3'b000)
  7. out=8'b0000_0001;
  8. else if( {a, b, c} ==3'b001)
  9. out=8'b0000_0010;
  10. else if( {a, b, c} ==3'b010)
  11. out=8'b0000_0100;
  12. else if( {a, b, c} ==3'b011)
  13. out=8'b0000_1000;
  14. else if( {a, b, c} ==3'b100)
  15. out=8'b0001_0000;
  16. else if( {a, b, c} ==3'b101)
  17. out=8'b0010_0000;
  18. else if( {a, b, c} ==3'b110)
  19. out=8'b0100_0000;
  20. else if( {a, b, c} ==3'b111)
  21. out=8'b1000_0000;
  22. endmodule

其RTL图如下:

case版本:
 

  1. module decoder3_8(
  2. input wire a,b,c,
  3. output reg [7:0] out
  4. );
  5. always@(*)
  6. case({a,b,c})
  7. 3'b000: out=8'b0000_0001;
  8. 3'b001: out=8'b0000_0010;
  9. 3'b010: out=8'b0000_0100;
  10. 3'b011: out=8'b0000_1000;
  11. 3'b100: out=8'b0001_0000;
  12. 3'b101: out=8'b0010_0000;
  13. 3'b110: out=8'b0100_0000;
  14. 3'b111: out=8'b1000_0000;
  15. endcase
  16. endmodule

其RTL图:

二、全加器

1、一位全加器

(1)简介

全加器是能够计算低位进位的二进制加法电路。与半加器相比,全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位,可以把多个一位全加器级联后做成多位全加器。

其结构图如下:

一位全加器的逻辑表达式为

S=A⊕B⊕Cin

Co=Cin(A⊕B)+AB

其中A,B为要相加的数,Cin为进位输入;S为和,Co是进位输出;

Verilog代码:

  1. module adder_1bit(
  2. input a,b,cin,
  3. output wire f,cout
  4. );
  5. assign f=a^b^cin;
  6. assign cout=(a&b)|(a&cin)|(b&cin);
  7. endmodule

RTL图:

2、四位全加器

Verilog代码:

  1. module A4bit(
  2. input a,b,cin,
  3. output wire f,cout
  4. );
  5. assign f=a^b^cin;
  6. assign cout=(a&b)|(a&cin)|(b&cin);
  7. endmodule
  8. module _4add(
  9. input [3:0] a,b,
  10. input cin,
  11. output [3:0] c,
  12. output out
  13. );
  14. wire [3:1] tem;
  15. one_add (a[0],b[0],cin,c[0],tem[1]),
  16. (a[1],b[1],tem[1],c[1],tem[2]),
  17. (a[2],b[2],tem[2],c[2],tem[3]),
  18. (a[3],b[3],tem[3],c[3],out);
  19. endmodule

RTL图:

3、八位全加器

Verilog代码:

  1. module A8bit(
  2. input a,b,cin,
  3. output wire f,cout
  4. );
  5. assign f=a^b^cin;
  6. assign cout=(a&b)|(a&cin)|(b&cin);
  7. endmodule
  8. module _8add(
  9. input [7:0] a,b,
  10. input cin,
  11. output [7:0] c,
  12. output out
  13. );
  14. wire [7:1] tem;
  15. one_add (a[0],b[0],cin,c[0],tem[1]),
  16. (a[1],b[1],tem[1],c[1],tem[2]),
  17. (a[2],b[2],tem[2],c[2],tem[3]),
  18. (a[3],b[3],tem[3],c[3],tem[4]),
  19. (a[4],b[4],tem[4],c[4],tem[5]),
  20. (a[5],b[5],tem[5],c[5],tem[6]),
  21. (a[6],b[6],tem[6],c[6],tem[7]),
  22. (a[7],b[7],tem[7],c[7],out);
  23. endmodule


因不明原因,RTL图与上述四位全加器RTL图相同,若有大佬知道,欢迎指出原因,谢谢。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/622027
推荐阅读
相关标签
  

闽ICP备14008679号