第一节 基本逻辑门设计与仿真


一、1bits反相器

1.电路符号

2.真值表

3.电路原理图

4.verilog设计代码

module inverter_gate(A,Y);
input A;
output Y;

assign Y = ~ A;

endmodule 

5.仿真代码

//testbench of inverter_gate
`timescale 1ns/10ps
module inverter_gate_testbench;
reg aa;
wire yy;
//instantiation module
inverter_gate U1(
    .A(aa),
    .Y(yy)
    );

initial begin
    #0 aa <= 0;
    #10 aa <= 1;
    #10 aa <= 0;
    #10 aa <= 1;
    #10 aa <= 0;
    #10 aa <= 1;
    #10 $stop;
end

endmodule 

6.仿真结果

二、1bits与非门

1.电路符号

2.真值表

3.电路原理图

  两个NMOS串联和两个PMOS并联

4.verilog设计代码

module nand_gate(
input A,B,
output Y
    );

assign Y = ~(A&B);
endmodule 

5.仿真代码

//Testbench of nand_gate
`timescale 1ns/10ps
module nand_gate_testbench();
reg aa,bb;
wire yy;

//instantiation the module
nand_gate U1(
    .A(aa),
    .B(bb),
    .Y(yy)
    );

// aa and bb signal
initial begin
    #0 aa <= 0; bb <= 0;
    #20 aa <= 0; bb <= 1;
    #10 aa <= 1; bb <= 0;
    #20 aa <= 1; bb <= 1;
    #20 $stop;
end

endmodule 

6.仿真结果

三、其它知识点

1.reg型变量必须使用非阻塞赋值,即使用 “<=”。

2.使用非阻塞赋值才能综合出实际电路。

四、8bits反相器

1.电路符号

2.verilog 设计代码

module inverter8_gate(
input [7:0] A,
output [7:0] Y
    );

assign Y = ~ A;

endmodule

3. 仿真代码

//testbench of inverter_gate
`timescale 1ns/10ps
module inverter8_gate_testbench;
reg [7:0] aa;
wire [7:0] yy;

//instantiation the module
inverter8_gate U1(
    .A(aa),
    .Y(yy)
    );

initial begin
    #0 aa <= 8'b0000_0000;
    #10 aa <= 8'b0000_0010;
    #10 aa <= 8'b0000_0100;
    #10 aa <= 8'b0000_1000;
    #10 aa <= 8'b0001_0000;
    #10 aa <= 8'b1111_0000;
    #10 $stop;
end

endmodule 

4.仿真结果

五、4bits与非门

1.电路符号

2.verilog 设计代码

module nand4_gate(
input [3:0] A,B,
output [3:0] Y
    );

assign Y = ~(A&B);
endmodule 

3. 仿真代码

//Testbench of nand_gate
`timescale 1ns/10ps
module nand4_gate_testbench();
reg [3:0] aa,bb;
wire [3:0] yy;

//instantiation the module
nand4_gate U1(
    .A(aa),
    .B(bb),
    .Y(yy)
    );

// aa and bb signal
initial begin
    #0 aa <= 4'b0000; bb <= 4'b0000;
    #20 aa <= 4'b0000; bb <= 4'b0001;
    #10 aa <= 4'b0010; bb <= 4'b0000;
    #20 aa <= 4'b1111; bb <= 4'b1111;
    #20 $stop;
end
endmodule 

4.仿真结果

六、位运算符

以下表中的运算符叫位运算符,表示按位进行运算,表中位宽为1只是特例。