• Verilog HDL刷题笔记(01)


    听别人推荐了一个Verilog刷题网站:https://hdlbits.01xz.net/wiki/Main_Page

    01.Build a circuit with no inputs and one output. That output should always drive 1 (or logic high).

    module top_module( output one );
    
    // Insert your code here
        assign one = 1'b1;
    
    endmodule

    02.Build a circuit with no inputs and one output that outputs a constant 0.

    module top_module(output zero);
    // Module body starts after semicolon
        assign zero = 1'b0;
    endmodule

    03.Create a module with one input and one output that behaves like a wire.["continuous assignment" (assign left_side = right_side;)]

    module top_module( input in, output out );
        assign out = in;
    endmodule

    04.Create a module with 3 inputs and 4 outputs that behaves like wires that makes these connections:

    a -> w
    b -> x
    b -> y
    c -> z
    module top_module( 
        input a,b,c,
        output w,x,y,z );
        assign w=a;
        assign x=b;
        assign y=b;
        assign z=c;
    endmodule
            // If we're certain about the width of each signal, using 
        // the concatenation operator is equivalent and shorter:
        // assign {w,x,y,z} = {a,b,b,c};    

    05.Create a module that implements a NOT gate.

    module top_module( input in, output out );
        not not1(out,in);
    endmodule
    //答案:
    module top_module( input in, output out );
        assign out = ~in;
    endmodule

    06.Create a module that implements an AND gate.

    module top_module( 
        input a, 
        input b, 
        output out );
        assign out=a&&b;
    endmodule

    07.Create a module that implements a NOR gate. A NOR gate is an OR gate with its output inverted. A NOR function needs two operators when written in Verilog.

    module top_module( 
        input a, 
        input b, 
        output out );
        assign out=~(a||b);
    endmodule

    08.Create a module that implements an XNOR gate.

    module top_module( 
        input a, 
        input b, 
        output out );
        assign out=~(((~a)||(~b))&&(a||b));
    endmodule

    09.Implement the following circuit.

    module top_module (
        input a,
        input b,
        input c,
        input d,
        output out,
        output out_n );
        
        wire w1, w2;        // Declare two wires (named w1 and w2)
        assign w1 = a&b;    // First AND gate
        assign w2 = c&d;    // Second AND gate
        assign out = w1|w2;    // OR gate: Feeds both 'out' and the NOT gate
    
        assign out_n = ~out;    // NOT gate
        
    endmodule

    10.Create a module with the same functionality as the 7458 chip. It has 10 inputs and 2 outputs. You may choose to use an assign statement to drive each of the output wires, or you may choose to declare (four) wires for use as intermediate signals, where each internal wire is driven by the output of one of the AND gates. For extra practice, try it both ways.

    module top_module ( 
        input p1a, p1b, p1c, p1d, p1e, p1f,
        output p1y,
        input p2a, p2b, p2c, p2d,
        output p2y );
        wire p11,p12,p21,p22;
        assign p11=p1a&&p1b&&p1c;
        assign p12=p1d&&p1e&&p1f;
        assign p21=p2a&&p2b;
        assign p22=p2d&&p2c;
        assign p1y=p11||p12;
        assign p2y=p21||p22;
    endmodule

    11.Build a circuit that has one 3-bit input, then outputs the same vector, and also splits it into three separate 1-bit outputs. Connect output o0 to the input vector's position 0, o1 to position 1, etc.

    module top_module ( 
        input wire [2:0] vec,
        output wire [2:0] outv,
        output wire o2,
        output wire o1,
        output wire o0  ); // Module body starts after module declaration
        assign outv=vec;
        assign o0=vec[0];
        assign o1=vec[1];
        assign o2=vec[2];
    endmodule
    // This is ok too: assign {o2, o1, o0} = vec

    12.Build a combinational circuit that splits an input half-word (16 bits, [15:0] ) into lower [7:0] and upper [15:8] bytes.

    module top_module (
        input [15:0] in,
        output [7:0] out_hi,
        output [7:0] out_lo
    );
        
        assign out_hi = in[15:8];
        assign out_lo = in[7:0];
        
        // Concatenation operator also works: assign {out_hi, out_lo} = in;
        
    endmodule

    13.A 32-bit vector can be viewed as containing 4 bytes (bits [31:24], [23:16], etc.). Build a circuit that will reverse the byte ordering of the 4-byte word.

    AaaaaaaaBbbbbbbbCcccccccDddddddd => DdddddddCcccccccBbbbbbbbAaaaaaaa
    module top_module (
        input [31:0] in,
        output [31:0] out
    );
    
        assign out[31:24] = in[ 7: 0];    
        assign out[23:16] = in[15: 8];    
        assign out[15: 8] = in[23:16];    
        assign out[ 7: 0] = in[31:24];    
        
    endmodule

    14.Build a circuit that has two 3-bit inputs that computes the bitwise-OR of the two vectors, the logical-OR of the two vectors, and the inverse (NOT) of both vectors. Place the inverse of b in the upper half of out_not (i.e., bits [5:3]), and the inverse of a in the lower half.

    module top_module( 
        input [2:0] a,
        input [2:0] b,
        output [2:0] out_or_bitwise,
        output out_or_logical,
        output [5:0] out_not
    );
        assign out_or_bitwise[0]=a[0]||b[0];
        assign out_or_bitwise[1]=a[1]||b[1];
        assign out_or_bitwise[2]=a[2]||b[2];
        assign out_or_logical=a||b;
        assign out_not[0]=~a[0];
        assign out_not[1]=~a[1];
        assign out_not[2]=~a[2];
        assign out_not[3]=~b[0];
        assign out_not[4]=~b[1];
        assign out_not[5]=~b[2];
    endmodule
    //以上是不好好看书直接撸题的下场,答案:
    module top_module(
        input [2:0] a, 
        input [2:0] b, 
        output [2:0] out_or_bitwise,
        output out_or_logical,
        output [5:0] out_not
    );
        
        assign out_or_bitwise = a | b;
        assign out_or_logical = a || b;
    
        assign out_not[2:0] = ~a;    // Part-select on left side is o.
        assign out_not[5:3] = ~b;    //Assigning to [5:3] does not conflict with [2:0]
        
    endmodule

    15.Build a combinational circuit with four inputs, in[3:0].

    There are 3 outputs:

    • out_and: output of a 4-input AND gate.
    • out_or: output of a 4-input OR gate.
    • out_xor: output of a 4-input XOR gate.
    module top_module( 
        input [3:0] in,
        output out_and,
        output out_or,
        output out_xor
    );
        wire [3:0] in1;
        wire xor12,xor34;
        assign in1=~in;
        assign out_and=in[0]&&in[1]&&in[2]&&in[3];
        assign out_or=in[0]||in[1]||in[2]||in[3];
        assign xor12=~((in1[0]||in1[1])&&(in[0]||in[1]));
        assign xor34=~((in1[2]||in1[3])&&(in[2]||in[3]));
        assign out_xor=(((~xor12)||(~xor34))&&(xor12||xor34));
    endmodule
    //基础略差,分不清XOR跟XNOR。

    [注]Q8与Q15是码出来了但是具体实现还需研究。本来以为是直接套公式但总是差个非???

  • 相关阅读:
    javascript题目,如何在重写alert后还能正常弹出alert
    mass Framework support模块 v2
    javascript suggest效果
    HTML <div> 标签的 align 属性
    SQL GROUP BY 语句
    SQL UPDATE 语句
    HTML <font> 标签
    JavaScript eval() 函数
    HTML DOM Checkbox 对象
    CSS cursor 属性
  • 原文地址:https://www.cnblogs.com/kraken7/p/12872730.html
Copyright © 2020-2023  润新知