当前位置:   article > 正文

3-8译码器和1位全加器的verilog实现

3-8译码器和1位全加器的verilog实现

3—8译码器的真值表如下

inputoutput
0000000_0001
0010000_0010
0100000_0100
0110000_1000
1000001_0000
1010010_0000
1100100_0000
1111000_0001

其电路图如下

我们打开quartus,新建一个verilog文件,写出下列代码

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

选择生成RTL电路

 问题

1)Verilog 综合生成的3-8译码器电路原理图与原始设计电路存在什么差异? 仿真测试生成的结果是否与真值表一致?

      一个是用门来表达,一个是系统自动生成;结果与真值表一致。

2) Verilog代码设计的3-8译码器模块的输出信号 为何要定义为 reg类型而不用默认wire(导线)类型?改成wire型是否可以? (即是否可以把 output reg [7:0] out  改为 output  [7:0] out) 修改后会出现什么错误?为什么会出错?

      在aways语句存在时,应当用reg类型而不用wire类型;不能改为wire类型,会提示分配左侧的对象“out”必须具有可变数据类型;因为在时序电路中应该用reg代表可变数据类型。

1位全加器

再次新建verilog文件,我们写出1位全加器的代码

  1. module full_adder(
  2. input a,
  3. input b,
  4. input cin,
  5. output sum,
  6. output cout
  7. );
  8. assign sum = a ^ b ^ cin;
  9. assign cout = (a&b)||(cin&&(a^b));
  10. endmodule

下图为生成的RTC电路图

下图为logisim生成的一位全加器

可以看出,两者差别不大 

4bit全加器
  1. module full_adder_4bit (
  2. input [3:0] A, B,
  3. input Cin,
  4. output [3:0] S,
  5. output Cout
  6. );
  7. wire c0, c1, c2;
  8. wire s0, s1, s2, s3;
  9. assign s0 = A[0] ^ B[0] ^ Cin;
  10. assign c0 = (A[0] & B[0]) | (A[0] & Cin) | (B[0] & Cin);
  11. assign s1 = A[1] ^ B[1] ^ c0;
  12. assign c1 = (A[1] & B[1]) | (A[1] & c0) | (B[1] & c0);
  13. assign s2 = A[2] ^ B[2] ^ c1;
  14. assign c2 = (A[2] & B[2]) | (A[2] & c1) | (B[2] & c1);
  15. assign s3 = A[3] ^ B[3] ^ c2;
  16. assign S = {s3, s2, s1, s0}; // 组合4位求和信号
  17. assign Cout = c2; // 输出进位信号
  18. endmodule

其电路图如下

可以跟logisim做出来的4bit全加器作对比

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

闽ICP备14008679号