Menu Close

Verilog 语法练习(11)通过波形实现电路

1.

下示的工程中8-bit宽的 2 对 1 多路复用器不起作用,尝试修复代码。注意:当sel = 1时,输出a,否则输出b。正确的波形图如下所示:

%title插图%num

请修复下列代码:

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

    assign out = (~sel & a) | (sel & b);

endmodule

 

参考代码:

 

2.

如下图所示:a,b,c为输入信号, out 为输出信号。实现下图波形

正确的波形图如下所示: %title插图%num请完善下列代码:

module top_module (input a, input b, input c, output out);

    

endmodule

 

参考代码:

 

3.

下示的工程中 4 对 1 多路复用器不起作用,尝试修复代码。要求使用提供的2 对 1 多路复用器:

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

正确的波形图如下所示: %title插图%num请修复下列代码:

module max2 (input sel, input [7:0]a, input [7:0] b, output [7:0] out);
assign out = sel ? b : a;
endmodule

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 mux0, mux1;
    mux2 mux0 ( sel[0],    a,    b, mux0 );
    mux2 mux1 ( sel[1],    c,    d, mux1 );
    mux2 mux2 ( sel[1], mux0, mux1,  out );

endmodule

 

参考代码:

 

4.

下示的工程中带有零标志(zero flag)的加减法器不起作用,尝试修复代码。

输入为do_sub ;

  • do_sub == 0  , out = a +b;
  • do_sub == 1  , out = a -b;

输入信号 a,b

输出信号out 为运算结果。

输出信号result_is_zero: 如果out == 0 ,那么result_is_zero = 1; 否则为0

正确的波形图如下所示:

%title插图%num

 

请修复下列代码:

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

        if (~out)
            result_is_zero = 1;
    end

endmodule

 

参考代码:

 

接下来的问题是根据组合逻辑的波形图,写出逻辑表达式。

5. 根据下图中的波形输出结果:其中 a,b 位输入信号; q 为输出信号。

波形图如下:

%title插图%num

完善下列代码:

module top_module (
    input a,
    input b,
    output q 
);

//assign q = ...

endmodule

 

6. 根据下图输出结果。 其中a,b,c,d为输入信号;q为输出信号。

波形图如下:

%title插图%num

完善下列代码:

module top_module (
    input a,
    input b,
    input c,
    input d,
    output q 
);

//assign q = ...

endmodule

 

参考代码:

 

7. 根据下图输出结果。其中a,b,c,d为输入信号;q为输出信号。

波形图如下:

%title插图%num

完善下列代码:

module top_module (
    input a,
    input b,
    input c,
    input d,
    output q 
);

//assign q ... 


endmodule

 

参考代码:

 

8. 根据下图输出结果。 其中a,b,c,d,e为输入信号,q为输出信号。提示:c的状态决定输出结果。

波形图如下:

%title插图%num

%title插图%num

完善下列代码:

module top_module (
    input [3:0] a,
    input [3:0] b,
    input [3:0] c,
    input [3:0] d,
    input [3:0] e,
    output [3:0] q 
);

endmodule

 

参考代码:

 

接下来的问题是根据时序电路的波形图,根据波形图实现电路。

9.时序电路,当检测到输入信号a 为 1 后; q输出为0.

波形图如下:

%title插图%num

完善下列代码:

module top_module (
    input clk,
    input a,
    output q 
);

endmodule

 

10.根据输入信号clock,a,得到输出结果p,q。注意 clock 和 q是边沿对齐的。

波形图如下:

%title插图%num

完善下列代码:

module top_module (
    input clock,
    input a,
    output reg p,
    output reg q 
);

endmodule

 

参考代码:

 

11. 根据下图输入clk, a,得到输出结果q。注意a和clk 是同步的。

波形图如下;

%title插图%num

完善下列代码:

module top_module (
    input clk,
    input a,
    output reg [3:0] q 
);

endmodule

 

参考代码:

 

12. testbench练习1: 输出波形clk

实现仿真testbench里的时钟,波形图如下所示:

%title插图%num

 

13. testbench练习2:

实现下列波形:

%title插图%num

完善下列代码:

module top_module ( output reg A, output reg B );

initial 
begin

end
endmodule

 

参考代码:

 

Posted in FPGA, FPGA 教材教案, FPGA习题库, Verilog, Verilog, 开发语言, 教材与教案, 文章, 编程语言

发表回复

相关链接