Verilog刷题笔记63

找BUG

1、:Bug mux2

挑错:

c 复制代码
module top_module (
    input sel,
    input [7:0] a,
    input [7:0] b,
    output [7:0]out  );

    
    assign out =sel?a:b;

endmodule

结果正确:

原因:

1、输出out也应为8位

2、逻辑错误,&按位操作,需要将sel扩展到8位才可以。

但是,& 不可替换为&&,否则out的值只会是0或1。

逻辑错误也可通过三目运算符进行判断。

2:Bugs nand3

挑错:

c 复制代码
module top_module (input a, input b, input c, output out);//

    wire outzj;
    andgate inst1 (outzj,a,b,c,1,1);
    
    assign out=~outzj;

endmodule

结果正确:

原因:

用一个5输入的与门实现三输入的与非门。

首先要补全输入,之前空置的输入可用1'b1代替,再对模块的输出结果进行取反。

给定模块的输出在最前面而不是最后一位参数。

3:Bugs mux4

This 4-to-1 multiplexer doesn't work. Fix the bug(s).

You are provided with a bug-free 2-to-1 multiplexer:

module mux2 (

input sel,

input [7:0] a,

input [7:0] b,

output [7:0] out

);

挑错:

c 复制代码
module top_module (
    input [1:0] sel,
    input [7:0] a,
    input [7:0] b,
    input [7:0] c,
    input [7:0] d,
    output [7:0] out  ); //

    wire [7:0]mux0,mux1;
    mux2 mux00 ( sel[0],    a,    b, mux0 );
    mux2 mux11 ( sel[0],    c,    d, mux1 );
    mux2 mux22 ( sel[1], mux0, mux1,  out );

endmodule

结果正确:

原因:

使用给定的2选1选择器实现4选1,测试发现2选1的输出为sel=0输出a,sel=1输出b

例化名称不与变量名称相同

中间变量定义位宽不要出错

4:Bugs addsubz

The following adder-subtractor with zero flag doesn't work. Fix the bug(s).

挑错:

c 复制代码
module top_module ( 
    input do_sub,
    input [7:0] a,
    input [7:0] b,
    output reg [7:0] out,
    output reg result_is_zero
);//

    always @(*) begin
        case (do_sub)
          0: out = a+b;
          1: out = a-b;
        endcase



        result_is_zero=(out==8'd0)?1:0;
    end


endmodule

结果正确:

原因:

~out 取反也不能说明out是否为全0,可以通过如下方法:

c 复制代码
(~(out&&1'b1))
(out==8'd0)

一个always组合逻辑块内不要既有case又有其他的逻辑,有的允许,有的不允许,尽量不用。

always里面不要用assign进行赋值

5:Bugs case

This combinational circuit is supposed to recognize 8-bit keyboard scancodes for keys 0 through 9. It should indicate whether one of the 10 cases were recognized (valid), and if so, which key was detected. Fix the bug(s).

挑错:

c 复制代码
module top_module (
    input [7:0] code,
    output reg [3:0] out,
    output reg valid=1 );//

    always @(*)begin
        valid=0;
        out=0;
        case (code)
            8'h45: begin out = 0;valid=1;end
            8'h16: begin out = 1;valid=1;end
            8'h1e: begin out = 2;valid=1;end
            8'h26: begin out = 3;valid=1;end
            8'h25:begin  out = 4;valid=1;end
            8'h2e:begin  out = 5;valid=1;end
            8'h36: begin out = 6;valid=1;end
            8'h3d:begin  out = 7;valid=1;end
            8'h3e: begin out = 8;valid=1;end
            8'h46: begin out = 9;valid=1;end
        endcase
    end

endmodule

结果正确:

原因:

原代码中out=3时code是8'd26,out=9时code是6'h46,其它都是8位16进制,改成8'h之后成功运行

相关推荐
Bunny02122 小时前
SpringMVC笔记
java·redis·笔记
贾贾20238 小时前
配电网的自动化和智能化水平介绍
运维·笔记·科技·自动化·能源·制造·智能硬件
xiaocao_102310 小时前
手机备忘录:安全存储与管理个人笔记的理想选择
笔记·安全·智能手机
索然无味io11 小时前
XML外部实体注入--漏洞利用
xml·前端·笔记·学习·web安全·网络安全·php
王磊鑫11 小时前
Java入门笔记(1)
java·开发语言·笔记
安冬的码畜日常11 小时前
【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)
笔记·vim·vim配置·vim同步练习·vim options·vim option-list
追Star仙12 小时前
基于Qt中的QAxObject实现指定表格合并数据进行word表格的合并
开发语言·笔记·qt·word
安冬的码畜日常13 小时前
【Vim Masterclass 笔记24】S10L43 + L44:同步练习10 —— 基于 Vim 缓冲区的各类基础操作练习(含点评课)
笔记·vim·自学笔记·vim同步练习·vim缓冲区·vim buffer·vim缓冲区练习
一只码代码的章鱼13 小时前
粒子群算法 笔记 数学建模
笔记·算法·数学建模·逻辑回归
圆圆滚滚小企鹅。14 小时前
刷题笔记 贪心算法-1 贪心算法理论基础
笔记·算法·leetcode·贪心算法