• 【HDLBits 刷题 14】Verification Reading Simulations


    目录

    写在前面

    Finding bugs in code

    Bugs mux2

    Bugs nand3

    Bugs mux4

    Bugs addsubz

    Bugs case

    Bulid a circuit from a simulation waveform

    circuit1

    circuit2

    circuit3

    circuit4

    circuit5

    circuit6

    circuit7

    circuit8

    circuit9

    circuit10


    写在前面

    以下的解题方法不一定为最佳解决方案,有更好的方法欢迎提出,共同学习,共同进步!

    Finding bugs in code

    Bugs mux2

    1. module top_module (
    2. input sel,
    3. input [7:0] a,
    4. input [7:0] b,
    5. output [7:0] out
    6. );
    7. assign out = sel?a:b ;
    8. endmodule

    Bugs nand3

    1. module top_module (
    2. input a,
    3. input b,
    4. input c,
    5. output out
    6. );
    7. reg out_reg;
    8. assign out = ~out_reg;
    9. andgate inst1 (out_reg, a, b, c, 'd1, 'd1);
    10. endmodule

    Bugs mux4

    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. );
    9. wire [7:0] mux0, mux1;
    10. mux2 mux0_inst ( sel[0], a, b, mux0 );
    11. mux2 mux1_inst ( sel[0], c, d, mux1 );
    12. mux2 mux2_inst ( sel[1], mux0, mux1, out );
    13. endmodule

    Bugs addsubz

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

    Bugs case

    1. module top_module (
    2. input [7:0] code,
    3. output reg [3:0] out,
    4. output reg valid
    5. );
    6. always @(*) begin
    7. valid = 'd1;
    8. case (code)
    9. 8'h45: out = 0;
    10. 8'h16: out = 1;
    11. 8'h1e: out = 2;
    12. 8'h26: out = 3;
    13. 8'h25: out = 4;
    14. 8'h2e: out = 5;
    15. 8'h36: out = 6;
    16. 8'h3d: out = 7;
    17. 8'h3e: out = 8;
    18. 8'h46: out = 9;
    19. default: begin
    20. valid = 0;
    21. out = 0;
    22. end
    23. endcase
    24. end
    25. endmodule

    Bulid a circuit from a simulation waveform

    circuit1

    这是一个组合电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input a,
    3. input b,
    4. output q
    5. );
    6. assign q = a&b;
    7. endmodule

    circuit2

    这是一个组合电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input a,
    3. input b,
    4. input c,
    5. input d,
    6. output q
    7. );
    8. assign q = ~(a^b^c^d); // Fix me
    9. endmodule

    circuit3

    这是一个组合电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input a,
    3. input b,
    4. input c,
    5. input d,
    6. output q
    7. );
    8. assign q = b&d | a&d | b&c | a&c ;
    9. endmodule

    circuit4

    这是一个组合电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input a,
    3. input b,
    4. input c,
    5. input d,
    6. output q
    7. );
    8. assign q = b|c;
    9. endmodule

    circuit5

    这是一个组合电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input [3:0] a,
    3. input [3:0] b,
    4. input [3:0] c,
    5. input [3:0] d,
    6. input [3:0] e,
    7. output [3:0] q
    8. );
    9. always @(*) begin
    10. case(c)
    11. 0: begin
    12. q = b;
    13. end
    14. 1: begin
    15. q = e;
    16. end
    17. 2: begin
    18. q = a;
    19. end
    20. 3: begin
    21. q = d;
    22. end
    23. default:begin
    24. q = 'd15;
    25. end
    26. endcase
    27. end
    28. endmodule

    circuit6

    这是一个组合电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input [2:0] a,
    3. output [15:0] q
    4. );
    5. always @(*) begin
    6. case(a)
    7. 0: q = 16'h1232;
    8. 1: q = 16'haee0;
    9. 2: q = 16'h27d4;
    10. 3: q = 16'h5a0e;
    11. 4: q = 16'h2066;
    12. 5: q = 16'h64ce;
    13. 6: q = 16'hc526;
    14. 7: q = 16'h2f19;
    15. endcase
    16. end
    17. endmodule

    circuit7

    这是一个时序电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input clk,
    3. input a,
    4. output q
    5. );
    6. always @(posedge clk) begin
    7. q <= ~a;
    8. end
    9. endmodule

    circuit8

    这是一个时序电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input clock,
    3. input a,
    4. output p,
    5. output q
    6. );
    7. always @(*) begin
    8. if (clock) begin
    9. p = a;
    10. end
    11. else begin
    12. p = p;
    13. end
    14. end
    15. always @(negedge clock) begin
    16. q <= a;
    17. end
    18. endmodule

    circuit9

    这是一个时序电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input clk,
    3. input a,
    4. output [3:0] q
    5. );
    6. always @(posedge clk) begin
    7. if (a) begin
    8. q <= 'd4;
    9. end
    10. else if (q=='d6) begin
    11. q <= 'd0;
    12. end
    13. else begin
    14. q <= q + 'd1;
    15. end
    16. end
    17. endmodule

    circuit10

    这是一个时序电路。读取仿真波形以确定电路的作用,然后实现它。

    1. module top_module (
    2. input clk,
    3. input a,
    4. input b,
    5. output q,
    6. output state
    7. );
    8. assign q = a^b^state;
    9. always @(posedge clk) begin
    10. if (a&b) begin
    11. state <= 'd1;
    12. end
    13. else if (~a&~b) begin
    14. state <= 'd0;
    15. end
    16. else begin
    17. state <= state;
    18. end
    19. end
    20. endmodule
  • 相关阅读:
    『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷
    谈谈大学两年的学习经历
    房地产行业程序员管理痛点分析
    react创建项目后运行npm run eject无法暴露配置文件(已解决!!!)
    游戏专属i9-13900k服务器配置一个月多少钱
    Vue-2.3v-model原理
    解决六大痛点促进企业更好使用生成式AI,亚马逊云科技顾凡采访分享可用方案
    六石管理学:水平不高,照抄就好
    操作系统MIT6.S081:P5->Isolation & system call entry/exit
    iClient for Leaflet实现动态绘圆的几何查询
  • 原文地址:https://blog.csdn.net/m0_61298445/article/details/126452871