当前位置:   article > 正文

Verilog HDLBits 第二十二期:4.1 Finding bugs in code(4.1.1-4.1.5)_hdlbitsmenuproblem setsimulationmy profilehelp01xz

hdlbitsmenuproblem setsimulationmy profilehelp01xz.net searchwirezerowir

目录

前言

 4.1.1 Mux(Bugs mux2)

Solution:

 4.1.2 NAND(Bugs nand3)

Solution:

 4.1.3 Mux(Bugs mux4)

Solution:

4.1.4 Add/sub(Bugs addsubz)

Solution:

4.1.5 Case statement(Bugs case)

Solution:


前言

HDLbits网站如下

Problem sets - HDLBits (01xz.net)

从本期开始我们继续HDLbits第四章Circuits的学习,本期的内容是Finding bugs in code(4.1.1-4.1.5)


 4.1.1 Mux(Bugs mux2)

8bit的2选1数据选择器不工作,请解决bug​

Solution:

  1. module top_module (
  2. input sel,
  3. input [7:0] a,
  4. input [7:0] b,
  5. output reg [7:0] out
  6. );
  7. // 1. 因为使用的是按位运算符,sel只是一个一比特宽的量,这会导致a和b清零。
  8. // 可以使用复制运算符,但是阅读起来会有些困难
  9. // ( {8{~sel}} & a ) | ( {8{sel}} & b )
  10. // 2. 仿真波形表明,当sel=1时,应选择a。
  11. assign out = sel ? a : b;
  12. endmodule

 4.1.2 NAND(Bugs nand3)

这个三输入与非门不工作。请修复错误。 必须使用提供的5输入与门:

module andgate ( output out, input a, input b, input c, input d, input e );

Solution:

  1. module top_module (input a, input b, input c, output out);//
  2. wire out_1;
  3. andgate inst1 ( out_1,a,b,c,1'b1,1'b1 );
  4. assign out=~out_1;
  5. endmodule

中间变量out_1


 4.1.3 Mux(Bugs mux4)

这个4选1数据选择器不工作,请解决bug

你有以下正确的2选1数据选择器可以使用:

module mux2 (
    input sel,
    input [7:0] a,
    input [7:0] b,
    output [7:0] out
);

Solution:

  1. module top_module (
  2. input [1:0] sel,
  3. input [7:0] a,
  4. input [7:0] b,
  5. input [7:0] c,
  6. input [7:0] d,
  7. output [7:0] out ); //
  8. wire [7:0]mux0, mux1;
  9. mux2 mux_0 ( sel[0], a, b, mux0 );
  10. mux2 mux_1 ( sel[0], c, d, mux1 );
  11. mux2 mux_2 ( sel[1], mux0, mux1, out );
  12. endmodule

4.1.4 Add/sub(Bugs addsubz)

以下带零标志的加减器不工作。修复错误。

Solution:

  1. // synthesis verilog_input_version verilog_2001
  2. module top_module (
  3. input do_sub,
  4. input [7:0] a,
  5. input [7:0] b,
  6. output reg [7:0] out,
  7. output reg result_is_zero
  8. );//
  9. always @(*) begin
  10. case (do_sub)
  11. 0: out = a+b;
  12. 1: out = a-b;
  13. endcase
  14. if (!out)
  15. result_is_zero = 1;
  16. else
  17. result_is_zero=0;
  18. end
  19. endmodule

修改if语句的判断条件,改成逻辑取反。同时增加else


4.1.5 Case statement(Bugs case)

这个组合电路应该能够识别0到9键的8位键盘扫描码。它应该指出10个case项中是否有一个被识别(有效),如果是,则检测到了哪个密钥。修复bug。

Solution:

  1. module top_module (
  2. input [7:0] code,
  3. output reg [3:0] out,
  4. output reg valid
  5. );
  6. // A combinational always block.
  7. always @(*) begin
  8. out = 0; // 为避免产生latch,给输出一个默认的赋值
  9. valid = 1; // 然后在case语句中重写它们。这比在每种情况下为每个变量赋值要简单。
  10. case (code)
  11. 8'h45: out = 0;
  12. 8'h16: out = 1;
  13. 8'h1e: out = 2;
  14. 8'h26: out = 3; // 8'd26 is 8'h1a
  15. 8'h25: out = 4;
  16. 8'h2e: out = 5;
  17. 8'h36: out = 6;
  18. 8'h3d: out = 7;
  19. 8'h3e: out = 8;
  20. 8'h46: out = 9;
  21. default: valid = 0;
  22. endcase
  23. end
  24. endmodule

keep!

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

闽ICP备14008679号